diff --git a/app/widget/nodeview/nodeview.cpp b/app/widget/nodeview/nodeview.cpp index 6f277e5a9..b67076a8f 100644 --- a/app/widget/nodeview/nodeview.cpp +++ b/app/widget/nodeview/nodeview.cpp @@ -353,42 +353,12 @@ void NodeView::CopySelected(bool cut) void NodeView::Paste() { - if (!graph_) { - return; - } - - paste_command_ = new MultiUndoCommand(); - - QVector pasted_nodes = PasteNodesFromClipboard(graph_, paste_command_); - - if (!pasted_nodes.isEmpty()) { - paste_command_->add_child(new NodeViewAttachNodesToCursor(this, pasted_nodes)); - } - - paste_command_->redo(); + PasteNodesInternal(); } void NodeView::Duplicate() { - if (!graph_) { - return; - } - - QVector selected = scene_.GetSelectedNodes(); - - if (selected.isEmpty()) { - return; - } - - paste_command_ = new MultiUndoCommand(); - - QVector duplicated_nodes = Node::CopyDependencyGraph(selected, paste_command_); - - if (!duplicated_nodes.isEmpty()) { - paste_command_->add_child(new NodeViewAttachNodesToCursor(this, duplicated_nodes)); - } - - paste_command_->redo(); + PasteNodesInternal(scene_.GetSelectedNodes()); } void NodeView::SetColorLabel(int index) @@ -1596,6 +1566,34 @@ NodeViewItem *NodeView::UpdateNodeItem(Node *node, bool ignore_own_context) return item; } +void NodeView::PasteNodesInternal(const QVector &duplicate_nodes) +{ + // If no graph, do nothing + if (!graph_) { + return; + } + + paste_command_ = new MultiUndoCommand(); + + // If duplicating nodes, duplicate, otherwise paste + QVector new_nodes; + if (duplicate_nodes.isEmpty()) { + new_nodes = PasteNodesFromClipboard(graph_, paste_command_); + } else { + new_nodes = Node::CopyDependencyGraph(duplicate_nodes, paste_command_); + } + + // If no nodes were retrieved, do nothing + if (new_nodes.isEmpty()) { + return; + } + + // Attach nodes to cursor + paste_command_->add_child(new NodeViewAttachNodesToCursor(this, new_nodes)); + + paste_command_->redo(); +} + NodeView::NodeViewAttachNodesToCursor::NodeViewAttachNodesToCursor(NodeView *view, const QVector &nodes) : view_(view), nodes_(nodes) diff --git a/app/widget/nodeview/nodeview.h b/app/widget/nodeview/nodeview.h index 402c643d3..24e9d452c 100644 --- a/app/widget/nodeview/nodeview.h +++ b/app/widget/nodeview/nodeview.h @@ -142,6 +142,8 @@ private: NodeViewItem *UpdateNodeItem(Node *node, bool ignore_own_context = false); + void PasteNodesInternal(const QVector &duplicate_nodes = QVector()); + class NodeViewAttachNodesToCursor : public UndoCommand { public: