From 42ce950e02befe6db9b61192abe231c0bcd427d9 Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Wed, 29 Sep 2021 11:23:01 -0700 Subject: [PATCH] nodeview: improved selection algorithms --- app/widget/nodeparamview/nodeparamview.cpp | 8 ++++++ app/widget/nodeview/nodeview.cpp | 33 ++++++++++++---------- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/app/widget/nodeparamview/nodeparamview.cpp b/app/widget/nodeparamview/nodeparamview.cpp index 9d3e77000..84592543d 100644 --- a/app/widget/nodeparamview/nodeparamview.cpp +++ b/app/widget/nodeparamview/nodeparamview.cpp @@ -137,6 +137,8 @@ NodeParamView::NodeParamView(QWidget *parent) : void NodeParamView::SelectNodes(const QVector &nodes) { + qint64 t = QDateTime::currentMSecsSinceEpoch(); + int original_node_count = items_.size(); foreach (Node* n, nodes) { @@ -160,10 +162,14 @@ void NodeParamView::SelectNodes(const QVector &nodes) SignalNodeOrder(); } + + qDebug() << "SelectNodes took" << (QDateTime::currentMSecsSinceEpoch() - t) << "with" << nodes.size() << "nodes"; } void NodeParamView::DeselectNodes(const QVector &nodes) { + qint64 t = QDateTime::currentMSecsSinceEpoch(); + // Remove item from map and delete the widget int original_node_count = items_.size(); @@ -190,6 +196,8 @@ void NodeParamView::DeselectNodes(const QVector &nodes) SignalNodeOrder(); } + + qDebug() << "DeselectNodes took" << (QDateTime::currentMSecsSinceEpoch() - t) << "with" << nodes.size() << "nodes"; } void NodeParamView::resizeEvent(QResizeEvent *event) diff --git a/app/widget/nodeview/nodeview.cpp b/app/widget/nodeview/nodeview.cpp index 2f72419fd..a375ede4f 100644 --- a/app/widget/nodeview/nodeview.cpp +++ b/app/widget/nodeview/nodeview.cpp @@ -214,23 +214,20 @@ void NodeView::SelectAll() ConnectSelectionChangedSignal(); - if (selected_nodes_.isEmpty()) { - // No nodes were selected before so we can just emit them all - emit NodesSelected(graph_->nodes()); - } else { - // We have to determine the difference - QVector new_selection; - for (Node* n : graph_->nodes()) { - if (!selected_nodes_.contains(n)) { - new_selection.append(n); - } + // Determine which nodes aren't selected and add them to a separate vector + QVector new_selection; + for (auto it=scene_.item_map().cbegin(); it!=scene_.item_map().cend(); it++) { + Node *n = it.key(); + if (!selected_nodes_.contains(n)) { + new_selection.append(n); } - - emit NodesSelected(new_selection); } - // Just add everything to the selected nodes list - selected_nodes_ = graph_->nodes(); + // Add this vector to our total selection vector + selected_nodes_.append(new_selection); + + // Signal new nodes + emit NodesSelected(new_selection); } void NodeView::DeselectAll() @@ -325,7 +322,13 @@ void NodeView::SelectWithDependencies(QVector nodes, bool center_view_on int original_length = nodes.size(); for (int i=0;iGetDependencies()); + QVector dependencies = nodes.at(i)->GetDependencies(); + + foreach (Node *d, dependencies) { + if (scene_.item_map().contains(d) && !nodes.contains(d)) { + nodes.append(d); + } + } } Select(nodes, center_view_on_item);