node socket UI

This commit is contained in:
itsmattkc
2019-04-11 11:48:20 +10:00
parent 358d1ba16a
commit 1285d70c62
14 changed files with 103 additions and 11 deletions
+10 -2
View File
@@ -202,11 +202,19 @@ int EffectUI::GetRowY(int row, QWidget* mapToWidget) {
QLabel* row_label = labels_.at(row);
int mapped_coord;
if (mapToWidget == nullptr) {
mapped_coord = contents->pos().y();
} else {
// FIXME Problematic now that EffectUIs are used outside of EffectControls
mapped_coord = mapToWidget->mapFrom(panel_effect_controls, contents->mapTo(panel_effect_controls, contents->pos())).y();
mapped_coord -= title_bar->height();
}
// Get center point of label (label->rect()->center()->y() - instead of y()+height/2 - produces an inaccurate result)
return row_label->y()
+ row_label->height() / 2
+ mapToWidget->mapFrom(panel_effect_controls, contents->mapTo(panel_effect_controls, contents->pos())).y()
- title_bar->height();
+ mapped_coord;
}
void EffectUI::UpdateFromEffect()
+1 -1
View File
@@ -95,7 +95,7 @@ public:
*
* The row's Y position.
*/
int GetRowY(int row, QWidget *mapToWidget);
int GetRowY(int row, QWidget *mapToWidget = nullptr);
/**
* @brief Update widgets with the current Effect's values.
+27 -5
View File
@@ -10,7 +10,10 @@
#include <QStyleOptionGraphicsItem>
#include <QPainter>
#include "ui/effectui.h"
const int kRoundedRectRadius = 5;
const int kNodePlugSize = 6;
NodeUI::NodeUI() :
central_widget_(nullptr)
@@ -33,24 +36,29 @@ void NodeUI::AddToScene(QGraphicsScene *scene)
if (central_widget_ != nullptr) {
proxy_ = scene->addWidget(central_widget_);
proxy_->setPos(pos() + QPoint(kRoundedRectRadius, kRoundedRectRadius));
proxy_->setPos(pos() + QPoint(1 + kRoundedRectRadius, 1 + kRoundedRectRadius));
proxy_->setParentItem(this);
}
}
void NodeUI::Resize(const QSize &s)
{
QRectF rectangle = rect();
QRectF rectangle;
rectangle.setTopLeft(pos());
rectangle.setSize(s + 2 * QSize(kRoundedRectRadius, kRoundedRectRadius));
QRectF inner_rect = rectangle;
inner_rect.translate(kNodePlugSize / 2, 0);
rectangle.setWidth(rectangle.width() + kNodePlugSize);
path_ = QPainterPath();
path_.addRoundedRect(rectangle, kRoundedRectRadius, kRoundedRectRadius);
path_.addRoundedRect(inner_rect, kRoundedRectRadius, kRoundedRectRadius);
setRect(rectangle);
}
void NodeUI::SetWidget(QWidget *widget)
void NodeUI::SetWidget(EffectUI *widget)
{
central_widget_ = widget;
}
@@ -59,6 +67,20 @@ void NodeUI::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QW
{
Q_UNUSED(widget)
if (proxy_ != nullptr) {
Effect* e = central_widget_->GetEffect();
for (int i=0;i<e->row_count();i++) {
if (e->row(i)->CanConnectNodes()) {
int y = central_widget_->GetRowY(i);
painter->setPen(Qt::black);
painter->setBrush(Qt::gray);
painter->drawEllipse(QPointF(rect().x() + kNodePlugSize / 2, proxy_->pos().y() + y), kNodePlugSize, kNodePlugSize);
}
}
}
QPalette palette = qApp->palette();
if (option->state & QStyle::State_Selected) {
+4 -2
View File
@@ -4,6 +4,8 @@
#include <QWidget>
#include <QGraphicsItem>
class EffectUI;
class NodeUI : public QGraphicsRectItem {
public:
NodeUI();
@@ -11,11 +13,11 @@ public:
void AddToScene(QGraphicsScene* scene);
void Resize(const QSize& s);
void SetWidget(QWidget* widget);
void SetWidget(EffectUI* widget);
protected:
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
private:
QWidget* central_widget_;
EffectUI* central_widget_;
QGraphicsProxyWidget* proxy_;
QPainterPath path_;
};