PeriDyno 1.2.1
Loading...
Searching...
No Matches
WtNode.h
Go to the documentation of this file.
1#pragma once
2
3#include <Wt/WPointF.h>
4#include <Wt/WFontMetrics.h>
5#include <Wt/WRectF.h>
6#include <Wt/WFont.h>
7#include <Wt/WTransform.h>
8
9#include "guid.hpp"
10
12#include "WtNodeDataModel.h"
13#include "WtNodeData.hpp"
14#include "WtNodeStyle.h"
15#include "WtFlowNodeData.h"
16#include <memory>
17#include <unordered_map>
18#include <Module.h>
19
21class WtNodeDataModel;
23
25{
26public:
27 WtNodeGeometry(std::unique_ptr<WtNodeDataModel> const& dataModel, Wt::WPaintDevice* paintDevice);
29
30public:
31 unsigned int height() const { return _height; };
32
33 void setHeight(unsigned int h) { _height = h; }
34
35 unsigned int width() const { return _width; }
36
37 void setWidth(unsigned int w) { _width = w; }
38
39 unsigned int entryHeight() const { return _entryHeight; }
40
41 void setEntryHeight(unsigned int h) { _entryHeight = h; }
42
43 unsigned int entryWidth() const { return _entryWidth; }
44
45 void setEntryWidth(unsigned int w) { _entryWidth = w; }
46
47 unsigned int hotkeyWidth() const { return _hotkeyWidth; }
48
49 void setHotkeyWidth(unsigned int w) { _hotkeyWidth = w; }
50
51 unsigned int hotkeyIncline() const { return _hotkeyIncline; }
52
53 void setHotkeyIncline(unsigned int inc) { _hotkeyIncline = inc; }
54
55 unsigned int hotkeyOffset() const { return _hotkeyOffset; }
56
57 void setHotkeyOffset(unsigned int offset) { _hotkeyOffset = offset; }
58
59 unsigned int spacing() const { return _spacing; }
60
61 unsigned int captionHeightSpacing() const { return _captionHeightSpacing; }
62
63 void setSpacing(unsigned int s) { _spacing = s; }
64
65 bool hovered() const { return _hovered; }
66
67 void setHovered(unsigned int h) { _hovered = h; }
68
69 unsigned int nSources() const;
70
71 unsigned int nSinks() const;
72
73 Wt::WPointF const& draggingPos() const
74 {
75 return _draggingPos;
76 }
77
78 void setDraggingPosition(Wt::WPointF const& pos)
79 {
80 _draggingPos = pos;
81 }
82
83 //QDialog* TipsWidget;
84 //QDockWidget* TipsWidget_;
85 //QDialog* PortTipsWidget;
86
89
92
93 void ShowTips()const;
94 void HideTips()const;
95
96 bool getPortTipsState()const;
97 void ShowPortTips()const;
98 void HidePortTips()const;
99
100public:
101 std::string strFormat(std::string str) const;
102
103 Wt::WRectF entryBoundingRect() const;
104
105 Wt::WRectF boundingRect() const;
106
107 void recalculateSize() const;
108
109 double calculateWidth(std::string) const;
110
111 double calculateWidth(int num) const;
112
113 //void recalculateSize(Wt::WFont const& font, Wt::WFontMetrics fontMetrics) const;
114
115 Wt::WPointF portScenePosition(PortIndex index, PortType portType, Wt::WTransform const& t = Wt::WTransform()) const;
116
117 PortIndex checkHitScenePoint(PortType portType, Wt::WPointF point, Wt::WTransform const& t = Wt::WTransform()) const;
118
119 PortIndex hoverHitScenePoint(PortType portType, Wt::WPointF point, Wt::WTransform const& t = Wt::WTransform()) const;
120
122 Wt::WPointF const scenePoint,
123 Wt::WTransform const& sceneTransform,
124 WtNodeGeometry const& geom,
125 WtNodeDataModel const* mode,
126 Wt::WFontMetrics const& metrics) const;
127
129 Wt::WPointF const scenePoint,
130 Wt::WTransform const& sceneTransform,
131 WtNodeGeometry const& geom,
132 WtNodeDataModel const* model) const;
133
134 bool checkHitHotKey0(Wt::WPointF point, Wt::WTransform const& t = Wt::WTransform()) const;
135
136 bool checkHitHotKey1(Wt::WPointF point, Wt::WTransform const& t = Wt::WTransform()) const;
137
138 Wt::WRectF resizeRect() const;
139
140 Wt::WPointF widgetPosition() const;
141
143
144 unsigned int validationHeight() const;
145
146 unsigned int validationWidth() const;
147
148 //static Wt::WPointF calculateNodePositionBetweenNodePorts(
149 // PortIndex targetPortIndex, PortType targetPort, WtNode* targetNode,
150 // PortIndex sourcePortIndex, PortType sourcePort, WtNode* sourceNode,
151 // WtNode& newNode);
152
153 unsigned int captionHeight() const;
154
155 unsigned int captionWidth() const;
156
157private:
158 unsigned int portWidth(PortType portType) const;
159
160private:
161 mutable unsigned int _width;
162 mutable unsigned int _height;
163 unsigned int _entryWidth;
164 mutable unsigned int _inputPortWidth;
165 mutable unsigned int _outputPortWidth;
166 mutable unsigned int _entryHeight;
167 unsigned int _spacing;
169
170 unsigned int _hotkeyWidth;
171 unsigned int _hotkeyIncline;
172 unsigned int _hotkeyOffset;
173
175
176 unsigned int _nSources;
177 unsigned int _nSinks;
178
179 Wt::WPointF _draggingPos;
180
181 std::unique_ptr<WtNodeDataModel> const& _dataModel;
182
183 mutable Wt::WFontMetrics _fontMetrics;
184 //mutable Wt::WFontMetrics _boldFontMetrics;
185};
186
188{
189public:
195
196public:
197 WtNodeState(std::unique_ptr<WtNodeDataModel> const& model);
198
199public:
200 using ConnectionPtrSet = std::unordered_map<Wt::Guid, WtConnection*>;
201
204 std::vector<ConnectionPtrSet> const& getEntries(PortType) const;
205
206 std::vector<ConnectionPtrSet>& getEntries(PortType);
207
208 ConnectionPtrSet connections(PortType portType, PortIndex portIndex) const;
209
210 void setConnection(
211 PortType portType,
212 PortIndex portIndex,
213 WtConnection& connection);
214
215 void eraseConnection(
216 PortType portType,
217 PortIndex portIndex,
218 Wt::Guid id);
219
221
223
225
226 void setReaction(
230 NodeDataType());
231
232 bool isReacting() const;
233
234 void setResizing(bool resizing);
235
236 bool resizing() const;
237
238private:
239 std::vector<ConnectionPtrSet> _inConnections;
240 std::vector<ConnectionPtrSet> _outConnections;
241
245
247};
248
250{
251public:
252 WtNode(std::unique_ptr<WtNodeDataModel>&& dataModel, Wt::WPaintDevice* paintDevice);
253
254 virtual ~WtNode();
255
256public:
257 //QJsonObject save() const override;
258
259 //void restore(QJsonObject const& json) override;
260
261public:
262 Wt::Guid id() const;
263
265 NodeDataType const&,
266 Wt::WPointF const& scenePoint);
267
269
270public:
271
273
275
276 void setGraphicsObject(std::unique_ptr<WtNodeGraphicsObject>&& graphics);
277
279
280 WtNodeGeometry const& nodeGeometry() const;
281
282 WtNodeState const& nodeState() const;
283
285
287
289
290 void setNode(std::shared_ptr<dyno::Node> node) { mNode = node; }
291
292 void setModule(std::shared_ptr<dyno::Module> module) { mModule = module; }
293
294 std::shared_ptr<dyno::Node> getNode() { return mNode; }
295
296 std::shared_ptr<dyno::Module> getModule() { return mModule; }
297
298 void addConnection(PortIndex portIndex, std::shared_ptr<WtConnection> connection)
299 {
300 _portConnection.insert(std::make_pair(portIndex, connection));
301 }
302
303 std::shared_ptr<WtConnection> getIndexConnection(PortIndex portIndex)
304 {
305 if (_portConnection.find(portIndex) != _portConnection.end())
306 {
307 return _portConnection[portIndex];
308 }
309 else
310 {
311 return nullptr;
312 }
313 }
314
315public:
317 void propagateData(std::shared_ptr<WtNodeData> nodeData, PortIndex inPortIndex) const;
318
321 void onDataUpdated(PortIndex index);
322
324 void onNodeSizeUpdated();
325
326private:
328
329 std::unique_ptr<WtNodeDataModel> _nodeDataModel;
330
332
334
335 std::unique_ptr<WtNodeGraphicsObject> _nodeGraphicsObject;
336
338
339 std::map<PortIndex, std::shared_ptr<WtConnection>> _portConnection;
340
341 std::shared_ptr<dyno::Module> mModule;
342
343 std::shared_ptr<dyno::Node> mNode;
344};
int PortIndex
PortType
unsigned int _hotkeyOffset
Definition WtNode.h:172
unsigned int captionHeightSpacing() const
Definition WtNode.h:61
WtNodeGeometry(std::unique_ptr< WtNodeDataModel > const &dataModel, Wt::WPaintDevice *paintDevice)
Definition WtNode.cpp:15
bool hovered() const
Definition WtNode.h:65
unsigned int _entryHeight
Definition WtNode.h:166
void HidePortTips() const
Definition WtNode.cpp:70
PortIndex hoverHitScenePoint(PortType portType, Wt::WPointF point, Wt::WTransform const &t=Wt::WTransform()) const
Definition WtNode.cpp:344
bool * isNodeTipsShow
Definition WtNode.h:91
bool * isPortTipsShow
Definition WtNode.h:90
PortType hoverport_type
Definition WtNode.h:87
unsigned int captionHeight() const
Definition WtNode.cpp:516
void setHotkeyIncline(unsigned int inc)
Definition WtNode.h:53
unsigned int captionWidth() const
Definition WtNode.cpp:526
unsigned int nSinks() const
Definition WtNode.cpp:112
void setDraggingPosition(Wt::WPointF const &pos)
Definition WtNode.h:78
Wt::WPointF portScenePosition(PortIndex index, PortType portType, Wt::WTransform const &t=Wt::WTransform()) const
Definition WtNode.cpp:270
Wt::WPointF widgetPosition() const
PortIndex hoverHitPortArea(PortType portType, Wt::WPointF const scenePoint, Wt::WTransform const &sceneTransform, WtNodeGeometry const &geom, WtNodeDataModel const *mode, Wt::WFontMetrics const &metrics) const
unsigned int entryWidth() const
Definition WtNode.h:43
void setSpacing(unsigned int s)
Definition WtNode.h:63
unsigned int hotkeyIncline() const
Definition WtNode.h:51
unsigned int _height
Definition WtNode.h:162
bool checkHitHotKey1(Wt::WPointF point, Wt::WTransform const &t=Wt::WTransform()) const
Definition WtNode.cpp:142
Wt::WFontMetrics _fontMetrics
Definition WtNode.h:183
Wt::WRectF resizeRect() const
Definition WtNode.cpp:167
void setWidth(unsigned int w)
Definition WtNode.h:37
void recalculateSize() const
Definition WtNode.cpp:233
unsigned int portWidth(PortType portType) const
Definition WtNode.cpp:552
unsigned int width() const
Definition WtNode.h:35
void setHotkeyWidth(unsigned int w)
Definition WtNode.h:49
unsigned int spacing() const
Definition WtNode.h:59
void ShowTips() const
Definition WtNode.cpp:42
bool _hovered
Definition WtNode.h:174
unsigned int _entryWidth
Definition WtNode.h:163
unsigned int _hotkeyIncline
Definition WtNode.h:171
unsigned int hotkeyWidth() const
Definition WtNode.h:47
unsigned int height() const
Definition WtNode.h:31
bool getPortTipsState() const
Definition WtNode.cpp:78
std::unique_ptr< WtNodeDataModel > const & _dataModel
Definition WtNode.h:181
void ShowPortTips() const
Definition WtNode.cpp:80
void setHotkeyOffset(unsigned int offset)
Definition WtNode.h:57
PortIndex hoverport_id
Definition WtNode.h:88
Wt::WRectF boundingRect() const
Definition WtNode.cpp:221
double calculateWidth(std::string) const
Definition WtNode.cpp:539
unsigned int _hotkeyWidth
Definition WtNode.h:170
unsigned int _width
Definition WtNode.h:161
void setHeight(unsigned int h)
Definition WtNode.h:33
void setHovered(unsigned int h)
Definition WtNode.h:67
void setEntryHeight(unsigned int h)
Definition WtNode.h:41
unsigned int validationHeight() const
Definition WtNode.cpp:177
unsigned int hotkeyOffset() const
Definition WtNode.h:55
PortIndex checkHitScenePoint(PortType portType, Wt::WPointF point, Wt::WTransform const &t=Wt::WTransform()) const
Definition WtNode.cpp:312
void setEntryWidth(unsigned int w)
Definition WtNode.h:45
Wt::WPointF const & draggingPos() const
Definition WtNode.h:73
void HideTips() const
Definition WtNode.cpp:63
unsigned int _captionHeightSpacing
Definition WtNode.h:168
unsigned int _inputPortWidth
Definition WtNode.h:164
unsigned int _outputPortWidth
Definition WtNode.h:165
unsigned int _nSources
Definition WtNode.h:176
unsigned int entryHeight() const
Definition WtNode.h:39
PortIndex findHitPort(PortType portType, Wt::WPointF const scenePoint, Wt::WTransform const &sceneTransform, WtNodeGeometry const &geom, WtNodeDataModel const *model) const
unsigned int _nSinks
Definition WtNode.h:177
int equivalentWidgetHeight() const
std::string strFormat(std::string str) const
Definition WtNode.cpp:193
unsigned int nSources() const
Definition WtNode.cpp:107
Wt::WPointF _draggingPos
Definition WtNode.h:179
unsigned int validationWidth() const
Definition WtNode.cpp:184
unsigned int _spacing
Definition WtNode.h:167
bool checkHitHotKey0(Wt::WPointF point, Wt::WTransform const &t=Wt::WTransform()) const
Definition WtNode.cpp:117
Wt::WRectF entryBoundingRect() const
Definition WtNode.cpp:211
std::unique_ptr< WtNodeDataModel > _nodeDataModel
Definition WtNode.h:329
std::map< PortIndex, std::shared_ptr< WtConnection > > _portConnection
Definition WtNode.h:339
WtNodeDataModel * nodeDataModel() const
Definition WtNode.cpp:727
WtNodeState _nodeState
Definition WtNode.h:331
void setNode(std::shared_ptr< dyno::Node > node)
Definition WtNode.h:290
Wt::Guid id() const
Definition WtNode.cpp:679
void reactToPossibleConnection(PortType, NodeDataType const &, Wt::WPointF const &scenePoint)
std::unique_ptr< WtNodeGraphicsObject > _nodeGraphicsObject
Definition WtNode.h:335
WtFlowNodeData _flowNodeData
Definition WtNode.h:337
void setModule(std::shared_ptr< dyno::Module > module)
Definition WtNode.h:292
void setGraphicsObject(std::unique_ptr< WtNodeGraphicsObject > &&graphics)
Definition WtNode.cpp:700
std::shared_ptr< dyno::Module > getModule()
Definition WtNode.h:296
WtFlowNodeData & flowNodeData()
Definition WtNode.h:288
void onDataUpdated(PortIndex index)
Definition WtNode.cpp:744
WtNodeGraphicsObject const & nodeGraphicsObject() const
Definition WtNode.cpp:690
void addConnection(PortIndex portIndex, std::shared_ptr< WtConnection > connection)
Definition WtNode.h:298
virtual ~WtNode()
std::shared_ptr< dyno::Node > mNode
Definition WtNode.h:343
WtNodeGeometry _nodeGeometry
Definition WtNode.h:333
WtNode(std::unique_ptr< WtNodeDataModel > &&dataModel, Wt::WPaintDevice *paintDevice)
Definition WtNode.cpp:666
std::shared_ptr< dyno::Node > getNode()
Definition WtNode.h:294
Wt::Guid _uid
Definition WtNode.h:327
void resetReactionToConnection()
Definition WtNode.cpp:684
void propagateData(std::shared_ptr< WtNodeData > nodeData, PortIndex inPortIndex) const
Propagates incoming data to the underlying model.
Definition WtNode.cpp:732
std::shared_ptr< dyno::Module > mModule
Definition WtNode.h:341
WtNodeState const & nodeState() const
Definition WtNode.cpp:717
WtNodeGeometry & nodeGeometry()
Definition WtNode.cpp:707
void onNodeSizeUpdated()
update the graphic part if the size of the embeddedwidget changes
Definition WtNode.cpp:758
std::shared_ptr< WtConnection > getIndexConnection(PortIndex portIndex)
Definition WtNode.h:303
std::vector< ConnectionPtrSet > _outConnections
Definition WtNode.h:240
bool isReacting() const
Definition WtNode.cpp:651
std::unordered_map< Wt::Guid, WtConnection * > ConnectionPtrSet
Definition WtNode.h:200
WtNodeState(std::unique_ptr< WtNodeDataModel > const &model)
Definition WtNode.cpp:574
std::vector< ConnectionPtrSet > _inConnections
Definition WtNode.h:239
std::vector< ConnectionPtrSet > const & getEntries(PortType) const
Definition WtNode.cpp:582
PortType reactingPortType() const
Definition WtNode.cpp:629
ReactToConnectionState reaction() const
Definition WtNode.cpp:624
NodeDataType _reactingDataType
Definition WtNode.h:244
ConnectionPtrSet connections(PortType portType, PortIndex portIndex) const
Definition WtNode.cpp:598
PortType _reactingPortType
Definition WtNode.h:243
ReactToConnectionState
Definition WtNode.h:191
@ NOT_REACTING
Definition WtNode.h:193
void eraseConnection(PortType portType, PortIndex portIndex, Wt::Guid id)
Definition WtNode.cpp:616
ReactToConnectionState _reaction
Definition WtNode.h:242
void setConnection(PortType portType, PortIndex portIndex, WtConnection &connection)
Definition WtNode.cpp:605
bool _resizing
Definition WtNode.h:246
void setReaction(ReactToConnectionState reaction, PortType reactingPortType=PortType::None, NodeDataType reactingDataType=NodeDataType())
Definition WtNode.cpp:639
void setResizing(bool resizing)
Definition WtNode.cpp:656
NodeDataType reactingDataType() const
Definition WtNode.cpp:634
bool resizing() const
Definition WtNode.cpp:661