180 lines
4.9 KiB
C++
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;
|
|
}
|
|
}
|
|
|