From 8f413d37f057fd73d364255f520c03a9cd7713b5 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Fri, 16 Jul 2021 02:20:59 -0700 Subject: [PATCH] nodes: copy map when copying node with context --- app/node/node.cpp | 32 +++++++++++++++----------------- app/node/node.h | 6 +++--- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/app/node/node.cpp b/app/node/node.cpp index 1ab4c8c15..62818716e 100644 --- a/app/node/node.cpp +++ b/app/node/node.cpp @@ -1108,7 +1108,7 @@ void Node::CopyDependencyGraph(const QVector &src, const QVector } } -Node *Node::CopyNodeAndDependencyGraphMinusItemsInternal(QMap& created, const Node *node, MultiUndoCommand *command) +Node *Node::CopyNodeAndDependencyGraphMinusItemsInternal(QMap& created, Node *node, MultiUndoCommand *command) { // Make a new node of the same type Node* copy = node->copy(); @@ -1148,34 +1148,23 @@ Node *Node::CopyNodeAndDependencyGraphMinusItemsInternal(QMapparent()->GetPositionMap().contains(node)) { // This node is a context, copy the context const NodeGraph::PositionMap &map = node->parent()->GetPositionMap().value(node); - - command->add_child(new NodeSetPositionCommand(copy, copy, map.value(node), false); - for (auto it=map.cbegin(); it!=map.cend(); it++) { - Node *context_child = it.key(); - - // See if we created a copy of this - Node *context_child_copy = created.value(context_child, nullptr); - - // Add to the context - command->add_child(new NodeSetPositionCommand(context_child_copy ? context_child_copy : context_child, - copy, - it.value(), - false)); + // Add either the copy (if it exists) or the original node to the context + command->add_child(new NodeSetPositionCommand(created.value(it.key(), it.key()), copy, it.value(), false)); } } return copy; } -Node *Node::CopyNodeAndDependencyGraphMinusItems(const Node *node, MultiUndoCommand *command) +Node *Node::CopyNodeAndDependencyGraphMinusItems(Node *node, MultiUndoCommand *command) { - QMap created; + QMap created; return CopyNodeAndDependencyGraphMinusItemsInternal(created, node, command); } -Node *Node::CopyNodeInGraph(const Node *node, MultiUndoCommand *command) +Node *Node::CopyNodeInGraph(Node *node, MultiUndoCommand *command) { Node* copy; @@ -1188,6 +1177,15 @@ Node *Node::CopyNodeInGraph(const Node *node, MultiUndoCommand *command) copy)); command->add_child(new NodeCopyInputsCommand(node, copy, true)); + + if (node->parent()->GetPositionMap().contains(node)) { + // This node is a context, copy the context + const NodeGraph::PositionMap &map = node->parent()->GetPositionMap().value(node); + for (auto it=map.cbegin(); it!=map.cend(); it++) { + // Add to the context + command->add_child(new NodeSetPositionCommand(it.key(), copy, it.value(), false)); + } + } } return copy; diff --git a/app/node/node.h b/app/node/node.h index 5cb8d13b1..24727d39d 100644 --- a/app/node/node.h +++ b/app/node/node.h @@ -688,9 +688,9 @@ public: static QVector CopyDependencyGraph(const QVector& nodes, MultiUndoCommand *command); static void CopyDependencyGraph(const QVector& src, const QVector& dst, MultiUndoCommand *command); - static Node* CopyNodeAndDependencyGraphMinusItems(const Node* node, MultiUndoCommand* command); + static Node* CopyNodeAndDependencyGraphMinusItems(Node* node, MultiUndoCommand* command); - static Node* CopyNodeInGraph(const Node* node, MultiUndoCommand* command); + static Node* CopyNodeInGraph(Node *node, MultiUndoCommand* command); /** * @brief Return whether this Node can be deleted or not @@ -1125,7 +1125,7 @@ private: void ArrayResizeInternal(const QString& id, int size); - static Node *CopyNodeAndDependencyGraphMinusItemsInternal(QMap& created, const Node *node, MultiUndoCommand *command); + static Node *CopyNodeAndDependencyGraphMinusItemsInternal(QMap &created, Node *node, MultiUndoCommand *command); /** * @brief Immediates aren't deleted, so the actual array size may be larger than ArraySize()