From 2e6314000086c37f1512f767efce6487d7f87fbc Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Thu, 18 Mar 2021 19:35:09 +1100 Subject: [PATCH] nodeparamview: prevent duplicate items --- app/widget/nodeparamview/nodeparamview.cpp | 30 +++++++++++++--------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/app/widget/nodeparamview/nodeparamview.cpp b/app/widget/nodeparamview/nodeparamview.cpp index f1470ba27..8998117d9 100644 --- a/app/widget/nodeparamview/nodeparamview.cpp +++ b/app/widget/nodeparamview/nodeparamview.cpp @@ -137,19 +137,22 @@ NodeParamView::NodeParamView(QWidget *parent) : void NodeParamView::SelectNodes(const QVector &nodes) { - active_nodes_.append(nodes); - - bool changes_made = false; + int original_node_count = items_.size(); foreach (Node* n, nodes) { - if (!pinned_nodes_.contains(n)) { - AddNode(n); - - changes_made = true; + // If we've already added this node (either a duplicate or a pinned node), don't add another + if (items_.contains(n)) { + continue; } + + // Add to "active" list to represent currently selected node + active_nodes_.append(n); + + // Create node UI + AddNode(n); } - if (changes_made) { + if (items_.size() > original_node_count ) { UpdateItemTime(GetTimestamp()); // Re-arrange keyframes @@ -162,23 +165,26 @@ void NodeParamView::SelectNodes(const QVector &nodes) void NodeParamView::DeselectNodes(const QVector &nodes) { // Remove item from map and delete the widget - bool changes_made = false; + int original_node_count = items_.size(); foreach (Node* n, nodes) { + // Filter out duplicates + if (!items_.contains(n)) { + continue; + } + if (!pinned_nodes_.contains(n)) { // Store expanded state node_expanded_state_.insert(n, items_.value(n)->IsExpanded()); // Remove all keyframes from this node RemoveNode(n); - - changes_made = true; } active_nodes_.removeOne(n); } - if (changes_made) { + if (items_.size() < original_node_count) { // Re-arrange keyframes QueueKeyframePositionUpdate();