132 lines
3.6 KiB
C++
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_ */
|