From 1f367b82fd62e6bd8e275866f27c1db338d61a3f Mon Sep 17 00:00:00 2001 From: parker Date: Tue, 24 Jun 2025 00:51:25 +0100 Subject: [PATCH] feat: add display flag button click logic --- src/gui/network/DisplayFlagButton.cpp | 44 ++++++++++++++++++++++++++- src/gui/network/DisplayFlagButton.h | 11 +++++++ src/gui/network/Network.cpp | 9 ++++++ src/gui/network/NodeEdgeGraphic.cpp | 12 +++++--- src/gui/network/NodeEdgeGraphic.h | 1 + 5 files changed, 72 insertions(+), 5 deletions(-) diff --git a/src/gui/network/DisplayFlagButton.cpp b/src/gui/network/DisplayFlagButton.cpp index e6e7837..118e49d 100644 --- a/src/gui/network/DisplayFlagButton.cpp +++ b/src/gui/network/DisplayFlagButton.cpp @@ -9,13 +9,41 @@ DisplayFlagButton::DisplayFlagButton(QGraphicsItem *parent) constexpr float width = 8; constexpr float height = 14; baseRect_ = QRectF(-width/2.0f, -height/2.0f, width, height); + setAcceptHoverEvents(true); + + disabledBrush_ = QBrush(disabledColor_); + enabledBrush_ = QBrush(enabledColor_); + hoveredBrush_ = QBrush(hoveredColor_); + + } +void DisplayFlagButton::setEnabled(bool enabled) +{ + enabled_ = enabled; + update(); +} + + void DisplayFlagButton::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { painter->setPen(Qt::NoPen); - painter->setBrush(QBrush(disabledColor_)); + // painter->setBrush(QBrush(disabledColor_)); + QBrush usedBrush; + if(hovered_) + { + usedBrush = hoveredBrush_; + } + else if(enabled_) + { + usedBrush = enabledBrush_; + } + else + { + usedBrush = disabledColor_; + } + painter->setBrush(usedBrush); constexpr float roundRad = 3; painter->drawRoundedRect(baseRect_, roundRad, roundRad); } @@ -29,3 +57,17 @@ float DisplayFlagButton::getWidth() { return baseRect_.width(); } + +void DisplayFlagButton::hoverEnterEvent(QGraphicsSceneHoverEvent *event) +{ + hovered_ = true; + update(); +} + + +void DisplayFlagButton::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) +{ + hovered_ = false; + update(); +} + diff --git a/src/gui/network/DisplayFlagButton.h b/src/gui/network/DisplayFlagButton.h index 8e2a087..076af6b 100644 --- a/src/gui/network/DisplayFlagButton.h +++ b/src/gui/network/DisplayFlagButton.h @@ -1,5 +1,6 @@ #pragma once #include +#include class DisplayFlagButton : public QGraphicsItem @@ -7,11 +8,21 @@ class DisplayFlagButton public: DisplayFlagButton(QGraphicsItem *parent = nullptr); float getWidth(); + void setEnabled(bool enabled); private: QRectF baseRect_; QColor disabledColor_=QColor("#373737"); QColor enabledColor_=QColor("#00BFFF"); + QColor hoveredColor_=QColor("#666666"); + QBrush disabledBrush_; + QBrush enabledBrush_; + QBrush hoveredBrush_; + bool hovered_=false; + bool enabled_=false; protected: QRectF boundingRect() const override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; + void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; + void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override; + }; diff --git a/src/gui/network/Network.cpp b/src/gui/network/Network.cpp index 3ee1b5b..470a5e0 100644 --- a/src/gui/network/Network.cpp +++ b/src/gui/network/Network.cpp @@ -1,4 +1,5 @@ #include "gui/network/Network.h" +#include "gui/network/DisplayFlagButton.h" #include "gui/network/NodeEdgeGraphic.h" #include "gui/network/NetworkGraphicsView.h" #include "gui/network/NetworkGraphicsScene.h" @@ -115,14 +116,22 @@ void Network::leftMousePressed(QMouseEvent *event) { deleteEdge(clickedEdge); } + // socket logic else if(clickedSocket) { socketClicked(static_cast(clickedSocket), event); } + // floating edge else if(floatingEdge_) { destroyFloatingEdge(); } + // display flag + else if(QGraphicsItem* clickedDisplayFlag = itemOfType(clickedItems)) + { + std::cout << "HERE\n"; + static_cast(clickedDisplayFlag)->setEnabled(true); + } } diff --git a/src/gui/network/NodeEdgeGraphic.cpp b/src/gui/network/NodeEdgeGraphic.cpp index 7c642fa..c1ea7ad 100644 --- a/src/gui/network/NodeEdgeGraphic.cpp +++ b/src/gui/network/NodeEdgeGraphic.cpp @@ -18,9 +18,8 @@ NodeEdgeGraphic::NodeEdgeGraphic(SocketGraphic* socket1, SocketGraphic* socket2, NodeEdgeGraphic::~NodeEdgeGraphic() { std::cout << "edge destructor\n"; - scene()->removeItem(this); - socket1_->removeEdge(this); - socket2_->removeEdge(this); + cleanUp(); + std::cout << "destructor finished\n"; } void NodeEdgeGraphic::updatePath() @@ -95,4 +94,9 @@ void NodeEdgeGraphic::paint(QPainter *painter, const QStyleOptionGraphicsItem *o } - +void NodeEdgeGraphic::cleanUp() +{ + scene()->removeItem(this); + socket1_->removeEdge(this); + socket2_->removeEdge(this); +} diff --git a/src/gui/network/NodeEdgeGraphic.h b/src/gui/network/NodeEdgeGraphic.h index 21a0d6f..6b5f377 100644 --- a/src/gui/network/NodeEdgeGraphic.h +++ b/src/gui/network/NodeEdgeGraphic.h @@ -33,5 +33,6 @@ private: qreal padding_=40; void updatePath(); + void cleanUp(); };