DAWorkbench 0.0.1
DAWorkbench API
载入中...
搜索中...
未找到
DACommandsForWorkFlowNodeGraphics.h
1#ifndef DACOMMANDSFORWORKFLOWNODEGRAPHICS_H
2#define DACOMMANDSFORWORKFLOWNODEGRAPHICS_H
3#include "DAWorkFlowAPI.h"
4// qt
5#include <QUndoCommand>
6#include <QPen>
7#include <QBrush>
8#include <QPointer>
9// workflow
10#include "DANodeMetaData.h"
11#include "DANodeLinkPoint.h"
12#include "DAAbstractNode.h"
13
14namespace DA
15{
16class DAWorkFlow;
17class DAAbstractNodeLinkGraphicsItem;
18class DAGraphicsPixmapItem;
19class DANodeGraphicsScene;
20class DAWorkFlowGraphicsScene;
21class DAAbstractNodeGraphicsItem;
22class DAGraphicsItem;
23class DAGraphicsStandardTextItem;
24
30class DAWORKFLOW_API DACommandsForWorkFlowCreateNode : public QUndoCommand
31{
32public:
35 const QPointF& pos,
36 bool addItemToScene = true,
37 QUndoCommand* parent = nullptr);
39 void redo();
40 void undo();
41 // 获取创建的item,此函数不能继承id进行压缩,因为推入stack后需要操作这个cmd指针
42 DAAbstractNodeGraphicsItem* item() const;
43 // 节点
44 DAAbstractNode::SharedPointer node() const;
45
46private:
47 DANodeGraphicsScene* mScene;
48 DANodeMetaData mMetadata;
49 QPointF mScenePos;
50 DAAbstractNode::SharedPointer mNode;
51 bool mAddItemToScene { true };
52 DAAbstractNodeGraphicsItem* mItem { nullptr };
53 bool mNeedDelete;
54 bool mSkipFirstRedo { true };
55};
56
60class DAWORKFLOW_API DACommandsForWorkFlowRemoveNodes : public QUndoCommand
61{
62public:
64 const QList< DAAbstractNode::SharedPointer >& ns,
65 QUndoCommand* par = nullptr);
67 void redo();
68 void undo();
69
70private:
71 QPointer< DAWorkFlow > mWorkflow;
72 QList< DAAbstractNode::SharedPointer > mNodes;
73};
74
79class DAWORKFLOW_API DACommandsForWorkFlowAddNodeItem : public QUndoCommand
80{
81public:
84 QUndoCommand* parent = nullptr);
86 void redo();
87 void undo();
88
89private:
90 DANodeGraphicsScene* mScene;
92 DAAbstractNode::SharedPointer mNode;
93 bool mNeedDelete;
94};
95
102class DAWORKFLOW_API DACommandsForWorkFlowRemoveNodeItem : public QUndoCommand
103{
104public:
107 QUndoCommand* parent = nullptr);
109 void redo();
110 void undo();
111 // 获取选择的节点,此函数构造后即可调用
112 QList< DAAbstractNodeLinkGraphicsItem* > getRemovedNodeLinkItems() const;
113
114private:
115 DANodeGraphicsScene* mScene;
117 DAAbstractNode::SharedPointer mWillRemoveNode;
118 QList< DAAbstractNodeLinkGraphicsItem* > mWillRemoveLink;
119 bool mNeedDelete;
120};
121
126class DAWORKFLOW_API DACommandsForWorkFlowRemoveSelectNodes : public QUndoCommand
127{
128public:
129 DACommandsForWorkFlowRemoveSelectNodes(DANodeGraphicsScene* scene, QUndoCommand* parent = nullptr);
131 void redo();
132 void undo();
133 void classifyItems(DANodeGraphicsScene* scene,
134 QList< DAAbstractNodeGraphicsItem* >& nodeItems,
135 QList< DAAbstractNodeLinkGraphicsItem* >& linkItems,
136 QList< QGraphicsItem* >& normalItem);
137 // 获取节点的链接,只返回唯一值
138 static QList< DAAbstractNodeLinkGraphicsItem* > getNodesLinks(const QList< DAAbstractNodeGraphicsItem* >& nodeItems);
139 // 是否有效
140 bool isValid() const;
141 // 移除的数量
142 int removeCount() const;
143 // 获取选择的节点,此函数构造后即可调用
144 QList< DAAbstractNodeGraphicsItem* > getRemovedNodeItems() const;
145 QList< DAAbstractNodeLinkGraphicsItem* > getRemovedNodeLinkItems() const;
146 QList< QGraphicsItem* > getAllRemovedItems() const;
147
148private:
149 bool mIsvalid;
150 DANodeGraphicsScene* mScene;
151 QList< DAAbstractNodeGraphicsItem* > mSelectNodeItems;
152 QList< DAAbstractNodeLinkGraphicsItem* > mWillRemoveLink;
153 QList< QGraphicsItem* > mWillRemoveNormal;
154 QList< DAAbstractNode::SharedPointer > mWillRemoveNodes;
155 bool mNeedDelete;
156};
157
161class DAWORKFLOW_API DACommandsForWorkFlowCreateLink : public QUndoCommand
162{
163public:
164 // 这两个构造函数是在linkitem已经完成且确认连接后执行,在第一次redo时,不会进行操作,第二次才是真实操作
167 QUndoCommand* parent = nullptr);
169 void redo() override;
170 void undo() override;
171
172private:
176 QString mFromPointName;
177 QString mToPointName;
178 DANodeGraphicsScene* mScene;
179 bool mNeedDelete;
180 bool mSkipFirstRedo;
181};
182
186class DAWORKFLOW_API DACommandsForWorkFlowRemoveLink : public QUndoCommand
187{
188public:
189 // 这两个构造函数是在linkitem已经完成且确认连接后执行,在第一次redo时,不会进行操作,第二次才是真实操作
192 QUndoCommand* parent = nullptr);
194 void redo() override;
195 void undo() override;
196
197private:
201 QString mFromPointName;
202 QString mToPointName;
203 DANodeGraphicsScene* mScene;
204 bool mNeedDelete;
205};
206
207} // end DA
208
209#endif // DACOMMANDSFORWORKFLOWNODEGRAPHICS_H
这是节点的基类,workflow所有节点都继承此类 作为一个节点的QGraphicsItem,此item应该由DAAbstractNode创建
Definition DAAbstractNodeGraphicsItem.h:47
绘制连接线的item
Definition DAAbstractNodeLinkGraphicsItem.h:20
节点添加命令
Definition DACommandsForWorkFlowNodeGraphics.h:80
节点创建命令
Definition DACommandsForWorkFlowNodeGraphics.h:31
节点删除命令
Definition DACommandsForWorkFlowNodeGraphics.h:103
移除节点命令
Definition DACommandsForWorkFlowNodeGraphics.h:61
The 节点删除命令
Definition DACommandsForWorkFlowNodeGraphics.h:127
DAAbstractNodeGraphicsItem对应的QGraphicsScene,通过此scene,管理DAWorkFlow内容
Definition DANodeGraphicsScene.h:25
保存节点元数据 节点元数据由工厂进行管理
Definition DANodeMetaData.h:16
基本的工作流,这个也是总工厂,汇总了所有插件的工厂
Definition DAWorkFlow.h:21
序列化类都是带异常的,使用中需要处理异常
Definition AppMainWindow.cpp:44