DAWorkbench 0.0.1
DAWorkbench API
载入中...
搜索中...
未找到
DAAbstractNode.h
1#ifndef DAABSTRACTNODE_H
2#define DAABSTRACTNODE_H
3#include <memory>
4#include <QMetaEnum>
5#include <QVersionNumber>
6#include "DAWorkFlowAPI.h"
7#include "DANodeMetaData.h"
8class QDomElement;
9class QDomDocument;
10
11namespace DA
12{
13
14class DAAbstractNodeGraphicsItem;
15class DAWorkFlow;
16class DAAbstractNodeFactory;
17class DAAbstractNodeLinkGraphicsItem;
49class DAWORKFLOW_API DAAbstractNode : public std::enable_shared_from_this< DAAbstractNode >
50{
51 DA_DECLARE_PRIVATE(DAAbstractNode)
53 friend class DAAbstractNodeGraphicsItem;
54 friend class DAAbstractNodeFactory;
55 friend class DAWorkFlow;
56
57public:
58 using SharedPointer = std::shared_ptr< DAAbstractNode >;
59 using WeakPointer = std::weak_ptr< DAAbstractNode >;
60 using IdType = uint64_t;
61
62public:
67 {
68 public:
69 LinkInfo();
70 QString key;
71 QList< QPair< QString, DAAbstractNode::SharedPointer > > nodes;
72 };
73
78 {
80 GlobalNode
81 };
82
83public:
85 virtual ~DAAbstractNode();
86
87 // 获取node的名字
88 QString getNodeName() const;
89 virtual void setNodeName(const QString& name);
90
91 // 获取node的类型,这个类型可以表征同一类型的node 这个不会进行翻译
92 QString getNodePrototype() const;
93 // 获取分组
94 QString getNodeGroup() const;
95
96 // 获取图标,图标是节点对应的图标
97 QIcon getIcon() const;
98 void setIcon(const QIcon& icon);
99
100 // 获取节点的元数据
101 const DANodeMetaData& metaData() const;
102 DANodeMetaData& metaData();
103
104 // 说明
105 QString getNodeTooltip() const;
106 void setNodeTooltip(const QString& tp);
107
108 // 设置元数据
109 void setMetaData(const DANodeMetaData& metadata);
110
111 // 返回自身智能指针
112 SharedPointer pointer();
113 // id操作
114 IdType getID() const;
115 void setID(const IdType& d);
116
117 // 属性操作,如果节点有一些额外属性,通过此函数保存才能存入文件系统中
118 bool hasProperty(const QString& k) const;
119 void setProperty(const QString& k, const QVariant& v);
120 QVariant getProperty(const QString& k, const QVariant& defaultVal = QVariant()) const;
121 bool removeProperty(const QString& k);
122 QList< QString > getPropertyKeys() const;
123 // 属性引用
124 const QHash< QString, QVariant >& propertys() const;
125 QHash< QString, QVariant >& propertys();
126 // 把扩展信息保存到xml上
127 virtual void saveExternInfoToXml(QDomDocument* doc, QDomElement* nodeElement, const QVersionNumber& ver) const;
128 // 从xml加载扩展信息
129 virtual void loadExternInfoFromXml(const QDomElement* nodeElement, const QVersionNumber& ver);
130 // 节点类型默认都为NormalNode
131 virtual NodeType nodeType() const;
132
133public: // 连接相关
134 // 获取所有输入的参数名
135 QList< QString > getInputKeys() const;
136 // 获取输入节点的数量
137 int getInputKeysConut() const;
138 // 获取所有已经链接上的输入节点
139 QList< QString > getLinkedInputKeys() const;
140 // 获取所有输出的参数名
141 QList< QString > getOutputKeys() const;
142 // 获取输出节点的数量
143 int getOutputKeysConut() const;
144 // 获取所有已经链接上的输出的参数名
145 QList< QString > getLinkedOutputKeys() const;
146 // 添加一个输入参数
147 void addInputKey(const QString& k);
148 // 添加一个输出参数
149 void addOutputKey(const QString& k);
150 // 建立连接,如果基础的对象需要校验,可继承此函数
151 virtual bool linkTo(const QString& outKey, SharedPointer inNode, const QString& inKey);
152 // 移除连接,节点对应的连接全部解除
153 bool detachLink(const QString& key);
154 // 移除连接,节点对应的连接全部解除
155 bool detachInputLinks(const QString& key);
156 // 移除连接,节点对应的连接全部解除
157 bool detachOutputLinks(const QString& key);
158 // 移除所有依赖,一般是节点被删除时会调用此函数
159 void detachAll();
160 // 获取所有连接了输入keys的节点
161 QList< SharedPointer > getInputNodes() const;
162 QList< SharedPointer > getInputNodes(const QString inputkey) const;
163 // 获取此节点输出到其他的节点
164 QList< SharedPointer > getOutputNodes() const;
165 QList< SharedPointer > getOutputNodes(const QString outputkey) const;
166 // 获取输入节点的数量
167 int getInputNodesCount() const;
168 // 获取输出节点的数量
169 int getOutputNodesCount() const;
170 // 数据操作
171 // 输入参数,in-degree 属性
172 void setInputData(const QString& key, const QVariant& dp);
173 // 设置输出的参数 out-degree 属性
174 void setOutputData(const QString& key, const QVariant& dp);
175 // 移除输入
176 void removeInputKey(const QString& key);
177 void removeAllInputKeys();
178 // 移除输出
179 void removeOutputKey(const QString& key);
180 void removeAllOutputKeys();
181 // 获取input的数据包,此函数返回的FCDataPackage是引用,不发生拷贝,修改将直接改变input所维护的FCDataPackage内容
182 QVariant getInputData(const QString& key) const;
183 // 输出参数
184 QVariant getOutputData(const QString& key) const;
185 // 获取输入的链接信息
186 QList< LinkInfo > getAllInputLinkInfo() const;
187 // 获取输出的链接信息
188 QList< LinkInfo > getAllOutputLinkInfo() const;
189 // 生成一个uint64_t的唯一id
190 static IdType generateID();
191 // 获取工作流,有可能返回nullptr
192 DAWorkFlow* workflow() const;
193 // 获取工厂
194 std::shared_ptr< DAAbstractNodeFactory > factory() const;
195
201 template< typename T >
202 std::shared_ptr< T > castTo()
203 {
204 return std::dynamic_pointer_cast< T >(pointer());
205 }
206
207public:
208 // 执行
209 virtual bool exec() = 0;
210
211public:
212 // 节点对应的item显示接口,所有node都需要提供一个供前端的显示接口
213 virtual DAAbstractNodeGraphicsItem* createGraphicsItem() = 0;
214
215 // 获取item
216 DAAbstractNodeGraphicsItem* graphicsItem() const;
217
218protected:
219 // 记录item,此函数在DAAbstractNodeGraphicsItem构造函数中调用
220 void registItem(DAAbstractNodeGraphicsItem* it);
221 // 解除对item的记录
222 void unregistItem();
223 // linkTo的实现
224 bool linkTo_(const QString& outKey, SharedPointer inNode, const QString& inKey);
225
226protected:
227 // 注册工作流
228 void registFactory(const std::shared_ptr< DAAbstractNodeFactory >& fc);
229};
230#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
231DAWORKFLOW_API uint qHash(const std::shared_ptr< DAAbstractNode >& ptr, uint seed = 0) noexcept;
232#else
233DAWORKFLOW_API std::size_t qHash(const std::shared_ptr< DAAbstractNode >& ptr, std::size_t seed = 0) noexcept;
234#endif
235} // end DA
236// 为std::shared_ptr<DA::DAAbstractNode>定义qHash
237
238Q_DECLARE_METATYPE(std::shared_ptr< DA::DAAbstractNode >)
239#endif // DAABSTRACTNODE_H
FCAbstractNode的工厂基类,所有自定义的node集合最后都需要提供一个工厂
Definition DAAbstractNodeFactory.h:23
这是节点的基类,workflow所有节点都继承此类 作为一个节点的QGraphicsItem,此item应该由DAAbstractNode创建
Definition DAAbstractNodeGraphicsItem.h:47
绘制连接线的item
Definition DAAbstractNodeLinkGraphicsItem.h:20
链接信息
Definition DAAbstractNode.h:67
QString key
针对本节点的链接key
Definition DAAbstractNode.h:70
QList< QPair< QString, DAAbstractNode::SharedPointer > > nodes
链接的对象节点,内容为pair,first为对象的key,second为对象节点指针
Definition DAAbstractNode.h:71
节点对应的基类
Definition DAAbstractNode.h:50
std::shared_ptr< T > castTo()
转换为其他具体类型节点
Definition DAAbstractNode.h:202
NodeType
节点类型
Definition DAAbstractNode.h:78
@ NormalNode
普通节点,默认为普通节点
Definition DAAbstractNode.h:79
保存节点元数据 节点元数据由工厂进行管理
Definition DANodeMetaData.h:16
基本的工作流,这个也是总工厂,汇总了所有插件的工厂
Definition DAWorkFlow.h:21
序列化类都是带异常的,使用中需要处理异常
Definition AppMainWindow.cpp:44