1 | // Copyright (C) 2022 The Qt Company Ltd. |
2 | // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only |
3 | |
4 | #ifndef NODEVIEW_H |
5 | #define NODEVIEW_H |
6 | |
7 | #include <QtQuick/qquickitem.h> |
8 | #include <QList> |
9 | #include "nodesmodel.h" |
10 | #include "arrowsmodel.h" |
11 | |
12 | class EffectManager; |
13 | |
14 | class NodeView : public QQuickItem |
15 | { |
16 | Q_OBJECT |
17 | Q_PROPERTY(NodesModel *nodesModel READ nodesModel NOTIFY nodesModelChanged) |
18 | Q_PROPERTY(ArrowsModel *arrowsModel READ arrowsModel NOTIFY arrowsModelChanged) |
19 | Q_PROPERTY(QPointF activeArrowStartPoint READ activeArrowStartPoint NOTIFY activeArrowStartPointChanged) |
20 | Q_PROPERTY(QPointF activeArrowEndPoint READ activeArrowEndPoint NOTIFY activeArrowEndPointChanged) |
21 | Q_PROPERTY(bool activeArrowEnabled READ activeArrowEnabled NOTIFY activeArrowEnabledChanged) |
22 | Q_PROPERTY(bool nodeGraphComplete READ nodeGraphComplete NOTIFY nodeGraphCompleteChanged) |
23 | Q_PROPERTY(bool effectNodeSelected READ effectNodeSelected NOTIFY effectNodeSelectedChanged) |
24 | Q_PROPERTY(bool mainNodeSelected READ mainNodeSelected NOTIFY mainNodeSelectedChanged) |
25 | Q_PROPERTY(int selectedNodeId READ selectedNodeId NOTIFY selectedNodeIdChanged) |
26 | Q_PROPERTY(QString selectedNodeName READ selectedNodeName WRITE setSelectedNodeName NOTIFY selectedNodeNameChanged) |
27 | Q_PROPERTY(QString selectedNodeDescription READ selectedNodeDescription WRITE setSelectedNodeDescription NOTIFY selectedNodeDescriptionChanged) |
28 | Q_PROPERTY(QString selectedNodeFragmentCode READ selectedNodeFragmentCode WRITE setSelectedNodeFragmentCode NOTIFY selectedNodeFragmentCodeChanged) |
29 | Q_PROPERTY(QString selectedNodeVertexCode READ selectedNodeVertexCode WRITE setSelectedNodeVertexCode NOTIFY selectedNodeVertexCodeChanged) |
30 | Q_PROPERTY(QString selectedNodeQmlCode READ selectedNodeQmlCode WRITE setSelectedNodeQmlCode NOTIFY selectedNodeQmlCodeChanged) |
31 | Q_PROPERTY(QStringList codeSelectorModel READ codeSelectorModel NOTIFY codeSelectorModelChanged) |
32 | Q_PROPERTY(int codeSelectorIndex READ codeSelectorIndex NOTIFY codeSelectorIndexChanged) |
33 | QML_NAMED_ELEMENT(NodeViewItem) |
34 | public: |
35 | explicit NodeView(QQuickItem *parent = nullptr); |
36 | |
37 | NodesModel *nodesModel() const; |
38 | ArrowsModel *arrowsModel() const; |
39 | |
40 | QPointF activeArrowStartPoint() const; |
41 | |
42 | QPointF activeArrowEndPoint() const; |
43 | |
44 | bool activeArrowEnabled() const; |
45 | |
46 | QString selectedNodeName() const; |
47 | void setSelectedNodeName(const QString &name); |
48 | QString selectedNodeDescription() const; |
49 | void setSelectedNodeDescription(const QString &description); |
50 | QString selectedNodeFragmentCode() const; |
51 | void setSelectedNodeFragmentCode(const QString &newSelectedNodeFragmentCode); |
52 | QString selectedNodeVertexCode() const; |
53 | void setSelectedNodeVertexCode(const QString &newSelectedNodeVertexCode); |
54 | QString selectedNodeQmlCode() const; |
55 | void setSelectedNodeQmlCode(const QString &newSelectedNodeQmlCode); |
56 | |
57 | bool nodeGraphComplete() const; |
58 | bool effectNodeSelected() const; |
59 | bool mainNodeSelected() const; |
60 | int selectedNodeId() const; |
61 | QStringList codeSelectorModel() const; |
62 | int codeSelectorIndex() const; |
63 | |
64 | void setSelectedNode(NodesModel::Node *selectedNode); |
65 | void updateCodeSelectorModel(); |
66 | |
67 | public Q_SLOTS: |
68 | void updateActiveNodesList(); |
69 | void deleteSelectedNodes(); |
70 | void layoutNodes(bool distribute); |
71 | void selectSingleNode(int nodeId); |
72 | void selectMainNode(); |
73 | int getNodeIdWithName(const QString &name); |
74 | void toggleNodeDisabled(); |
75 | |
76 | signals: |
77 | void nodesModelChanged(); |
78 | void arrowsModelChanged(); |
79 | |
80 | void activeArrowStartPointChanged(); |
81 | |
82 | void activeArrowEndPointChanged(); |
83 | |
84 | void activeArrowEnabledChanged(); |
85 | void activeNodesListChanged(); |
86 | |
87 | void selectedNodeNameChanged(); |
88 | void selectedNodeDescriptionChanged(); |
89 | void selectedNodeFragmentCodeChanged(); |
90 | void selectedNodeVertexCodeChanged(); |
91 | void selectedNodeQmlCodeChanged(); |
92 | |
93 | void nodeGraphCompleteChanged(); |
94 | void effectNodeSelectedChanged(); |
95 | void mainNodeSelectedChanged(); |
96 | void selectedNodeIdChanged(); |
97 | |
98 | void codeSelectorModelChanged(); |
99 | void codeSelectorIndexChanged(); |
100 | |
101 | // Other than changed singnals |
102 | void doubleClickNode(); |
103 | void openDeleteNodeDialog(); |
104 | void (); |
105 | |
106 | |
107 | protected: |
108 | void mouseMoveEvent(QMouseEvent *event) override; |
109 | void mousePressEvent(QMouseEvent *event) override; |
110 | void mouseReleaseEvent(QMouseEvent *event) override; |
111 | void mouseDoubleClickEvent(QMouseEvent *event) override; |
112 | void hoverMoveEvent(QHoverEvent *event) override; |
113 | void keyPressEvent(QKeyEvent *event) override; |
114 | void keyReleaseEvent(QKeyEvent *event) override; |
115 | |
116 | private: |
117 | friend class EffectManager; |
118 | |
119 | void updateArrowsPositions(); |
120 | void updateCodeSelectorIndex(); |
121 | int getUniqueNodeId(); |
122 | void initializeNode(NodesModel::Node &node); |
123 | void initializeNodeSize(NodesModel::Node &node); |
124 | QString getUniqueNodeName(const QString &origName, int counter = 0); |
125 | |
126 | bool m_mousePressed = false; |
127 | NodesModel *m_nodesModel = nullptr; |
128 | ArrowsModel *m_arrowsModel = nullptr; |
129 | QPointF m_pressPosition; |
130 | QPointF m_activeArrowStartPoint; |
131 | QPointF m_activeArrowEndPoint; |
132 | bool m_activeArrowEnabled; |
133 | ArrowsModel::Arrow m_activeArrow; |
134 | bool m_nodeGraphComplete = false; |
135 | bool m_effectNodeSelected = false; |
136 | bool m_mainNodeSelected = false; |
137 | int m_selectedNodeId = -1; |
138 | bool m_initialized = false; |
139 | EffectManager *m_effectManager = nullptr; |
140 | QList<NodesModel::Node *> m_activeNodesList; |
141 | // Ids of nodes currently connected and not disabled |
142 | QList<int> m_activeNodesIds; |
143 | QStringList m_codeSelectorModel; |
144 | int m_codeSelectorIndex = 0; |
145 | }; |
146 | |
147 | #endif // NODEVIEW_H |
148 | |