Loading [MathJax]/extensions/TeX/AMSmath.js
Radium Engine  1.5.28
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
GraphModel.hpp
1#pragma once
2#include <Dataflow/RaDataflow.hpp>
3
4// include first for qt/gl include order
5#include <Gui/RaGui.hpp>
6
7#include <Dataflow/Core/DataflowGraph.hpp>
8#include <Dataflow/Core/Node.hpp>
9
10#include <QWidget>
11
12#include <QtNodes/ConnectionStyle>
13#include <QtNodes/DataFlowGraphModel>
14#include <QtNodes/DataFlowGraphicsScene>
15#include <QtNodes/GraphicsView>
16#include <QtNodes/NodeData>
17#include <QtNodes/NodeDelegateModelRegistry>
18
19namespace Ra {
20namespace Dataflow {
21namespace Core {
22class DataflowGraph;
23class NodeFactorySet;
24} // namespace Core
25
26namespace QtGui {
27namespace GraphEditor {
28
32class RA_DATAFLOW_GUI_API GraphModel : public QtNodes::AbstractGraphModel
33{
34 using ConnectionId = QtNodes::ConnectionId;
35 using ConnectionPolicy = QtNodes::ConnectionPolicy;
36 using NodeFlag = QtNodes::NodeFlag;
37 using NodeId = QtNodes::NodeId;
38 using NodeRole = QtNodes::NodeRole;
39 using PortIndex = QtNodes::PortIndex;
40 using PortRole = QtNodes::PortRole;
41 using PortType = QtNodes::PortType;
42 using StyleCollection = QtNodes::StyleCollection;
43
44 Q_OBJECT
45 public:
46 struct NodeGeometryData {
47 QSize size;
48 QPointF pos;
49 };
50
51 public:
53
54 ~GraphModel() override;
55
56 std::unordered_set<NodeId> allNodeIds() const override;
57
58 std::unordered_set<ConnectionId> allConnectionIds( NodeId const nodeId ) const override;
59
61 connections( NodeId nodeId, PortType portType, PortIndex portIndex ) const override;
62
63 bool connectionExists( ConnectionId const connectionId ) const override;
64
65 void addInputOutputNodesForGraph();
66 NodeId addNode( QString const nodeType = QString() ) override;
67
72 bool connectionPossible( ConnectionId const connectionId ) const override;
73
74 void addConnection( ConnectionId const connectionId ) override;
75
76 bool nodeExists( NodeId const nodeId ) const override;
77
78 QWidget* getWidget( std::shared_ptr<Core::Node> node ) const;
79 QVariant nodeData( NodeId nodeId, NodeRole role ) const override;
80
81 bool setNodeData( NodeId nodeId, NodeRole role, QVariant value ) override;
82
83 QVariant
84 portData( NodeId nodeId, PortType portType, PortIndex portIndex, PortRole role ) const override;
85
86 bool setPortData( NodeId nodeId,
87 PortType portType,
88 PortIndex portIndex,
89 QVariant const& value,
90 PortRole role = PortRole::Data ) override;
91
92 bool deleteConnection( ConnectionId const connectionId ) override;
93
94 bool deleteNode( NodeId const nodeId ) override;
95
96 NodeId newNodeId() override { return m_next_node_id++; }
98 void loadNode( QJsonObject const& nodeJson ) override;
99 QJsonObject saveNode( NodeId const ) const override;
100
101 void setGraph( std::shared_ptr<Core::DataflowGraph> graph );
102 void sync_data();
103 void clear_node_widget( Core::Node* node );
104
105 auto node_ptr( NodeId node_id ) -> std::shared_ptr<Core::Node> {
106 return m_node_id_to_ptr.at( node_id );
107 }
108
109 signals:
110 void node_edited( std::shared_ptr<Core::Node> node );
111
112 private:
116
120
121 mutable std::unordered_map<NodeId, NodeGeometryData> m_node_geometry_data;
122 mutable std::unordered_map<NodeId, QWidget*> m_node_widget;
123
125 NodeId m_next_node_id;
126
127 void fill_factory_map();
129};
130} // namespace GraphEditor
131} // namespace QtGui
132} // namespace Dataflow
133} // namespace Ra
Base abstract class for all the nodes added and used by the node system.
Definition Node.hpp:40
hepler function to manage enum as underlying types in VariableSet
Definition Cage.cpp:4