copy paste repaired
This commit is contained in:
+18
-10
@@ -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,19 +301,23 @@ 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
|
||||
|
||||
for(auto c : copy_connections){
|
||||
@@ -325,6 +332,7 @@ namespace VISEQ::GRAPH{
|
||||
}
|
||||
}
|
||||
std::ranges::copy(copy_connections.begin(), copy_connections.end(), std::back_inserter(edges));
|
||||
addToSelection();
|
||||
}
|
||||
|
||||
void GraphManager::update(){
|
||||
|
||||
Reference in New Issue
Block a user