File: NodeDataModel.hpp

package info (click to toggle)
qnodeeditor 2.1.7-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 2,144 kB
  • sloc: cpp: 8,823; makefile: 3
file content (126 lines) | stat: -rw-r--r-- 3,679 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#pragma once
#include "Export.hpp"
#include "NodeData.hpp"
#include "NodeGeometry.hpp"
#include "NodePainterDelegate.hpp"
#include "NodeStyle.hpp"
#include "PortType.hpp"
#include "Serializable.hpp"
#include "memory.hpp"

#include <QtWidgets/QWidget>
namespace QtNodes
{
    enum class NodeValidationState
    {
        Valid,
        Warning,
        Error
    };
    class Connection;
    class StyleCollection;
    class NODE_EDITOR_PUBLIC NodeDataModel
        : public QObject
        , public Serializable
    {
        Q_OBJECT
      public:
        NodeDataModel();
        virtual ~NodeDataModel() = default;
        /// Caption is used in GUI
        virtual QString caption() const = 0;
        /// It is possible to hide caption in GUI
        virtual bool captionVisible() const
        {
            return true;
        }
        /// Port caption is used in GUI to label individual ports
        virtual QString portCaption(PortType, PortIndex) const
        {
            return QString();
        }
        /// It is possible to hide port caption in GUI
        virtual bool portCaptionVisible(PortType, PortIndex) const
        {
            return false;
        }
        /// Name makes this model unique
        virtual QString name() const = 0;

      public:
        QJsonObject save() const override;

      public:
        virtual unsigned int nPorts(PortType portType) const = 0;
        virtual std::unique_ptr<NodeDataModel> clone() const = 0;
        virtual std::shared_ptr<NodeDataType> dataType(PortType portType, PortIndex portIndex) const = 0;

      public:
        enum class ConnectionPolicy
        {
            One,
            Many
        };
        ConnectionPolicy portConnectionPolicy(PortType portType, PortIndex portIndex) const;
        virtual ConnectionPolicy portOutConnectionPolicy(PortIndex) const
        {
            return ConnectionPolicy::Many;
        }
        virtual ConnectionPolicy portInConnectionPolicy(PortIndex) const
        {
            return ConnectionPolicy::One;
        }
        NodeStyle const &nodeStyle() const;
        void setNodeStyle(NodeStyle const &style);

      public:
        /// Triggers the algorithm
        virtual void setInData(std::shared_ptr<NodeData> nodeData, PortIndex port) = 0;
        virtual void setInData(std::vector<std::shared_ptr<NodeData>> nodeData, PortIndex port);
        virtual std::shared_ptr<NodeData> outData(PortIndex port) = 0;
        virtual QWidget *embeddedWidget() = 0;
        virtual bool resizable() const
        {
            return false;
        }
        virtual NodeValidationState validationState() const
        {
            return NodeValidationState::Valid;
        }
        virtual QString validationMessage() const
        {
            return QString("");
        }
        virtual NodePainterDelegate *painterDelegate() const
        {
            return nullptr;
        }
        bool wembed() const;
        void setWembed(bool wembed);
      public Q_SLOTS:
        virtual void inputConnectionCreated(Connection const &)
        {
        }
        virtual void inputConnectionDeleted(Connection const &)
        {
        }
        virtual void outputConnectionCreated(Connection const &)
        {
        }
        virtual void outputConnectionDeleted(Connection const &)
        {
        }
      Q_SIGNALS:
        void dataUpdated(PortIndex index);
        void dataInvalidated(PortIndex index);
        void computingStarted();
        void computingFinished();
        void embeddedWidgetSizeUpdated();

      protected:
        bool m_wembed;

      private:
        NodeStyle _nodeStyle;
    };
} // namespace QtNodes