PeriDyno 1.2.1
Loading...
Searching...
No Matches
WtFlowWidget.h
Go to the documentation of this file.
1#pragma once
2
3#include <Wt/WEvent.h>
4#include <Wt/WPaintedWidget.h>
5#include <Wt/WPointF.h>
6#include <Wt/WPainterPath.h>
7#include <Wt/WPainter.h>
8
9#include <SceneGraph.h>
10
11#include "WtFlowNodeData.h"
12
13enum PortState { in, out };
14
16 std::shared_ptr<Node> exportNode;
17 std::shared_ptr<Node> inportNode;
20};
21
22class WtFlowWidget : public Wt::WPaintedWidget
23{
24public:
25 WtFlowWidget(std::shared_ptr<dyno::SceneGraph> scene);
26 virtual ~WtFlowWidget() = default;
27
28 virtual void onMouseMove(const Wt::WMouseEvent& event) = 0;
29 virtual void onMouseWentDown(const Wt::WMouseEvent& event) = 0;
30 virtual void onMouseWentUp(const Wt::WMouseEvent& event) = 0;
31 virtual void onKeyWentDown() = 0;
32
33 void onMouseWheel(const Wt::WMouseEvent& event);
34 void zoomIn();
35 void zoomOut();
36
37 void reorderNode();
38 void updateAll();
39
40 bool checkMouseInRect(Wt::WPointF mousePoint, WtFlowNodeData nodeData);
41
42 bool checkMouseInPoints(Wt::WPointF mousePoint, WtFlowNodeData nodeData, PortState portState);
43
44 Wt::WPainterPath cubicPath(Wt::WPointF source, Wt::WPointF sink);
45 std::pair<Wt::WPointF, Wt::WPointF> pointsC1C2(Wt::WPointF source, Wt::WPointF sink);
46 void drawSketchLine(Wt::WPainter* painter, Wt::WPointF source, Wt::WPointF sink);
47
48 Wt::Signal<int>& selectNodeSignal() { return _selectNodeSignal; };
49
50 Wt::Signal<>& updateCanvas() { return _updateCanvas; }
51
52
53protected:
55 Wt::WPointF mLastMousePos;
56 Wt::WPointF mLastDelta;
57
58 bool isDragging = false;
59 bool canMoveNode = false;
60 bool reorderFlag = true;
61 bool mEditingEnabled = true;
62 bool drawLineFlag = false;
63
64 Wt::WPointF mTranslate = Wt::WPointF(0, 0);
65 Wt::WPointF mTranslateNode = Wt::WPointF(0, 0);
66 Wt::WPointF mMousePoint = Wt::WPointF(0, 0);
67
68 std::shared_ptr<dyno::SceneGraph> mScene;
69
70 Wt::Signal<int> _selectNodeSignal;
71 Wt::Signal<> _updateCanvas;
72
73 int selectType = -1;
74 int selectedNum = 0;
75
76 Wt::WPointF sourcePoint;
77 Wt::WPointF sinkPoint;
78
81};
PortState
@ in
@ out
Wt::Signal< int > & selectNodeSignal()
connectionPointData outPoint
void onMouseWheel(const Wt::WMouseEvent &event)
virtual ~WtFlowWidget()=default
Wt::Signal _updateCanvas
virtual void onMouseWentDown(const Wt::WMouseEvent &event)=0
WtFlowWidget(std::shared_ptr< dyno::SceneGraph > scene)
virtual void onMouseWentUp(const Wt::WMouseEvent &event)=0
Wt::WPointF mTranslateNode
Wt::WPainterPath cubicPath(Wt::WPointF source, Wt::WPointF sink)
Wt::WPointF sourcePoint
Wt::WPointF mLastDelta
std::shared_ptr< dyno::SceneGraph > mScene
bool mEditingEnabled
connectionPointData inPoint
bool checkMouseInRect(Wt::WPointF mousePoint, WtFlowNodeData nodeData)
std::pair< Wt::WPointF, Wt::WPointF > pointsC1C2(Wt::WPointF source, Wt::WPointF sink)
Wt::WPointF sinkPoint
void drawSketchLine(Wt::WPainter *painter, Wt::WPointF source, Wt::WPointF sink)
Wt::Signal< int > _selectNodeSignal
Wt::WPointF mLastMousePos
Wt::Signal & updateCanvas()
Wt::WPointF mMousePoint
double mZoomFactor
virtual void onMouseMove(const Wt::WMouseEvent &event)=0
Wt::WPointF mTranslate
bool checkMouseInPoints(Wt::WPointF mousePoint, WtFlowNodeData nodeData, PortState portState)
virtual void onKeyWentDown()=0
std::shared_ptr< Node > inportNode
std::shared_ptr< Node > exportNode
connectionPointData inPoint
connectionPointData outPoint