copy paste repaired

This commit is contained in:
Sebastian
2026-06-24 23:37:47 +02:00
parent a76954b6f7
commit c15188d456
+18 -10
View File
@@ -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<Node>(*n));
/*if(n->getNodeType() == NodeType::MIDINODE) copied_nodes.insert(copied_nodes.end(), std::make_shared<MidiNode>(*n));*/
/*if(n->getNodeType() == NodeType::CONFIGNODE) copied_nodes.insert(copied_nodes.end(), std::make_shared<ConfigNode>(*n));*/
//copied_nodes.insert(copied_nodes.end(), std::make_shared<Node>(*n));
if(n->getNodeType() == NodeType::MIDINODE) copied_nodes.insert(copied_nodes.end(), std::dynamic_pointer_cast<MidiNode>(n));
if(n->getNodeType() == NodeType::CONFIGNODE) copied_nodes.insert(copied_nodes.end(), std::dynamic_pointer_cast<ConfigNode>(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<Node>(*n));
/*if(n->getNodeType() == NodeType::MIDINODE) nodes.insert(nodes.end(), std::make_shared<MidiNode>(*n));*/
/*if(n->getNodeType() == NodeType::CONFIGNODE) nodes.insert(nodes.end(), std::make_shared<ConfigNode>(*n));*/
if(n->getNodeType() == NodeType::MIDINODE) nodes.insert(nodes.end(), std::dynamic_pointer_cast<MidiNode>(n));
if(n->getNodeType() == NodeType::CONFIGNODE) nodes.insert(nodes.end(), std::dynamic_pointer_cast<ConfigNode>(n));
nodes.back()->setPosition(position);
return nodes.back();
}
SPTR_Node GraphManager::copyNode(std::shared_ptr<MidiNode> n, Vec2Df position){
SPTR_Node GraphManager::copyNode(const std::shared_ptr<MidiNode> n, Vec2Df position){
std::cout << "copy midinode" << std::endl;
nodes.insert(nodes.end(), std::make_shared<MidiNode>(*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<MidiNode>(old_node), position + old_node->drag_offset);
std::cout << "node type midi" << std::endl;
new_node = copyNode(std::dynamic_pointer_cast<MidiNode>(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(){