PeriDyno 1.2.1
Loading...
Searching...
No Matches
WtFlowScene.h
Go to the documentation of this file.
1#pragma once
2
3#include <Wt/WPaintDevice.h>
4#include <Wt/WPaintedWidget.h>
5#include <Wt/WPainter.h>
6#include "guid.hpp"
7
8#include "Export.hpp"
9#include "WtNode.h"
10#include "WtDataModelRegistry.h"
12#include "WtConnection.h"
13#include <memory>
14#include <Object.h>
15
16class WtNodeDataModel;
17class WtNode;
18class WtConnection;
21class WtNodeStyle;
22
24{
25public:
26
28
29 WtFlowScene(std::shared_ptr<WtDataModelRegistry> registry);
30
32
33public:
34
35 std::shared_ptr<WtConnection> createConnection(PortType connectedPort,
36 WtNode& node,
37 PortIndex portIndex,
38 Wt::WPainter* painter);
39
40 std::shared_ptr<WtConnection> createConnection(WtNode& nodeIn,
41 PortIndex portIndexIn,
42 WtNode& nodeOut,
43 PortIndex portIndexOut,
44 Wt::WPainter* painter,
45 TypeConverter const& converter = TypeConverter{});
46
47 //std::shared_ptr<WtConnection> restoreConnection(QJsonObject const& connectionJson);
48
49 void deleteConnection(WtConnection& connection);
50
51 WtNode& createNode(std::unique_ptr<WtNodeDataModel>&& dataModel, Wt::WPainter* painter, int selectType);
52
53 //QtNode& restoreNode(QJsonObject const& nodeJson);
54
56
57 void setRegistry(std::shared_ptr<WtDataModelRegistry> registry);
58
59 void iterateOverNodes(std::function<void(WtNode*)> const& visitor);
60
61 void iterateOverNodeData(std::function<void(WtNodeDataModel*)> const& visitor);
62
63 void iterateOverNodeDataDependentOrder(std::function<void(WtNodeDataModel*)> const& visitor);
64
65 Wt::WPointF getNodePosition(WtNode const& node) const;
66
67 void setNodePosition(WtNode& node, Wt::WPointF const& pos) const;
68
69 //QSizeF getNodeSize(WtNode const& node) const;
70
71 void removeNode(WtNode& node);
72
73 void clearNode(WtNode& node);
74
75 std::map<dyno::ObjectId, WtNode*> getNodeMap();
76
77public:
78
79 std::unordered_map<Wt::Guid, std::unique_ptr<WtNode> > const& nodes() const;
80
81 std::unordered_map<Wt::Guid, std::shared_ptr<WtConnection> > const& connections() const;
82
83 std::vector<WtNode*> allNodes() const;
84
85 std::vector<WtNode*> selectedNodes() const;
86
87public:
88
89 void clearScene();
90
91 void save() const;
92
93 void load();
94
95 //QByteArray saveToMemory() const;
96
97 //void loadFromMemory(const QByteArray& data);
98
99public:
100 std::map<dyno::ObjectId, WtNode*> OutNodeMap;
101
102private:
103
104 using SharedConnection = std::shared_ptr<WtConnection>;
105 using UniqueNode = std::unique_ptr<WtNode>;
106
107 // DO NOT reorder this member to go after the others.
108 // This should outlive all the connections and nodes of
109 // the graph, so that nodes can potentially have pointers into it,
110 // which is why it comes first in the class.
111 std::shared_ptr<WtDataModelRegistry> _registry;
112
113 std::unordered_map<Wt::Guid, SharedConnection> _connections;
114 std::unordered_map<Wt::Guid, UniqueNode> _nodes;
115
116
117};
std::function< SharedNodeData(SharedNodeData)> TypeConverter
int PortIndex
PortType
Graphic Object for connection. Adds itself to scene.
void iterateOverNodes(std::function< void(WtNode *)> const &visitor)
void iterateOverNodeDataDependentOrder(std::function< void(WtNodeDataModel *)> const &visitor)
std::vector< WtNode * > selectedNodes() const
void setRegistry(std::shared_ptr< WtDataModelRegistry > registry)
std::map< dyno::ObjectId, WtNode * > getNodeMap()
std::shared_ptr< WtConnection > SharedConnection
std::vector< WtNode * > allNodes() const
void setNodePosition(WtNode &node, Wt::WPointF const &pos) const
std::unique_ptr< WtNode > UniqueNode
WtNode & createNode(std::unique_ptr< WtNodeDataModel > &&dataModel, Wt::WPainter *painter, int selectType)
void deleteConnection(WtConnection &connection)
std::shared_ptr< WtDataModelRegistry > _registry
void iterateOverNodeData(std::function< void(WtNodeDataModel *)> const &visitor)
std::map< dyno::ObjectId, WtNode * > OutNodeMap
void clearNode(WtNode &node)
std::shared_ptr< WtConnection > createConnection(PortType connectedPort, WtNode &node, PortIndex portIndex, Wt::WPainter *painter)
std::unordered_map< Wt::Guid, std::unique_ptr< WtNode > > const & nodes() const
Wt::WPointF getNodePosition(WtNode const &node) const
void clearScene()
void removeNode(WtNode &node)
WtDataModelRegistry & registry() const
std::unordered_map< Wt::Guid, SharedConnection > _connections
std::unordered_map< Wt::Guid, std::shared_ptr< WtConnection > > const & connections() const
std::unordered_map< Wt::Guid, UniqueNode > _nodes
void save() const