Vuo  2.4.0
VuoRendererNode.hh
Go to the documentation of this file.
1
10#pragma once
11
12#include "VuoRendererItem.hh"
13#include "VuoRendererColors.hh"
14
15#include "VuoBaseDetail.hh"
16
17#pragma clang diagnostic push
18#pragma clang diagnostic ignored "-Wdocumentation"
19 #include <json-c/json.h>
20#pragma clang diagnostic pop
21
23class VuoRendererPort;
26class VuoNode;
27class VuoNodeClass;
28class VuoCable;
29
33class VuoRendererNode : public VuoRendererItem, public VuoBaseDetail<VuoNode>
34{
35public:
39 enum Type
40 {
41 node,
42 detachedConstant,
43 detachedDrawer,
44 detachedTypecast
45 };
46
48
49 virtual QRectF boundingRect(void) const;
50 virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
51 virtual QRectF getOuterNodeFrameBoundingRect(void) const;
52 virtual bool paintingDisabled(void) const;
53 virtual bool isEffectivelySelected(void);
54
55 vector<VuoRendererInputDrawer *> getAttachedInputDrawers(void) const;
56 qreal getInputDrawerOffset(unsigned int portIndex) const;
57 void updateNodeFrameRect(void);
58
59 static QPair<QPainterPath, QPainterPath> getNodeFrames(QRectF nodeInnerFrameRect);
60 static QPainterPath getSubcompositionIndicatorPath(QRectF nodeInnerFrameRect, bool isSubcomposition);
61
62 void setMissingImplementation(bool missingImplementation);
63 bool isMissingImplementation(void);
64
65 void setProxyNode(VuoRendererNode * proxyNode);
66 VuoRendererNode * getProxyNode(void) const;
68 void setAlwaysDisplayPortNames(bool displayPortNames);
74
75 QVariant itemChange(GraphicsItemChange change, const QVariant &value);
76 void updateGeometry(void);
78
79 set<VuoCable *> getConnectedCables(bool includePublishedCables);
80 set<VuoCable *> getConnectedInputCables(bool includePublishedCables);
81 set<VuoCable *> getConnectedOutputCables(bool includePublishedCables);
82 vector<VuoRendererPort *> &getInputPorts(void);
83 vector<VuoRendererPort *> &getOutputPorts(void);
84 vector<pair<QString, json_object *> > getConstantPortValues();
85 void replaceInputPort(VuoRendererPort * oldPort, VuoRendererPort * newPort);
86 void addInputPort(VuoRendererPort * newPort);
87 bool hasGenericPort(void);
88 void setTitle(string title);
89
91 void setExecutionEnded();
92 void setExecutionBegun();
96 void setCacheModeForNodeAndPorts(QGraphicsItem::CacheMode mode);
97 void setCacheModeForConnectedCables(QGraphicsItem::CacheMode mode);
98
99 // Drawing configuration
100 static const qreal nodeTitleHeight;
101 static const qreal nodeHeaderYOffset;
102 static const qreal cornerRadius;
103
104protected:
105 virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
106 virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
107 virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
108 void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
109 void mouseDoubleClickEvent (QGraphicsSceneMouseEvent *event);
110 void keyPressEvent(QKeyEvent *event);
111
112 // Drawing configuration
113 virtual void layoutPorts(void);
114
116 vector<VuoRendererPort *> inputPorts;
117 vector<VuoRendererPort *> outputPorts;
120 VuoRendererColors::HighlightType _eligibilityHighlight;
121
122private:
123 VuoRendererNode *proxyNode;
124
125 // Drawing configuration
126 static const qreal outerBorderWidth;
127 static const qreal nodeTitleHorizontalMargin;
128 static const qreal nodeClassHeight;
129 static const qreal iconRightOffset;
130
131 QRectF frameRect;
132 QPair<QPainterPath, QPainterPath> nodeFrames; // (nodeOuterFrame, nodeInnerFrame)
133 QPainterPath subcompositionIndicatorPath;
134
135 QRectF nodeTitleBoundingRect;
136
137 // Node attributes affecting drawing
138 enum Type nodeType;
139 QString nodeClass;
140 bool nodeIsSubcomposition;
141 bool nodeIsMissing;
142 VuoRendererPort *refreshPort;
143 VuoRendererPort *functionPort;
144
145 // Internal methods
146 void initWithNodeClass(VuoNodeClass *nodeClass);
147 void setInputPorts(vector<VuoRendererPort *> inputPorts = vector<VuoRendererPort *>());
148 void setOutputPorts(vector<VuoRendererPort *> outputPorts = vector<VuoRendererPort *>());
149
150 void drawNodeFrame(QPainter *painter, QRectF nodeInnerFrameRect, VuoRendererColors *colors) const;
151 void layoutConnectedInputDrawer(unsigned int i);
152
153 QPointF getPortPoint(VuoRendererPort *port, unsigned int portIndex) const;
154};
155Q_DECLARE_METATYPE(VuoRendererNode *)