#include "VPCommand.h" #include "Pou.h" #include "WindowAppPouScene.h" #include "WindowAppBlockBase.h" #include "WindowAppUiScene.h" #include "VControlObject.h" #include "UiManager.h" #include "SelectWidget.h" //===================================================== // // Pou中添加工具的操作 // //===================================================== /// /// 生成Pou中的工具添加命令,并保存相关信息(注意Tool需要复制一份出来,要做深度拷贝) /// /// /// /// PouToolAddCommand::PouToolAddCommand(WindowAppPouScene* pScene, const STATIC_TOOL* toolInfo, QPointF toolPos) { this->m_pPouScene = pScene; this->m_toolInfo = *toolInfo; this->m_toolPos = toolPos; vDebug() << " New tool add cmd: Tool[" << toolInfo->strName << "]."; } /// /// 执行Pou添加工具命令 /// void PouToolAddCommand::redo() { // 调用PouScene的接口添加工具 WindowAppBlockBase* pNewBlock = m_pPouScene->addToolItem(&m_toolInfo, m_toolPos); //QFuture future = QtConcurrent::run(m_pPouScene, &WindowAppPouScene::addToolItem, &m_toolInfo, m_toolPos); //future.waitForFinished(); // vDebug() << " PouToolAddCommand - Redo: add Tool[" << m_toolInfo.strName << "] finished."; //WindowAppBlockBase* pNewBlock = future.result(); // 保存实例名用于后续使用 this->m_strToolInstName = pNewBlock->m_toolInfo->strInstanceName; vDebug() << " PouToolAddCommand - Redo: add Tool[" << m_toolInfo.strName << "]."; } /// /// 撤销(删除此Tool) /// void PouToolAddCommand::undo() { // 根据名字获取对应的功能块(因为这个功能块可能是删除之后重建的,所以每次都需要获取最新的功能块指针) WindowAppBlockBase* pBlock = m_pPouScene->m_Pou.GetToolItem(m_strToolInstName); if (pBlock != nullptr) { // 删除此功能块 m_pPouScene->delToolItem(pBlock); } vDebug() << " PouToolAddCommand - Undo: del Tool[" << m_strToolInstName << "]."; } //===================================================== // // Pou中删除工具的操作 // //===================================================== /// /// 生成Pou中的工具删除命令,并保存相关信息(从TOOL取出基本信息进行保存) /// /// /// /// PouToolDelCommand::PouToolDelCommand(WindowAppPouScene* pScene, const TOOL* tool, QPointF toolPos) { this->m_pPouScene = pScene; this->m_toolInfo = STATIC_TOOL(tool); this->m_toolPos = toolPos; this->m_strToolInstName = tool->strInstanceName; vDebug() << " New tool del cmd: Tool[" << tool->strInstanceName << "]."; } /// /// 执行本命令(删除此Tool) /// void PouToolDelCommand::redo() { // 根据名字获取对应的功能块(因为这个功能块可能是删除之后重建的,所以每次都需要获取最新的功能块指针) WindowAppBlockBase* pBlock = m_pPouScene->m_Pou.GetToolItem(m_strToolInstName); if (pBlock != nullptr) { m_pPouScene->delToolItem(pBlock); } vDebug() << " PouToolDelCommand - Redo: del Tool[" << m_strToolInstName << "]."; } /// /// 撤销(重新添加Tool) /// void PouToolDelCommand::undo() { // 调用PouScene的接口添加工具 WindowAppBlockBase* pNewBlock = m_pPouScene->addToolItem(&m_toolInfo, m_toolPos); // 保存实例名用于后续使用(此处理应不会变化) this->m_strToolInstName = pNewBlock->m_toolInfo->strInstanceName; vDebug() << " PouToolDelCommand - Undo: add Tool[" << this->m_strToolInstName << "]."; } //===================================================== // // Pou中移动工具的操作 // //===================================================== /// /// 生成Pou中的工具移动命令,并保存相关信息 /// /// /// /// PouToolMoveCommand::PouToolMoveCommand(POU* pou, const QString& strToolInstName, const QPointF& oldPos, const QPointF& newPos) { this->m_Pou = pou; this->m_strToolInstName = strToolInstName; this->m_oldPos = oldPos; this->m_newPos = newPos; vDebug() << " New tool move cmd: Tool[" << strToolInstName << "] from " << oldPos << " to " << newPos; } /// /// 执行本命令 /// void PouToolMoveCommand::redo() { // 根据名字获取对应的功能块(因为这个功能块可能是删除之后重建的,所以每次都需要获取最新的功能块指针) WindowAppBlockBase* pBlock = m_Pou->GetToolItem(m_strToolInstName); // 移动到新位置 pBlock->setPos(m_newPos); vDebug() << " PouToolMoveCommand - Redo: Move Tool[" << m_strToolInstName << "] from " << m_oldPos << " to " << m_newPos; } /// /// 撤销(移动到旧位置) /// void PouToolMoveCommand::undo() { // 根据名字获取对应的功能块(因为这个功能块可能是删除之后重建的,所以每次都需要获取最新的功能块指针) WindowAppBlockBase* pBlock = m_Pou->GetToolItem(m_strToolInstName); // 移动到旧 pBlock->setPos(m_oldPos); vDebug() << " PouToolMoveCommand - Undo: Move Tool[" << m_strToolInstName << "] from " << m_newPos << " to " << m_oldPos; } //===================================================== // // UI中添加控件的操作 // //===================================================== /// /// 生成UI中的控件添加命令,并保存相关信息 /// /// /// /// UiControlAddCommand::UiControlAddCommand(WindowAppUiScene* pScene, VALUE_TYPE controlType, QPoint pos) { this->m_pUiScene = pScene; this->m_controlType = controlType; this->m_pos = pos; this->m_strControlID.clear(); vDebug() << " New control add cmd: Index[" << controlType << "] at " << pos; } /// /// 执行UI添加控件命令 /// void UiControlAddCommand::redo() { // 在UiScene中生成控件(如果之前已经有分配的ID了,则沿用之前的ID) VControlObject* pNewControl = m_pUiScene->newControl(this->m_controlType, this->m_pos, this->m_strControlID); if (pNewControl == nullptr) { return; } // 保存生成控件的ID号,用于后续Undo(此处应该只有首次会变,后续应该一直沿用不会变化) this->m_strControlID = pNewControl->m_strID; vDebug() << " UiControlAddCommand - Redo: add Control[" << this->m_strControlID << "] at " << m_pos; } /// /// 撤销(删除此控件) /// void UiControlAddCommand::undo() { // 根据ID号删除指定的控件 m_pUiScene->deleteControlByID(m_strControlID); vDebug() << " UiControlAddCommand - Undo: del Control[" << this->m_strControlID << "]."; } //===================================================== // // UI中删除控件的操作 // //===================================================== /// /// 生成UI中的控件删除命令,并保存相关信息 /// /// /// /// UiControlDelCommand::UiControlDelCommand(WindowAppUiScene* pScene, VALUE_TYPE controlType, const QString strID, QPoint pos, QSize size) { this->m_pUiScene = pScene; this->m_controlType = controlType; this->m_strControlID = strID; this->m_pos = pos; this->m_size = size; vDebug() << " New control del cmd: ID[" << this->m_strControlID << "] at " << pos; } /// /// 执行UI删除控件命令 /// void UiControlDelCommand::redo() { // 根据ID号删除指定的控件 m_pUiScene->deleteControlByID(m_strControlID); vDebug() << " UiControlDelCommand - Redo: del Control[" << this->m_strControlID << "]."; } /// /// 撤销(重新添加此控件) /// void UiControlDelCommand::undo() { // 在UiScene中生成控件(如果之前已经有分配的ID了,则沿用之前的ID) VControlObject* pNewControl = m_pUiScene->newControl(this->m_controlType, this->m_pos, this->m_strControlID, m_size); if (pNewControl == nullptr) { return; } // 保存生成控件的ID号,用于后续Undo(此处理应不会变化) this->m_strControlID = pNewControl->m_strID; vDebug() << " UiControlDelCommand - Undo: add Control[" << this->m_strControlID << "] at " << m_pos; } //===================================================== // // UI中缩放控件的操作 // //===================================================== /// /// 生成UI中的控件缩放命令,并保存相关信息 /// /// /// /// /// UiControlZoomCommand::UiControlZoomCommand( WindowAppUiScene* pUiScene, const QString strID, const QRect& oldGeometry, const QRect& newGeometry ) { this->m_pUiScene = pUiScene; this->m_strControlID = strID; this->m_oldGeometry = oldGeometry; this->m_newGeometry = newGeometry; vDebug() << " New control zoom cmd: Control[" << m_strControlID << "] from " << oldGeometry << " to " << newGeometry; } /// /// 执行UI缩放控件命令(缩放到新尺寸) /// void UiControlZoomCommand::redo() { // 根据ID获取对应的控件Widget(因为这个控件可能是删除之后重建的,所以每次都需要获取最新的控件指针) SelectWidget* pControlWidget = m_pUiScene->getSelectWidgetByID(m_strControlID); if (pControlWidget == nullptr) { vDebug() << "[Error] UiControlZoomCommand - Redo: - pControlWidget is nullptr."; return; } // 缩放到新尺寸 pControlWidget->updateGeometry(this->m_newGeometry); vDebug() << " UiControlMoveCommand - Redo: Zoom Control[" << m_strControlID << "] from " << this->m_oldGeometry << " to " << this->m_newGeometry; } /// /// 撤销(还原到旧尺寸) /// void UiControlZoomCommand::undo() { // 根据ID获取对应的控件Widget(因为这个控件可能是删除之后重建的,所以每次都需要获取最新的控件指针) SelectWidget* pControlWidget = m_pUiScene->getSelectWidgetByID(m_strControlID); if (pControlWidget == nullptr) { vDebug() << "[Error] UiControlZoomCommand - Undo: - pControlWidget is nullptr."; return; } // 缩放到旧尺寸 pControlWidget->updateGeometry(this->m_oldGeometry); vDebug() << " UiControlMoveCommand - Undo: Zoom Control[" << m_strControlID << "] from " << this->m_newGeometry << " to " << this->m_oldGeometry; } //===================================================== // // UI中移动控件的操作 // //===================================================== /// /// 生成UI中的控件移动命令,并保存相关信息 /// /// /// /// /// UiControlMoveCommand::UiControlMoveCommand( WindowAppUiScene* pUiScene, const QString strID, const QPoint& oldPos, const QPoint& newPos ) { this->m_pUiScene = pUiScene; this->m_strControlID = strID; this->m_oldPos = oldPos; this->m_newPos = newPos; vDebug() << " New control move cmd: Control[" << m_strControlID << "] from " << oldPos << " to " << newPos; } /// /// 执行UI移动控件命令(移动到新位置) /// void UiControlMoveCommand::redo() { // 根据ID获取对应的控件Widget(因为这个控件可能是删除之后重建的,所以每次都需要获取最新的控件指针) SelectWidget* pControlWidget = m_pUiScene->getSelectWidgetByID(m_strControlID); if (pControlWidget == nullptr) { vDebug() << "[Error] UiControlMoveCommand - Redo: - pControlWidget is nullptr."; return; } // 移动到新位置 pControlWidget->updatePos(m_newPos); vDebug() << " UiControlMoveCommand - Redo: Move Control[" << m_strControlID << "] from " << m_oldPos << " to " << m_newPos; } /// /// 撤销(移动到旧位置) /// void UiControlMoveCommand::undo() { // 根据ID获取对应的控件Widget(因为这个控件可能是删除之后重建的,所以每次都需要获取最新的控件指针) SelectWidget* pControlWidget = m_pUiScene->getSelectWidgetByID(m_strControlID); if (pControlWidget == nullptr) { vDebug() << "[Error] UiControlMoveCommand - Undo: - pControlWidget is nullptr."; return; } // 移动到旧位置 pControlWidget->updatePos(m_oldPos); vDebug() << " UiControlMoveCommand - Undo: Move Control[" << m_strControlID << "] from " << m_newPos << " to " << m_oldPos; }