feat: add subtitles

This commit is contained in:
parker
2025-06-24 19:40:36 +01:00
parent df646380f2
commit b316fb9b07
3 changed files with 70 additions and 16 deletions

View File

@@ -1,4 +1,5 @@
#include "gui/network/DisplayFlagButton.h" #include "gui/network/DisplayFlagButton.h"
#include "gui/network/NodeGraphic.h"
#include <QPainter> #include <QPainter>
#include <qgraphicsitem.h> #include <qgraphicsitem.h>
#include <qnamespace.h> #include <qnamespace.h>
@@ -7,7 +8,7 @@ DisplayFlagButton::DisplayFlagButton(QGraphicsItem *parent)
: QGraphicsItem(parent) : QGraphicsItem(parent)
{ {
constexpr float width = 8; constexpr float width = 8;
constexpr float height = 14; const float height = static_cast<NodeGraphic*>(parent)->getBodyRect().height()*0.8;
baseRect_ = QRectF(-width/2.0f, -height/2.0f, width, height); baseRect_ = QRectF(-width/2.0f, -height/2.0f, width, height);
setAcceptHoverEvents(true); setAcceptHoverEvents(true);

View File

@@ -14,32 +14,62 @@
NodeGraphic::NodeGraphic(QGraphicsItem *parent) NodeGraphic::NodeGraphic(QGraphicsItem *parent)
: QGraphicsItem(parent) : QGraphicsItem(parent)
{ {
maxTitleLen_ = 10;
socketSize_ = 3; socketSize_ = 3;
title_ = "hello world"; titlePadding_=1;
bodyRect_ = QRect(-10, -10, 10*maxTitleLen_, 20); titleText_ = "Attr_Del_1";
subTitleText_ = "Attribute Delete";
constexpr int height = 27;
constexpr int width = 100;
bodyRect_ = QRect(-width*0.5f, -height*0.5f, width, height);
iconScale_=height*0.55;
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
initFonts();
initIcon();
initSockets(); initSockets();
initFlagButtons(); initFlagButtons();
initIcon();
}
void NodeGraphic::initFonts()
{
// declare fonts
titleFont_ = QFont();
titleFont_.setPixelSize(8);
subTitleFont_ = QFont();
subTitleFont_.setPixelSize(5);
// compute text positions
QRectF titleBounds = QFontMetricsF(titleFont_).boundingRect(titleText_.c_str());
QRectF subTitleBounds = QFontMetricsF(subTitleFont_).boundingRect(subTitleText_.c_str());
float titleOffsetX = (titleBounds.width()-bodyRect_.width()-iconScale_)*0.5f;
float titleOffsetY = subTitleBounds.height()*0.5f+titlePadding_+(-(subTitleBounds.height()*0.5+titleBounds.height()+titlePadding_)+bodyRect_.height())*0.5f;
// float titleOffsetY = (bodyRect_.height())*0.5f;
// titleOffsetY -= subTitleBounds.height()*0.5f;
float subTitleOffsetX = titleOffsetX;
float subTitleOffsetY = (-(subTitleBounds.height()*0.5+titleBounds.height()+titlePadding_)+bodyRect_.height())*0.5f;
titleRect_ = bodyRect_.adjusted(-titleOffsetX, titleOffsetY, -titleOffsetX, titleOffsetY);
subTitleRect_ = bodyRect_.adjusted(-subTitleOffsetX, subTitleOffsetY, -subTitleOffsetX, subTitleOffsetY);
} }
void NodeGraphic::initIcon() void NodeGraphic::initIcon()
{ {
NodeIconGraphic* icon = new NodeIconGraphic("/home/parker/MyRepos/masters/static/node-icons/grid.svg", this); icon_ = new NodeIconGraphic("/home/parker/MyRepos/masters/static/node-icons/grid.svg", this);
float iconLeftPadding = 5; // icon_ = new NodeIconGraphic("/home/parker/MyRepos/masters/static/icons/icon-main-white.svg", this);
float iconScale = 12;
icon->setScale(1.0f/icon->boundingRect().size().height()*iconScale); icon_->setScale(1.0f/icon_->boundingRect().width()*iconScale_);
icon->setPos(iconLeftPadding-iconScale/2.0f, -iconScale/2.0f); // icon_->setScale(0.01);
icon_->setPos(titleRect_.left()-iconScale_-iconPadding_, -iconScale_*0.5f);
} }
void NodeGraphic::initFlagButtons() void NodeGraphic::initFlagButtons()
{ {
displayFlagButton_ = new DisplayFlagButton(this); displayFlagButton_ = new DisplayFlagButton(this);
float padding = 4; float padding = 2;
displayFlagButton_->setPos(QPointF(bodyRect_.right()-displayFlagButton_->getWidth()/2.0f-padding, bodyRect_.center().y())); displayFlagButton_->setPos(QPointF(bodyRect_.right()-displayFlagButton_->getWidth()/2.0f-padding, bodyRect_.center().y()));
} }
@@ -116,13 +146,15 @@ void NodeGraphic::paint(QPainter *painter, const QStyleOptionGraphicsItem *optio
painter->setPen(QPen(QColor("white"))); painter->setPen(QPen(QColor("white")));
QFont font = painter->font(); painter->setFont(titleFont_);
font.setPixelSize(8);
painter->setFont(font);
// painter->setPen(QPen(QColor("#d2d2d2"))); // painter->setPen(QPen(QColor("#d2d2d2")));
painter->setPen(QPen(QColor("white"))); painter->setPen(QPen(QColor("white")));
painter->drawText( bodyRect_, Qt::AlignCenter, title_.c_str()); painter->drawText(titleRect_, Qt::AlignLeft, titleText_.c_str());
painter->setFont(subTitleFont_);
painter->drawText(subTitleRect_, Qt::AlignLeft, subTitleText_.c_str());
} }
@@ -165,6 +197,12 @@ QPointF NodeGraphic::getSocketScenePosition(int socketIndex, SocketGraphic::Sock
return this->pos()+getSocketPosition(socketIndex, socketType); return this->pos()+getSocketPosition(socketIndex, socketType);
} }
QRectF NodeGraphic::getBodyRect()
{
return bodyRect_;
}
// QVariant NodeGraphic::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) // QVariant NodeGraphic::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)
// { // {

