206 lines
8.2 KiB
C
206 lines
8.2 KiB
C
|
|
/*
|
|||
|
|
* @file AddModuleCmd.h
|
|||
|
|
* @brief AddModuleCmd是为工作流编辑界面模块添加模块的命令
|
|||
|
|
* @date: 2012-10-10
|
|||
|
|
* @author: limengzhuo
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
#ifndef PAI_FRAME_WORKFLOWVIEW_ADDMODULECMD_H
|
|||
|
|
#define PAI_FRAME_WORKFLOWVIEW_ADDMODULECMD_H
|
|||
|
|
|
|||
|
|
#include <QGraphicsItem>
|
|||
|
|
#include <QPoint>
|
|||
|
|
#include <QList>
|
|||
|
|
#include <QUndoCommand>
|
|||
|
|
#include "ModuleInformation.h"
|
|||
|
|
namespace pai
|
|||
|
|
{
|
|||
|
|
class AddLineCmd;
|
|||
|
|
class BreakLineCmd;
|
|||
|
|
namespace objectmodel
|
|||
|
|
{
|
|||
|
|
class PaiWorkflowDataModel;
|
|||
|
|
}
|
|||
|
|
namespace graphics2d
|
|||
|
|
{
|
|||
|
|
class WorkflowSceneManager;
|
|||
|
|
class ModuleGraphicsItem;
|
|||
|
|
class ModuleConnectGraphicsItem;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @class AddModuleCmd
|
|||
|
|
* @brief AddModuleCmd是为工作流编辑界面模块添加模块的命令
|
|||
|
|
*/
|
|||
|
|
class AddModuleCmd :public QUndoCommand
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
/**
|
|||
|
|
* @brief 构造函数
|
|||
|
|
* @param[in] pSceneManager 添加模块的场景
|
|||
|
|
* @param[in] pWorkflow 添加模块工作流
|
|||
|
|
* @param[in] moduleName 添加模块的名字
|
|||
|
|
* @param[in] parent 父亲
|
|||
|
|
*/
|
|||
|
|
AddModuleCmd(pai::graphics2d::WorkflowSceneManager *pSceneManager,
|
|||
|
|
pai::objectmodel::PaiWorkflowDataModel *pWorkflow,
|
|||
|
|
QString moduleName,
|
|||
|
|
QUndoCommand *parent = 0);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 构造函数
|
|||
|
|
* @param[in] pSceneManager 添加模块的场景
|
|||
|
|
* @param[in] pWorkflow 添加模块工作流
|
|||
|
|
* @param[in] moduleName 添加模块的名字
|
|||
|
|
* @param[in] pSelectedItem 场景中被选中模块
|
|||
|
|
* @param[in] before 添加到被选中模块之前或者之后
|
|||
|
|
* @param[in] parent 父亲
|
|||
|
|
*/
|
|||
|
|
AddModuleCmd(pai::graphics2d::WorkflowSceneManager *pSceneManager,
|
|||
|
|
pai::objectmodel::PaiWorkflowDataModel *pWorkflow,
|
|||
|
|
QString moduleName,
|
|||
|
|
pai::graphics2d::ModuleGraphicsItem *pSelectedItem,
|
|||
|
|
bool before,
|
|||
|
|
QUndoCommand *parent = 0);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 构造函数
|
|||
|
|
* @param[in] pSceneManager 添加模块的场景
|
|||
|
|
* @param[in] pWorkflow 添加模块工作流
|
|||
|
|
* @param[in] moduleName 添加模块的名字
|
|||
|
|
* @param[in] pos 添加模块的位置
|
|||
|
|
* @param[in] parent 父亲
|
|||
|
|
*/
|
|||
|
|
AddModuleCmd(pai::graphics2d::WorkflowSceneManager *pSceneManager,
|
|||
|
|
pai::objectmodel::PaiWorkflowDataModel *pWorkflow,
|
|||
|
|
QString moduleName,
|
|||
|
|
QPointF pos,
|
|||
|
|
QUndoCommand *parent = 0);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 析构函数
|
|||
|
|
*/
|
|||
|
|
virtual ~AddModuleCmd();
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 撤销添加的模块
|
|||
|
|
*/
|
|||
|
|
void undo();
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 添加模块操作
|
|||
|
|
*/
|
|||
|
|
void redo();
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
/**
|
|||
|
|
* @brief 添加连线
|
|||
|
|
*/
|
|||
|
|
bool AddLine(pai::graphics2d::ModuleGraphicsItem *pBeginModule,
|
|||
|
|
pai::graphics2d::ModuleGraphicsItem *pEndModule);
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* @brief 根据被添加模块和被选中模块调整场景中所有模块的位置
|
|||
|
|
* @param[in] pAddedModule
|
|||
|
|
* @param[in] pSelectedModule
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
void LayoutAllModules(pai::graphics2d::ModuleGraphicsItem *pAddedModule,
|
|||
|
|
pai::graphics2d::ModuleGraphicsItem *pSelectedModule);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 根据被添加模块调整开始和结束模块位置
|
|||
|
|
* @param[in] pRelativeItem 场景中存在的位置固定模块
|
|||
|
|
* @param[in] pMovedItem 将要被移动的模块
|
|||
|
|
* @param[in] step 移动的像素
|
|||
|
|
*/
|
|||
|
|
void MoveAddedModulePosition(pai::graphics2d::ModuleGraphicsItem *pRelativeItem,
|
|||
|
|
pai::graphics2d::ModuleGraphicsItem *pAddedItem,
|
|||
|
|
qreal step);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 添加模块
|
|||
|
|
*/
|
|||
|
|
void AddModule();
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 删除模块
|
|||
|
|
*/
|
|||
|
|
void DeleteModule();
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 拖拽添加模块时删除原有连线及添加模块连接线
|
|||
|
|
* @param[in] pModuleItem 被添加的模块
|
|||
|
|
* @param[in] item 与被添加模块碰撞的连线
|
|||
|
|
* @param[in] startModuleItem 碰撞连线的开始模块
|
|||
|
|
* @param[in] endModuleItem 碰撞连线的结束模块
|
|||
|
|
* @param[in] startPortIndex 碰撞连线的开始端口
|
|||
|
|
* @param[in] endPortIndex 碰撞连线的结束端口
|
|||
|
|
*/
|
|||
|
|
void DeleteConnectLineAndAddNew(pai::graphics2d::ModuleGraphicsItem* pModuleItem,
|
|||
|
|
pai::graphics2d::ModuleConnectGraphicsItem *pItem,
|
|||
|
|
pai::graphics2d::ModuleGraphicsItem *pStartModuleItem,
|
|||
|
|
pai::graphics2d::ModuleGraphicsItem *pEndModuleItem);
|
|||
|
|
/**
|
|||
|
|
* @brief 处理模块时处理位置
|
|||
|
|
* @param[in] pModuleItem 被添加的模块
|
|||
|
|
* @param[in] startModuleItem 开始模块
|
|||
|
|
* @param[in] endModuleItem 结束模块
|
|||
|
|
*/
|
|||
|
|
void MoveGraphicItems(pai::graphics2d::ModuleGraphicsItem *pModuleItem,
|
|||
|
|
pai::graphics2d::ModuleGraphicsItem *pStartModuleItem,
|
|||
|
|
pai::graphics2d::ModuleGraphicsItem *pEndModuleItem);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 处理碰撞的连线图元
|
|||
|
|
* @param[in] pModuleItem 被添加的模块
|
|||
|
|
*/
|
|||
|
|
void HandleCollidingItems(pai::graphics2d::ModuleGraphicsItem *pModuleItem);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 处理最低端的模块图元
|
|||
|
|
* @param[in] pModuleItem 被添加的模块
|
|||
|
|
* @param[in] pMostBottomItem 场景中最底端模块
|
|||
|
|
*/
|
|||
|
|
void HandleMostBottomItem(pai::graphics2d::ModuleGraphicsItem *pModuleItem,
|
|||
|
|
pai::graphics2d::ModuleGraphicsItem *pMostBottomItem);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 设置模块位置
|
|||
|
|
* @param[in] pModuleItem 模块
|
|||
|
|
* @param[in] pos 模块位置
|
|||
|
|
*/
|
|||
|
|
void SetPosition(pai::graphics2d::ModuleGraphicsItem *pModuleItem, QPointF pos);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 获取最低端的模块图元
|
|||
|
|
* @return 最底端模块
|
|||
|
|
*/
|
|||
|
|
pai::graphics2d::ModuleGraphicsItem* GetMostBottomItem(QGraphicsItem *pModuleItem);
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
static const int nDefaultIntervalY = 26; //模块间的高度距离
|
|||
|
|
|
|||
|
|
enum AddModuleType
|
|||
|
|
{
|
|||
|
|
AddModuleType_General = 0, //模块树双击模块添加或者模块树右键菜单项add添加(在没有选中任何模块的情况下)
|
|||
|
|
AddModuleType_After = 1, //模块树右键菜单项addAfter添加(选中模块的情况下双击模块树上模块)
|
|||
|
|
AddModuleType_Before = 2, //模块树右键菜单项addBefore添加
|
|||
|
|
AddModuleType_Drop = 3, //模块树拖拽模块添加(双击场景添加模块)
|
|||
|
|
};
|
|||
|
|
AddModuleType m_type; //模块添加的类型,是普通的添加,还是从模块树上拖拽过来的,还是在选中模块之前或之后添加
|
|||
|
|
QPointF m_eventPos; //拖拽时候的drop位置
|
|||
|
|
pai::objectmodel::PaiWorkflowDataModel* m_pWorkflow; //工作流模型
|
|||
|
|
pai::graphics2d::WorkflowSceneManager* m_pScene; //场景
|
|||
|
|
int m_addedModuleStepId; //添加的模块的Id
|
|||
|
|
bool m_bModuleSelected; //redo 时模块是否需要被选中
|
|||
|
|
bool m_bFirstRedo; //是否第一次redo 操作
|
|||
|
|
int m_selectedModuleStepId; //选中模块之前或之后添加时候,备选中的模块图元
|
|||
|
|
QString m_moduleClassName; //要添加的模块的类名
|
|||
|
|
QList<pai::AddLineCmd *> m_AddLineLst; //添加连线命令管理链表
|
|||
|
|
QList<pai::BreakLineCmd *> m_BreakLineLst; //断开连线命令管理链表
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
#endif /* PAI_FRAME_WORKFLOWVIEW_ADDMODULECMD_H */
|