DAWorkbench 0.0.1
DAWorkbench API
载入中...
搜索中...
未找到
DAWorkFlow.h
1#ifndef DAWORKFLOW_H
2#define DAWORKFLOW_H
3#include <QtCore/qglobal.h>
4#include <memory>
5#include <QObject>
6#include <QVersionNumber>
7#include "DAWorkFlowAPI.h"
8#include "DAAbstractNode.h"
9class QDomDocument;
10class QDomElement;
11
12namespace DA
13{
14class DAWorkFlowExecuter;
15class DAAbstractNodeFactory;
16class DANodeGraphicsScene;
20class DAWORKFLOW_API DAWorkFlow : public QObject
21{
22 Q_OBJECT
23 DA_DECLARE_PRIVATE(DAWorkFlow)
24 friend class DAAbstractNode;
25 friend class DANodeGraphicsScene;
26
27public:
28 using CallbackPrepareStartExecute = std::function< bool(DAWorkFlowExecuter*) >;
29 using CallbackPrepareEndExecute = std::function< bool(DAWorkFlowExecuter*) >;
30
31public:
32 DAWorkFlow(QObject* p = nullptr);
33 virtual ~DAWorkFlow();
34 // 工厂相关
35 void registFactory(std::shared_ptr< DAAbstractNodeFactory > factory);
36 void registFactorys(const QList< std::shared_ptr< DAAbstractNodeFactory > > factorys);
37 // 删除工厂,此函数一般在插件卸载时调用
38 void removeFactory(std::shared_ptr< DAAbstractNodeFactory > fac);
39 // 获取所有的工厂
40 QList< std::shared_ptr< DAAbstractNodeFactory > > getAllFactorys() const;
41 // 获取使用到的工厂
42 QList< std::shared_ptr< DAAbstractNodeFactory > > usedFactorys() const;
43 // 获取工程的数量
44 int getFactoryCount() const;
45 // 通过工厂名字获取工厂
46 std::shared_ptr< DAAbstractNodeFactory > getFactory(const QString& factoryPrototypes);
47 // 通过protoType获取DANodeMetaData
48 DANodeMetaData getNodeMetaData(const QString& protoType) const;
49 // 创建节点,会触发信号nodeCreated,FCWorkFlow保留节点的内存管理权
50 DAAbstractNode::SharedPointer createNode(const DANodeMetaData& md);
51 // 添加节点
52 void addNode(DAAbstractNode::SharedPointer n);
53 // 获取节点列表
54 QList< DAAbstractNode::SharedPointer > nodes() const;
55 // 清空节点
56 void clear();
57 // 删除节点
58 void removeNode(const DAAbstractNode::SharedPointer& n);
59 // 是否在workflow存在id
60 bool hasNodeID(const DAAbstractNode::IdType id);
61 // 通过节点ID获取节点Item
62 DAAbstractNode::SharedPointer getNode(const DAAbstractNode::IdType id);
63 // 通过节点ID获取节点Item
64 DAAbstractNodeGraphicsItem* getNodeGraphicsItem(const DAAbstractNode::IdType id);
65 // 把扩展信息保存到xml上
66 virtual void saveExternInfoToXml(QDomDocument* doc, QDomElement* nodeElement, const QVersionNumber& ver) const;
67 // 从xml加载扩展信息
68 virtual void loadExternInfoFromXml(const QDomElement* nodeElement, const QVersionNumber& ver);
69 // 设置开始节点
70 void setStartNode(DAAbstractNode::SharedPointer p);
71 // 获取开始执行的节点
72 DAAbstractNode::SharedPointer getStartNode() const;
73 // 判断工作量是否再运行
74 bool isRunning() const;
75 // 工作流中节点的数量
76 int size() const;
77 // 判断是否为空
78 bool isEmpty() const;
79 // 获取最后发生的错误信息
80 QString getLastErrorString() const;
81 // 注册开始执行的回调
82 void registStartWorkflowCallback(CallbackPrepareStartExecute fn);
83 // 注册开始结束的回调
84 void registEndWorkflowCallback(CallbackPrepareEndExecute fn);
85 // 获取所有注册的开始回调
86 QList< CallbackPrepareStartExecute > getStartWorkflowCallback() const;
87 // 获取所有注册的结束回调
88 QList< CallbackPrepareEndExecute > getEndWorkflowCallback() const;
89 // 获取这个工作流加入的scene
90 DANodeGraphicsScene* getScene() const;
91 // 触发工作流完成信号
92 void callWorkflowReady();
93 // 禁止所有工厂回调,这个一般用于文件加载过程,避免回调过多
94 // 主要影响以下回调函数nodeAddedToWorkflow,nodeStartRemove,nodeLinkSucceed,nodeLinkDetached
95 void disableFactoryCallBack();
96 void enableFactoryCallBack();
97 bool isEnableFactoryCallBack() const;
98public slots:
99 // 运行工作流
100 void exec();
101 // 终止
102 void terminate();
103
104protected:
105 // 主动触发nodeNameChanged信号
106 void emitNodeNameChanged(DAAbstractNode::SharedPointer node, const QString& oldName, const QString& newName);
107 // 节点id变更通知
108 void nodeIDChanged(const DAAbstractNode::SharedPointer& node, const DAAbstractNode::IdType& oldId);
109signals:
110
115 void nodeAdded(DAAbstractNode::SharedPointer node);
120 void nodeStartRemove(DAAbstractNode::SharedPointer node);
125 void nodeRemoved(DAAbstractNode::SharedPointer n);
138 void nodeNameChanged(DAAbstractNode::SharedPointer node, const QString& oldName, const QString& newName);
143
148
157 void nodeExecuteFinished(DAAbstractNode::SharedPointer n, bool state);
158
163 void finished(bool success);
164private slots:
165
166 // 执行器执行结束
167 void onExecuteFinished(bool success);
168
169private:
170 // 记录工作流对应的scene
171 void recordScene(DANodeGraphicsScene* sc);
172};
173} // end of namespace DA
174#endif // FCWORKFLOW_H
这是节点的基类,workflow所有节点都继承此类 作为一个节点的QGraphicsItem,此item应该由DAAbstractNode创建
Definition DAAbstractNodeGraphicsItem.h:47
节点对应的基类
Definition DAAbstractNode.h:50
DAAbstractNodeGraphicsItem对应的QGraphicsScene,通过此scene,管理DAWorkFlow内容
Definition DANodeGraphicsScene.h:25
保存节点元数据 节点元数据由工厂进行管理
Definition DANodeMetaData.h:16
工作流任务的执行者,执者和workflow通过信号传递信息,在workflow中,执行者是在一个单独线程中
Definition DAWorkFlowExecuter.h:13
基本的工作流,这个也是总工厂,汇总了所有插件的工厂
Definition DAWorkFlow.h:21
void finished(bool success)
工作流执行完毕信号
void workflowCleared()
清空信号
void nodeStartRemove(DAAbstractNode::SharedPointer node)
节点在工作流中开始被删除
void nodeRemoved(DAAbstractNode::SharedPointer n)
节点移除完成信号 这时此信号携带的n是这个节点唯一的生命周期,如果接收此信号后还保留这个节点,这个节点将不销毁
void workflowReady()
工作流就绪信号,此信号在文件加载过程完成后触发
void nodeNameChanged(DAAbstractNode::SharedPointer node, const QString &oldName, const QString &newName)
节点名字变更
void nodeExecuteFinished(DAAbstractNode::SharedPointer n, bool state)
执行到某个节点发射的信号
void startExecute()
开始执行,exec函数调用后会触发此信号
void terminateExecute()
开始停止工作流
void nodeAdded(DAAbstractNode::SharedPointer node)
节点添加的信号
序列化类都是带异常的,使用中需要处理异常
Definition AppMainWindow.cpp:44