View File

@@ -3,6 +3,7 @@
#include <QPainter> #include <QPainter>
#include "gui/network/DisplayFlagButton.h" #include "gui/network/DisplayFlagButton.h"
#include "gui/network/SocketGraphic.h" #include "gui/network/SocketGraphic.h"
#include "gui/network/NodeIconGraphic.h"
#include "gui/network/NodeEdgeGraphic.h" #include "gui/network/NodeEdgeGraphic.h"
#include <iostream> #include <iostream>
@@ -17,6 +18,7 @@ public:
SocketGraphic* getOutput(int indx) const; SocketGraphic* getOutput(int indx) const;
QPointF getSocketPosition(int socketIndex, SocketGraphic::SocketType socketType); QPointF getSocketPosition(int socketIndex, SocketGraphic::SocketType socketType);
QPointF getSocketScenePosition(int socketIndex, SocketGraphic::SocketType socketType); QPointF getSocketScenePosition(int socketIndex, SocketGraphic::SocketType socketType);
QRectF getBodyRect();
// void addEdge(NodeEdgeGraphic* edge); // void addEdge(NodeEdgeGraphic* edge);
@@ -32,18 +34,31 @@ private:
void initSockets(); void initSockets();
void initFlagButtons(); void initFlagButtons();
void initIcon(); void initIcon();
void initFonts();
std::vector<SocketGraphic*> inputs_; std::vector<SocketGraphic*> inputs_;
std::vector<SocketGraphic*> outputs_; std::vector<SocketGraphic*> outputs_;
// std::vector<NodeEdgeGraphic*> edges_; // std::vector<NodeEdgeGraphic*> edges_;
std::string title_=""; std::string titleText_="";
std::string subTitleText_="";
int maxTitleLen_=10; int maxTitleLen_=10;
QRectF bodyRect_; QRectF bodyRect_;
int socketSize_ = 1; int socketSize_ = 1;
int inputSocketCnt_=0; int inputSocketCnt_=0;
int outputSocketCnt_=0; int outputSocketCnt_=0;
NodeIconGraphic* icon_;
int iconScale_;
float iconPadding_ = 5;
QGraphicsItem* test_;
QFont titleFont_;
QFont subTitleFont_;
int titlePadding_;
QRectF titleRect_;
QRectF subTitleRect_;
DisplayFlagButton* displayFlagButton_; DisplayFlagButton* displayFlagButton_;