logplus/ModuleConsole/command/include/AddModuleCmd.h

206 lines
8.2 KiB
C
Raw Normal View History

2026-01-16 17:18:41 +08:00
/*
* @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 */