1// Copyright (C) 2022 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#ifndef NODESMODEL_H
5#define NODESMODEL_H
6
7#include <QObject>
8#include <QAbstractListModel>
9#include <QtQml/qqmlregistration.h>
10#include "uniformmodel.h"
11
12class NodesModel : public QAbstractListModel
13{
14 Q_OBJECT
15 Q_PROPERTY(int rowCount READ rowCount NOTIFY rowCountChanged)
16
17public:
18 enum NodeType {
19 SourceNode = 0,
20 DestinationNode,
21 CustomNode
22 };
23 struct Node {
24 int type = CustomNode;
25 // Id of the model, must be unique!
26 int nodeId = -1;
27 float x = 0;
28 float y = 0;
29 float width = 0;
30 float height = 0;
31 QString name;
32 bool selected = false;
33 bool disabled = false;
34 // These are helper positions when moving starts
35 float startX = 0;
36 float startY = 0;
37 // This points to next connected node. -1 when not connected.
38 int nextNodeId = -1;
39
40 // Unforms from the node JSON
41 // Note: These are not updated when the uniforms/properties change,
42 // so don't use this to other things than checking JSON uniforms.
43 QList<UniformModel::Uniform> jsonUniforms = {};
44 QString fragmentCode = {};
45 QString vertexCode = {};
46 QString qmlCode = {};
47 QString description = {};
48 bool operator==(const Node& rhs) const noexcept
49 {
50 return this->nodeId == rhs.nodeId;
51 }
52 bool operator!=(const Node& rhs) const noexcept
53 {
54 return !operator==(rhs);
55 }
56 };
57
58 enum NodesModelRoles {
59 Type = Qt::UserRole + 1,
60 Name,
61 X,
62 Y,
63 Width,
64 Height,
65 Selected,
66 NodeId,
67 Description,
68 Disabled
69 };
70
71 explicit NodesModel(QObject *parent = nullptr);
72
73 // Override from QAbstractItemModel
74 int rowCount(const QModelIndex & = QModelIndex()) const final;
75 QVariant data(const QModelIndex &index, int role) const final;
76 bool setData(const QModelIndex &index, const QVariant &value, int role) final;
77 QHash<int, QByteArray> roleNames() const final;
78
79 Node *getNodeWithId(int id);
80 void setSelectedNode(Node *node);
81
82signals:
83 void selectedNodeChanged();
84 void rowCountChanged();
85
86private:
87 friend class NodeView;
88 friend class EffectManager;
89
90 QList<Node> m_nodesList;
91 Node m_emptyNode;
92 Node *m_selectedNode = nullptr;
93};
94
95#endif // NODESMODEL_H
96

source code of qtquickeffectmaker/tools/qqem/nodesmodel.h