From 4043e6fa520820a3e295f23f0c71fe3e94dc44fe Mon Sep 17 00:00:00 2001 From: parker Date: Mon, 23 Jun 2025 20:17:37 +0100 Subject: [PATCH] feat: add display flag --- CMakeLists.txt | 1 + src/gui/network/DisplayFlagButton.cpp | 31 +++++++++++++++++++++++++++ src/gui/network/DisplayFlagButton.h | 17 +++++++++++++++ src/gui/network/NodeGraphic.cpp | 9 ++++++++ src/gui/network/NodeGraphic.h | 5 +++++ 5 files changed, 63 insertions(+) create mode 100644 src/gui/network/DisplayFlagButton.cpp create mode 100644 src/gui/network/DisplayFlagButton.h diff --git a/CMakeLists.txt b/CMakeLists.txt index de34fb8..88d3a8b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,6 +26,7 @@ qt_add_executable(${AppExec} src/gui/network/SocketGraphic.cpp src/gui/network/NodeEdgeGraphic.cpp src/gui/network/FloatingEdgeGraphic.cpp + src/gui/network/DisplayFlagButton.cpp ) target_link_libraries(${AppExec} PRIVATE Qt6::Core Qt6::Widgets) diff --git a/src/gui/network/DisplayFlagButton.cpp b/src/gui/network/DisplayFlagButton.cpp new file mode 100644 index 0000000..e6e7837 --- /dev/null +++ b/src/gui/network/DisplayFlagButton.cpp @@ -0,0 +1,31 @@ +#include "gui/network/DisplayFlagButton.h" +#include +#include +#include + +DisplayFlagButton::DisplayFlagButton(QGraphicsItem *parent) +: QGraphicsItem(parent) +{ + constexpr float width = 8; + constexpr float height = 14; + baseRect_ = QRectF(-width/2.0f, -height/2.0f, width, height); + +} + +void DisplayFlagButton::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + painter->setPen(Qt::NoPen); + painter->setBrush(QBrush(disabledColor_)); + constexpr float roundRad = 3; + painter->drawRoundedRect(baseRect_, roundRad, roundRad); +} + +QRectF DisplayFlagButton::boundingRect() const +{ + return baseRect_; +} + +float DisplayFlagButton::getWidth() +{ + return baseRect_.width(); +} diff --git a/src/gui/network/DisplayFlagButton.h b/src/gui/network/DisplayFlagButton.h new file mode 100644 index 0000000..8e2a087 --- /dev/null +++ b/src/gui/network/DisplayFlagButton.h @@ -0,0 +1,17 @@ +#pragma once +#include + +class DisplayFlagButton +: public QGraphicsItem +{ +public: + DisplayFlagButton(QGraphicsItem *parent = nullptr); + float getWidth(); +private: + QRectF baseRect_; + QColor disabledColor_=QColor("#373737"); + QColor enabledColor_=QColor("#00BFFF"); +protected: + QRectF boundingRect() const override; + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; +}; diff --git a/src/gui/network/NodeGraphic.cpp b/src/gui/network/NodeGraphic.cpp index d3b9081..e17dcb6 100644 --- a/src/gui/network/NodeGraphic.cpp +++ b/src/gui/network/NodeGraphic.cpp @@ -4,6 +4,7 @@ #include #include #include +#include "gui/network/DisplayFlagButton.h" #include "gui/network/SocketGraphic.h" #include #include @@ -19,6 +20,14 @@ NodeGraphic::NodeGraphic(QGraphicsItem *parent) setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); initSockets(); + initFlagButtons(); +} + +void NodeGraphic::initFlagButtons() +{ + displayFlagButton_ = new DisplayFlagButton(this); + float padding = 4; + displayFlagButton_->setPos(QPointF(bodyRect_.right()-displayFlagButton_->getWidth()/2.0f-padding, bodyRect_.center().y())); } void NodeGraphic::initSockets() diff --git a/src/gui/network/NodeGraphic.h b/src/gui/network/NodeGraphic.h index 05b5bb6..88d6edf 100644 --- a/src/gui/network/NodeGraphic.h +++ b/src/gui/network/NodeGraphic.h @@ -1,6 +1,7 @@ #pragma once #include #include +#include "gui/network/DisplayFlagButton.h" #include "gui/network/SocketGraphic.h" #include "gui/network/NodeEdgeGraphic.h" #include @@ -29,6 +30,8 @@ public: private: void initSockets(); + void initFlagButtons(); + std::vector inputs_; std::vector outputs_; @@ -41,6 +44,8 @@ private: int inputSocketCnt_=0; int outputSocketCnt_=0; + DisplayFlagButton* displayFlagButton_; + void updatePositions(QPointF pos); protected: // QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) override;