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

132 lines
3.6 KiB
C++

/*
*@file PasteModuleCmd.h
*@brief 粘贴工作流中的模块
*@date: 2012-10-11
*@author: liujunxia
*/
#ifndef PAI_FRAME_WORKFLOWVIEW_PASTEMODULECMD_H_
#define PAI_FRAME_WORKFLOWVIEW_PASTEMODULECMD_H_
#include <QGraphicsItem>
#include <QUndoCommand>
#include "ModuleInformation.h"
#include "ModuleConnection.h"
namespace pai
{
class CModuleInfoAndStyle;
class BreakLineCmd;
namespace objectmodel
{
class PaiWorkflowDataModel;
}
namespace graphics2d
{
class WorkflowSceneManager;
class CModuleInfoAndStyle;
/**
* @class PasteModuleCmd
* @brief 粘贴工作流中的模块
*/
class PasteModuleCmd :public QUndoCommand
{
public:
/**
* @brief 构造函数
* @param[in] pSceneManager 活动场景
* @param[in] pWorkflow 活动工作流
* @param[in] list 被选中模块
* @param[in] point 粘贴位置
* @param[in] boundingRect 被粘贴模块的所占区域和
* @param[in] pParent 父亲
*/
PasteModuleCmd(pai::graphics2d::WorkflowSceneManager *pSceneManager, pai::objectmodel::PaiWorkflowDataModel *pWorkflow,
QList<QGraphicsItem*> list, QPointF point, QRectF boundingRect, QUndoCommand *pParent = 0);
/**
* @brief 构造函数
* @param[in] pSceneManager 活动场景
* @param[in] pWorkflow 目标工作流
* @param[in] pWorkflowSrc 源工作流
* @param[in] point 粘贴位置
* @param[in] boundingRect 被粘贴模块的所占区域和
* @param[in] pParent 父亲
*/
PasteModuleCmd(pai::graphics2d::WorkflowSceneManager *pSceneManager, pai::objectmodel::PaiWorkflowDataModel *pWorkflowDest,
pai::objectmodel::PaiWorkflowDataModel *pWorkflowSrc, QPointF point, QRectF boundingRect, QUndoCommand *pParent = 0);
/**
* @brief 析构函数
*/
virtual ~PasteModuleCmd();
/**
* @brief undo撤销粘贴
*/
void undo();
/**
* @brief redo粘贴
*/
void redo();
private:
/**
* @brief 粘贴图元
*/
void pasteGraphicItems();
/**
* @brief 粘贴复制的模块并更新连线的起始点和中止点
* @param point 粘贴位置
*/
void PasteModuleAndUpdateConnectLineModule(QPointF point);
/**
* @brief 修改模块信息,如果需要的话,例如在不同工程工区之间粘贴
* @param[in] pInf 模块信息指针
*/
bool ChangeModuleInformationIfNeeded(pai::workflow::CModuleInformation* pInf);
/**
* @brief 粘贴模块
* @param[in] point 粘贴位置
*/
void PasteModuleFromModuelInformation(QPointF point);
/**
* @brief 获取粘贴来源工作流中线的列表
* @param[in] pWorkflowSrc 源工作流
* @retun 工作流pWorkflowSrc中包含的连线信息
*/
QList<pai::workflow::CModuleConnection *> GetConnectLineList(pai::objectmodel::PaiWorkflowDataModel *pWorkflowSrc);
/**
*@brief 获取粘贴来源工作流中Module 和 Style 的列表
*@param[in] pWorkflowSrc 源工作流
*@return 工作流pWorkflowSrc中的模块信息和模块style信息
*/
QList<pai::graphics2d::CModuleInfoAndStyle *> GetModuleInfoAndStyleList(pai::objectmodel::PaiWorkflowDataModel *pWorkflowSrc);
private:
QPointF m_point;
QRectF m_boundingRect;
QList<int> m_pastedStepIdList;
QList<workflow::CModuleConnection*> m_connectionList;
QList<pai::graphics2d::CModuleInfoAndStyle*> m_moduleInfoStyleList;
pai::objectmodel::PaiWorkflowDataModel* m_pWorkflow;
pai::graphics2d::WorkflowSceneManager *m_pSceneManager;
QList<workflow::CModuleConnection*> m_pasteLines;
bool m_bPasteFromWorkflow;
pai::BreakLineCmd *m_breakLine;//断开连线命令
};
}
}
#endif /* PASTEMODULECMD_H_ */