logplus/ModuleConsole/command/include/AddModuleCmd.h
2026-01-16 17:18:41 +08:00

206 lines
8.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* @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 */