logplus/ModuleConsole/command/src/RenameModuleCmd.cpp
2026-01-16 17:18:41 +08:00

180 lines
4.9 KiB
C++

/*
* RenameModuleCmd.cpp
*
* Created on: 2012-10-10
* Author: limengzhuo
*/
#include <QDebug>
#include "RenameModuleCmd.h"
#include "ModuleGraphicsItem.h"
#include "ModuleConnectGraphicsItem.h"
#include "PaiWorkflowDataModel.h"
#include "GlobalModuleBackup.h"
#include "ModuleConnection.h"
#include "ModuleInformation.h"
#include "GlobalWorkflowItems.h"
#include "WorkflowSceneManager.h"
#include "WorkFlowFile.h"
using namespace pai;
using namespace pai::graphics2d;
using namespace pai::workflow;
namespace pai
{
RenameModuleCmd::RenameModuleCmd(pai::graphics2d::WorkflowSceneManager *pSceneManager,
pai::objectmodel::PaiWorkflowDataModel *pWorkflow,
QList<QGraphicsItem*> /*list*/,
QGraphicsItem* pItem,
QString newName,
QUndoCommand *parent) :
QUndoCommand(parent)
{
m_pSceneManager = pSceneManager;
m_pWorkflow = pWorkflow;
m_sNewName = newName;
ModuleGraphicsItem *pModuleItem = dynamic_cast<ModuleGraphicsItem *>(pItem);
if (pModuleItem)
{
m_stepId = pModuleItem->GetModule()->GetStepID();
if (pModuleItem->GetModule()->IsBlankModule())
{
m_originalName = "";
}
else
{
m_originalName = QString::fromStdString(pModuleItem->GetModule()->GetClassName());
}
m_connectionList = GetRemovedModuleConnections(m_stepId);
}
else
{
m_stepId = 0;
}
}
RenameModuleCmd::~RenameModuleCmd()
{
qDeleteAll(m_connectionList);
m_connectionList.clear();
}
void RenameModuleCmd::undo()
{
if(!m_pSceneManager)
{
return;
}
rename(m_sNewName, m_originalName);
}
void RenameModuleCmd::redo()
{
if(!m_pSceneManager)
{
return;
}
rename(m_originalName, m_sNewName);
}
void RenameModuleCmd::rename(QString originalName, QString newName)
{
m_pSceneManager->SetFocusViewport();
if (m_stepId > 0)
{
//在做重命名之前先清理掉模块相关所有连线
foreach(CModuleConnection *pConnection,m_connectionList)
{
CModuleConnection* pConnectNeedRemove = m_pWorkflow->GetConnection(pConnection);
if(pConnectNeedRemove)
{
m_pSceneManager->DeleteConnection(pConnectNeedRemove);
m_pWorkflow->RemoveConnection(pConnectNeedRemove);
}
}
ModuleGraphicsItem *pModuleItem = GlobalWorkflowItems::GetInstance()->FindModule(m_pSceneManager, m_stepId);
GlobalModuleBackup *moduleBackup = ::GetGlobalModuleBackup();
moduleBackup->RemoveBackupModule(m_pWorkflow->GetID(),pModuleItem->GetModule());
workflow::CModuleInformation* pNewModule = m_pWorkflow->ReplaceModule(pModuleItem->GetModule(), newName.toStdString());
pModuleItem->SetModule(pNewModule);
moduleBackup->InsertBackupModule(m_pWorkflow->GetID(),pNewModule);
//更新模块名称以后,根据模块输入端口决定是否添加连线
if(pModuleItem->GetInputPortCount() > 0)
{
foreach(CModuleConnection *pConnection,m_connectionList)
{
if(pConnection->GetDestId() == m_stepId)
{
CModuleConnection* pNewConnection = new CModuleConnection();
pConnection->CopyTo(*pNewConnection);
m_pWorkflow->AddConnection(pNewConnection);
m_pSceneManager->AddConnection(pNewConnection);
}
}
}
//更新模块名称以后,根据模块输出端口决定是否添加连线
if(pModuleItem->GetOutputPortCount() > 0)
{
foreach(CModuleConnection *pConnection,m_connectionList)
{
if(pConnection->GetSourceId() == m_stepId)
{
CModuleConnection* pNewConnection = new CModuleConnection();
pConnection->CopyTo(*pNewConnection);
m_pWorkflow->AddConnection(pNewConnection);
m_pSceneManager->AddConnection(pNewConnection);
}
}
}
//保证改名后进行一次模块验证的结果能进行模块颜色和submit按钮的状态的设置
if (pNewModule->IsBlankModule())
{
pai::graphics2d::PaiModuleStyle* pStyle = new PaiModuleStyle();
pModuleItem->SetStyle(pStyle);
pModuleItem->SetInitialValidated(false);
}
if (originalName != newName)
{
pModuleItem->SetDisable(false);
}
pModuleItem->update();
if(pModuleItem && pModuleItem->GetModule())
{
m_pSceneManager->SelectModuleItem(pModuleItem->GetModule()->GetStepID());
}
if (pNewModule->IsBlankModule())
{
pai::graphics2d::ModuleGraphicsItem::m_EventAgent.ItemSetName(pModuleItem);
}
}
}
QList<workflow::CModuleConnection*> RenameModuleCmd::GetRemovedModuleConnections(int stepId)
{
QList<workflow::CModuleConnection *> connectionList;
connectionList.clear();
for (unsigned int i = 0; i < m_pWorkflow->GetWorkflowFile()->GetModuleConnections()->size(); i++)
{
workflow::CModuleConnection* pConnection = m_pWorkflow->GetWorkflowFile()->GetModuleConnections()->at(i);
if (pConnection->GetDestId() == stepId || pConnection->GetSourceId() == stepId)
{
workflow::CModuleConnection* pConnectionBackup = new workflow::CModuleConnection();
pConnection->CopyTo(*pConnectionBackup);
connectionList << pConnectionBackup;
}
}
return connectionList;
}
}