From c15188d4566b8ef076efacf358a2c6c39d1e3b01 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Wed, 24 Jun 2026 23:37:47 +0200 Subject: [PATCH] copy paste repaired --- src/graph-manager.cpp | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/graph-manager.cpp b/src/graph-manager.cpp index 3373d38..46c5c4b 100644 --- a/src/graph-manager.cpp +++ b/src/graph-manager.cpp @@ -115,24 +115,25 @@ namespace VISEQ::GRAPH{ VEC_SPTR_Node GraphManager::getCopiesOfSelectedNodes(){ VEC_SPTR_Node copied_nodes; for(auto n : selected_nodes){ - copied_nodes.insert(copied_nodes.end(), std::make_shared(*n)); - /*if(n->getNodeType() == NodeType::MIDINODE) copied_nodes.insert(copied_nodes.end(), std::make_shared(*n));*/ - /*if(n->getNodeType() == NodeType::CONFIGNODE) copied_nodes.insert(copied_nodes.end(), std::make_shared(*n));*/ + //copied_nodes.insert(copied_nodes.end(), std::make_shared(*n)); + + if(n->getNodeType() == NodeType::MIDINODE) copied_nodes.insert(copied_nodes.end(), std::dynamic_pointer_cast(n)); + if(n->getNodeType() == NodeType::CONFIGNODE) copied_nodes.insert(copied_nodes.end(), std::dynamic_pointer_cast(n)); + copied_nodes.back()->deselect(); } return copied_nodes; } - SPTR_Node GraphManager::copyNode(SPTR_Node n, Vec2Df position){ + SPTR_Node GraphManager::copyNode(const SPTR_Node n, Vec2Df position){ std::cout << "copy basenode" << std::endl; - nodes.insert(nodes.end(), std::make_shared(*n)); - /*if(n->getNodeType() == NodeType::MIDINODE) nodes.insert(nodes.end(), std::make_shared(*n));*/ - /*if(n->getNodeType() == NodeType::CONFIGNODE) nodes.insert(nodes.end(), std::make_shared(*n));*/ + if(n->getNodeType() == NodeType::MIDINODE) nodes.insert(nodes.end(), std::dynamic_pointer_cast(n)); + if(n->getNodeType() == NodeType::CONFIGNODE) nodes.insert(nodes.end(), std::dynamic_pointer_cast(n)); nodes.back()->setPosition(position); return nodes.back(); } - SPTR_Node GraphManager::copyNode(std::shared_ptr n, Vec2Df position){ + SPTR_Node GraphManager::copyNode(const std::shared_ptr n, Vec2Df position){ std::cout << "copy midinode" << std::endl; nodes.insert(nodes.end(), std::make_shared(*n)); nodes.back()->clearConnectors(); @@ -291,6 +292,8 @@ namespace VISEQ::GRAPH{ void GraphManager::pasteNodesAndEdges(VEC_SPTR_Node nodes, Vec2Df position){ + deselect(); + std::cout << "nodes size " << nodes.size() << std::endl; VEC_SPTR_Edge copy_connections; for(auto c : edges){ if(std::ranges::contains(nodes, c->start.lock()) && std::ranges::contains(nodes, c->end.lock())) { @@ -298,18 +301,22 @@ namespace VISEQ::GRAPH{ } } std::cout << "copy_connections size " << copy_connections.size() << std::endl; - + Vec2Df insert_pos = nodes.begin()->get()->position; for(auto old_node : nodes){ SPTR_Node new_node; if(old_node->getNodeType() == NodeType::MIDINODE) { - new_node = copyNode(std::dynamic_pointer_cast(old_node), position + old_node->drag_offset); + std::cout << "node type midi" << std::endl; + new_node = copyNode(std::dynamic_pointer_cast(old_node), (old_node->position - insert_pos) + position); } else { + std::cout << "not node type midi" << std::endl; new_node = copyNode(old_node, position + old_node->drag_offset); } + old_node->selected = false; new_node->copied = false; new_node->selected = true; + //TODO copy connectors @@ -325,6 +332,7 @@ namespace VISEQ::GRAPH{ } } std::ranges::copy(copy_connections.begin(), copy_connections.end(), std::back_inserter(edges)); + addToSelection(); } void GraphManager::update(){