Vuo  2.1.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 
23 class VuoRendererPort;
26 class VuoNode;
27 class VuoNodeClass;
28 class VuoCable;
29 
33 class VuoRendererNode : public VuoRendererItem, public VuoBaseDetail<VuoNode>
34 {
35 public:
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 
54  vector<VuoRendererInputDrawer *> getAttachedInputDrawers(void) const;
55  qreal getInputDrawerOffset(unsigned int portIndex) const;
56  void updateNodeFrameRect(void);
57 
58  static QPair<QPainterPath, QPainterPath> getNodeFrames(QRectF nodeInnerFrameRect);
59  static QPainterPath getSubcompositionIndicatorPath(QRectF nodeInnerFrameRect, bool isSubcomposition);
60 
61  void setMissingImplementation(bool missingImplementation);
62  bool isMissingImplementation(void);
63 
64  void setProxyNode(VuoRendererNode * proxyNode);
65  VuoRendererNode * getProxyNode(void) const;
67  void setAlwaysDisplayPortNames(bool displayPortNames);
73 
74  QVariant itemChange(GraphicsItemChange change, const QVariant &value);
75  void updateGeometry(void);
77 
78  set<VuoCable *> getConnectedCables(bool includePublishedCables);
79  set<VuoCable *> getConnectedInputCables(bool includePublishedCables);
80  set<VuoCable *> getConnectedOutputCables(bool includePublishedCables);
81  vector<VuoRendererPort *> &getInputPorts(void);
82  vector<VuoRendererPort *> &getOutputPorts(void);
83  vector<pair<QString, json_object *> > getConstantPortValues();
84  void replaceInputPort(VuoRendererPort * oldPort, VuoRendererPort * newPort);
85  void addInputPort(VuoRendererPort * newPort);
86  bool hasGenericPort(void);
87  void setTitle(string title);
88 
89  void resetTimeLastExecuted();
90  void setExecutionEnded();
91  void setExecutionBegun();
93  void layoutConnectedInputDrawers(void);
95  void setCacheModeForNodeAndPorts(QGraphicsItem::CacheMode mode);
96  void setCacheModeForConnectedCables(QGraphicsItem::CacheMode mode);
97 
98  // Drawing configuration
99  static const qreal nodeTitleHeight;
100  static const qreal nodeHeaderYOffset;
101  static const qreal cornerRadius;
102 
103 protected:
104  virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
105  virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
106  virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
107  void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
108  void mouseDoubleClickEvent (QGraphicsSceneMouseEvent *event);
109  void keyPressEvent(QKeyEvent *event);
110 
111  // Drawing configuration
112  virtual void layoutPorts(void);
113 
115  vector<VuoRendererPort *> inputPorts;
116  vector<VuoRendererPort *> outputPorts;
119  VuoRendererColors::HighlightType _eligibilityHighlight;
120 
121 private:
122  VuoRendererNode *proxyNode;
123 
124  // Drawing configuration
125  static const qreal outerBorderWidth;
126  static const qreal nodeTitleHorizontalMargin;
127  static const qreal nodeClassHeight;
128  static const qreal iconRightOffset;
129 
130  QRectF frameRect;
131  QPair<QPainterPath, QPainterPath> nodeFrames; // (nodeOuterFrame, nodeInnerFrame)
132  QPainterPath subcompositionIndicatorPath;
133 
134  QRectF nodeTitleBoundingRect;
135 
136  // Node attributes affecting drawing
137  enum Type nodeType;
138  QString nodeClass;
139  bool nodeIsSubcomposition;
140  bool nodeIsMissing;
141  VuoRendererPort *refreshPort;
142  VuoRendererPort *functionPort;
143 
144  // Internal methods
145  void initWithNodeClass(VuoNodeClass *nodeClass);
146  void setInputPorts(vector<VuoRendererPort *> inputPorts = vector<VuoRendererPort *>());
147  void setOutputPorts(vector<VuoRendererPort *> outputPorts = vector<VuoRendererPort *>());
148 
149  void drawNodeFrame(QPainter *painter, QRectF nodeInnerFrameRect, VuoRendererColors *colors) const;
150  void layoutConnectedInputDrawer(unsigned int i);
151 
152  QPointF getPortPoint(VuoRendererPort *port, unsigned int portIndex) const;
153 };
154