From e10be0db88f87487c70000174df836a7da2626d7 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Thu, 11 Apr 2019 20:13:50 +1000 Subject: [PATCH] node socket UI implemented --- nodes/inputs/vecinput.cpp | 2 - nodes/nodeimageoutput.cpp | 6 +++ nodes/nodeimageoutput.h | 11 +++++ nodes/{medianode.cpp => nodemedia.cpp} | 0 nodes/{medianode.h => nodemedia.h} | 4 +- olive.pro | 10 +++-- ui/nodeui.cpp | 61 +++++++++++++++++++++----- ui/nodeui.h | 4 ++ 8 files changed, 80 insertions(+), 18 deletions(-) create mode 100644 nodes/nodeimageoutput.cpp create mode 100644 nodes/nodeimageoutput.h rename nodes/{medianode.cpp => nodemedia.cpp} (100%) rename nodes/{medianode.h => nodemedia.h} (71%) diff --git a/nodes/inputs/vecinput.cpp b/nodes/inputs/vecinput.cpp index 907da26cf..7cdf7d01b 100644 --- a/nodes/inputs/vecinput.cpp +++ b/nodes/inputs/vecinput.cpp @@ -71,8 +71,6 @@ void VecInput::SetFrameRate(const double &rate) void VecInput::SetSingleValueMode(bool on) { - qDebug() << "i'm here"; - single_value_mode_ = on; // Disable all fields except the first diff --git a/nodes/nodeimageoutput.cpp b/nodes/nodeimageoutput.cpp new file mode 100644 index 000000000..b8b23c2fa --- /dev/null +++ b/nodes/nodeimageoutput.cpp @@ -0,0 +1,6 @@ +#include "nodeimageoutput.h" + +NodeImageOutput::NodeImageOutput() +{ + +} diff --git a/nodes/nodeimageoutput.h b/nodes/nodeimageoutput.h new file mode 100644 index 000000000..69fc8ddea --- /dev/null +++ b/nodes/nodeimageoutput.h @@ -0,0 +1,11 @@ +#ifndef NODEIMAGEOUTPUT_H +#define NODEIMAGEOUTPUT_H + + +class NodeImageOutput +{ +public: + NodeImageOutput(); +}; + +#endif // NODEIMAGEOUTPUT_H \ No newline at end of file diff --git a/nodes/medianode.cpp b/nodes/nodemedia.cpp similarity index 100% rename from nodes/medianode.cpp rename to nodes/nodemedia.cpp diff --git a/nodes/medianode.h b/nodes/nodemedia.h similarity index 71% rename from nodes/medianode.h rename to nodes/nodemedia.h index 7fb634375..9e7d87cf3 100644 --- a/nodes/medianode.h +++ b/nodes/nodemedia.h @@ -1,10 +1,10 @@ #ifndef MEDIANODE_H #define MEDIANODE_H -class MediaNode +class NodeMedia { public: - MediaNode(); + NodeMedia(); }; #endif // MEDIANODE_H diff --git a/olive.pro b/olive.pro index 16f17add3..cf23b00cb 100644 --- a/olive.pro +++ b/olive.pro @@ -189,7 +189,6 @@ SOURCES += \ ui/waveform.cpp \ panels/nodeeditor.cpp \ ui/nodeview.cpp \ - nodes/medianode.cpp \ ui/nodeui.cpp \ panels/effectspanel.cpp \ nodes/nodedatatypes.cpp \ @@ -203,7 +202,9 @@ SOURCES += \ nodes/widgets/labelwidget.cpp \ nodes/inputs/fileinput.cpp \ nodes/widgets/buttonwidget.cpp \ - nodes/nodegraph.cpp + nodes/nodegraph.cpp \ + nodes/nodemedia.cpp \ + nodes/nodeimageoutput.cpp HEADERS += \ ui/mainwindow.h \ @@ -347,7 +348,6 @@ HEADERS += \ ui/waveform.h \ panels/nodeeditor.h \ ui/nodeview.h \ - nodes/medianode.h \ ui/nodeui.h \ panels/effectspanel.h \ nodes/nodedatatypes.h \ @@ -362,7 +362,9 @@ HEADERS += \ nodes/widgets/labelwidget.h \ nodes/inputs/fileinput.h \ nodes/widgets/buttonwidget.h \ - nodes/nodegraph.h + nodes/nodegraph.h \ + nodes/nodemedia.h \ + nodes/nodeimageoutput.h FORMS += diff --git a/ui/nodeui.cpp b/ui/nodeui.cpp index 49eeecb25..2d5ad970a 100644 --- a/ui/nodeui.cpp +++ b/ui/nodeui.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include "ui/effectui.h" @@ -67,17 +68,13 @@ void NodeUI::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QW { Q_UNUSED(widget) - if (proxy_ != nullptr) { - Effect* e = central_widget_->GetEffect(); + QVector sockets = GetNodeSocketRects(); + if (!sockets.isEmpty()) { + painter->setPen(Qt::black); + painter->setBrush(Qt::gray); - for (int i=0;irow_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); - } + for (int i=0;idrawEllipse(sockets.at(i)); } } @@ -91,3 +88,47 @@ void NodeUI::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QW painter->setBrush(palette.window()); painter->drawPath(path_); } + +void NodeUI::mousePressEvent(QGraphicsSceneMouseEvent *event) +{ + QVector sockets = GetNodeSocketRects(); + + bool clicked_socket = false; + + for (int i=0;ipos())) { + clicked_socket = true; + break; + } + } + + if (clicked_socket) { + qDebug() << "CLICKED SOCKET!"; + } else { + QGraphicsItem::mousePressEvent(event); + } +} + +QVector NodeUI::GetNodeSocketRects() +{ + QVector rects; + + if (proxy_ != nullptr) { + Effect* e = central_widget_->GetEffect(); + + for (int i=0;irow_count();i++) { + if (e->row(i)->CanConnectNodes()) { + int y = central_widget_->GetRowY(i); + + rects.append(QRectF(rect().x(), + proxy_->pos().y() + y - kNodePlugSize/2, + kNodePlugSize, + kNodePlugSize)); + + + } + } + } + + return rects; +} diff --git a/ui/nodeui.h b/ui/nodeui.h index 98cbe8e88..fe278accf 100644 --- a/ui/nodeui.h +++ b/ui/nodeui.h @@ -16,7 +16,11 @@ public: void SetWidget(EffectUI* widget); protected: virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; + + virtual void mousePressEvent(QGraphicsSceneMouseEvent * event) override; private: + QVector GetNodeSocketRects(); + EffectUI* central_widget_; QGraphicsProxyWidget* proxy_; QPainterPath path_;