/* *@file PasteModuleCmd.h *@brief 粘贴工作流中的模块 *@date: 2012-10-11 *@author: liujunxia */ #ifndef PAI_FRAME_WORKFLOWVIEW_PASTEMODULECMD_H_ #define PAI_FRAME_WORKFLOWVIEW_PASTEMODULECMD_H_ #include #include #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 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 GetConnectLineList(pai::objectmodel::PaiWorkflowDataModel *pWorkflowSrc); /** *@brief 获取粘贴来源工作流中Module 和 Style 的列表 *@param[in] pWorkflowSrc 源工作流 *@return 工作流pWorkflowSrc中的模块信息和模块style信息 */ QList GetModuleInfoAndStyleList(pai::objectmodel::PaiWorkflowDataModel *pWorkflowSrc); private: QPointF m_point; QRectF m_boundingRect; QList m_pastedStepIdList; QList m_connectionList; QList m_moduleInfoStyleList; pai::objectmodel::PaiWorkflowDataModel* m_pWorkflow; pai::graphics2d::WorkflowSceneManager *m_pSceneManager; QList m_pasteLines; bool m_bPasteFromWorkflow; pai::BreakLineCmd *m_breakLine;//断开连线命令 }; } } #endif /* PASTEMODULECMD_H_ */