From 0ad623407ae59baca20b859ff34b7186c4a0eaaa Mon Sep 17 00:00:00 2001 From: parker Date: Mon, 23 Jun 2025 15:48:53 +0100 Subject: [PATCH] feat: drag connect nodes --- src/gui/network/Network.cpp | 10 ++++++++++ src/gui/network/Network.h | 1 + src/gui/network/NetworkGraphicsView.cpp | 17 +++++++++++++++++ src/gui/network/NetworkGraphicsView.h | 1 + src/gui/network/NodeGraphic.cpp | 2 +- 5 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/gui/network/Network.cpp b/src/gui/network/Network.cpp index 706790d..bcc9383 100644 --- a/src/gui/network/Network.cpp +++ b/src/gui/network/Network.cpp @@ -263,3 +263,13 @@ void Network::keyReleaseEvent(QKeyEvent *event) highlightEdge(prevHoverItem_, false); } } + +void Network::mouseReleaseEvent(QMouseEvent *event) +{ + QList hoverItems = view_->items(event->pos()); + QGraphicsItem* hoverSocket = itemOfType(hoverItems); + if(floatingEdge_ && hoverSocket) + { + socketClicked(static_cast(hoverSocket), event); + } +} diff --git a/src/gui/network/Network.h b/src/gui/network/Network.h index 12bb403..b80b8cc 100644 --- a/src/gui/network/Network.h +++ b/src/gui/network/Network.h @@ -62,4 +62,5 @@ private: protected: void resizeEvent(QResizeEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; }; diff --git a/src/gui/network/NetworkGraphicsView.cpp b/src/gui/network/NetworkGraphicsView.cpp index 5786941..b9db223 100644 --- a/src/gui/network/NetworkGraphicsView.cpp +++ b/src/gui/network/NetworkGraphicsView.cpp @@ -34,6 +34,23 @@ void NetworkGraphicsView::initUI() setViewportUpdateMode(ViewportUpdateMode::FullViewportUpdate); } +void NetworkGraphicsView::mouseReleaseEvent(QMouseEvent *event) { + // pass event to parent + QGraphicsView::mouseReleaseEvent(event); + + if (parentWidget()) { + QMouseEvent *eventCopy = new QMouseEvent( + event->type(), + event->position(), + event->scenePosition(), + event->globalPosition(), + event->button(), + event->buttons(), + event->modifiers() + ); + QCoreApplication::postEvent(parentWidget(), eventCopy); + } +} void NetworkGraphicsView::mousePressEvent(QMouseEvent *event) { diff --git a/src/gui/network/NetworkGraphicsView.h b/src/gui/network/NetworkGraphicsView.h index a392ca5..2bbf3b4 100644 --- a/src/gui/network/NetworkGraphicsView.h +++ b/src/gui/network/NetworkGraphicsView.h @@ -20,6 +20,7 @@ private: protected: void mouseMoveEvent(QMouseEvent *mouseEvent) override; void mousePressEvent(QMouseEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; void leftMousePress(QMouseEvent *event); QGraphicsItem* getItemAtClick(QMouseEvent *event); void wheelEvent(QWheelEvent *event) override; diff --git a/src/gui/network/NodeGraphic.cpp b/src/gui/network/NodeGraphic.cpp index 5493211..84c21f9 100644 --- a/src/gui/network/NodeGraphic.cpp +++ b/src/gui/network/NodeGraphic.cpp @@ -75,7 +75,7 @@ SocketGraphic* NodeGraphic::getOutput(int indx) const QRectF NodeGraphic::boundingRect() const { QRectF boundRect = bodyRect_; - float padding = 10; + float padding = 0; boundRect.adjust(-padding, -padding, padding, padding); return boundRect; }