Connecting works again (almost). Connectors need to be copied when splitting edges.

This commit is contained in:
Sebastian
2024-12-05 01:25:00 +01:00
parent b6c2029386
commit 638df54ee6
7 changed files with 46 additions and 28 deletions
+24 -7
View File
@@ -13,6 +13,7 @@
#include "state.h"
#include "canvas.h"
#include <algorithm>
#include <execution>
#include <memory>
namespace VISEQ::INTERACTION{
@@ -184,16 +185,32 @@ namespace VISEQ::INTERACTION{
state->mouse_z = canvas->z_index;
for(auto e : APP::event_queue){
if(!connect_once && e.action == APP::Interaction::CONNECT){
APP::InteractionEvent partner;
bool found = false;
for(auto ei : APP::event_queue){
if(ei.action == APP::Interaction::HOVER && ei.item->getType() == GraphItemType::CONNECTOR) {
std::cout << "YEAH" << std::endl;
partner = ei;
found = true;
break;
}
}
if(found && partner != e){
auto connector = std::dynamic_pointer_cast<Connector>(e.item);
auto connector_to = std::dynamic_pointer_cast<Connector>(partner.item);
connector->partner = connector_to;
connector_to->partner = connector;
gm->addConnection(std::dynamic_pointer_cast<Node>(connector->parent.lock()), std::dynamic_pointer_cast<Node>(connector_to->parent.lock()));
connect_once = true;
}
}
}
while(APP::event_queue.size() > 0 && !exit){
auto e = APP::event_queue.front();
if(!connect_once && e.action == APP::Interaction::CONNECT){
auto connector = std::dynamic_pointer_cast<Connector>(e.item);
auto connector_to = std::dynamic_pointer_cast<Connector>(connector->partner.lock());
gm->addConnection(std::dynamic_pointer_cast<Node>(connector->parent), std::dynamic_pointer_cast<Node>(connector_to->parent));
connect_once = true;
}
if(e.action == APP::Interaction::HOVER){
state->mouse_z = e.item->z_index;
}