From fc8bba956b57633c362d476622ee5a8b50aef703 Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Tue, 10 May 2022 17:32:48 -0700 Subject: [PATCH] nodeparamview: support pasting values into multiple nodes of same type --- app/widget/nodeparamview/nodeparamview.cpp | 17 +++++++++++------ app/widget/nodeparamview/nodeparamview.h | 1 + 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/app/widget/nodeparamview/nodeparamview.cpp b/app/widget/nodeparamview/nodeparamview.cpp index c902503c6..e687ada6a 100644 --- a/app/widget/nodeparamview/nodeparamview.cpp +++ b/app/widget/nodeparamview/nodeparamview.cpp @@ -523,16 +523,21 @@ void NodeParamView::SetSelectedNodes(const QVector &nodes, bo } Node *NodeParamView::GetNodeWithID(const QString &id) +{ + return GetNodeWithIDAndIgnoreList(id, QVector()); +} + +Node *NodeParamView::GetNodeWithIDAndIgnoreList(const QString &id, const QVector &ignore) { for (NodeParamViewItem *item : selected_nodes_) { - if (item->GetNode()->id() == id) { + if (item->GetNode()->id() == id && !ignore.contains(item->GetNode())) { return item->GetNode(); } } for (NodeParamViewContext *ctx : context_items_) { for (NodeParamViewItem *item : ctx->GetItems()) { - if (item->GetNode()->id() == id) { + if (item->GetNode()->id() == id && !ignore.contains(item->GetNode())) { return item->GetNode(); } } @@ -601,12 +606,12 @@ bool NodeParamView::Paste() } // Determine if any nodes of this type are already in the editor + QVector ignore_nodes; QMap existing_nodes; for (Node *n : res.GetLoadedNodes()) { - if (Node *existing = GetNodeWithID(n->id())) { - if (!existing_nodes.contains(existing)) { - existing_nodes.insert(existing, n); - } + if (Node *existing = GetNodeWithIDAndIgnoreList(n->id(), ignore_nodes)) { + existing_nodes.insert(existing, n); + ignore_nodes.append(existing); } } diff --git a/app/widget/nodeparamview/nodeparamview.h b/app/widget/nodeparamview/nodeparamview.h index 26bde1fc2..534ae0964 100644 --- a/app/widget/nodeparamview/nodeparamview.h +++ b/app/widget/nodeparamview/nodeparamview.h @@ -65,6 +65,7 @@ public: void SetSelectedNodes(const QVector &nodes, bool emit_signal = true); Node *GetNodeWithID(const QString &id); + Node *GetNodeWithIDAndIgnoreList(const QString &id, const QVector &ignore); const QVector &GetContexts() const {