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

102 lines
2.8 KiB
C++

/*
* BreakLineCmd.cpp
*
* Created on: 2012-10-10
* Author: limengzhuo
*/
#include <QDebug>
#include "BreakLineCmd.h"
#include "ModuleConnectGraphicsItem.h"
#include "PaiWorkflowDataModel.h"
#include "PAIConst.h"
#include "WorkFlowFile.h"
#include "WorkflowSceneManager.h"
#include "PaiMessageBox.h"
#include "ConsoleGUIService.h"
using namespace pai::gui;
using namespace pai;
using namespace pai::graphics2d;
using namespace pai::workflow;
namespace pai
{
BreakLineCmd::BreakLineCmd(pai::objectmodel::PaiWorkflowDataModel *pWorkflow,
pai::graphics2d::WorkflowSceneManager *pScene,
QList<pai::workflow::CModuleConnection*> connectionList,
QUndoCommand *pParent)
:QUndoCommand(pParent)
,m_connectionList(connectionList)
,m_pWorkflow(pWorkflow)
,m_pScene(pScene)
{
}
BreakLineCmd::~BreakLineCmd()
{
qDeleteAll(m_connectionList);
m_connectionList.clear();
}
void BreakLineCmd::undo()
{
AddLine();
}
void BreakLineCmd::AddLine()
{
m_pScene->WaitThreadForDone();
foreach(CModuleConnection *pConnection, m_connectionList)
{
if (pConnection != NULL)
{
CModuleConnection *pNewConnection = new workflow::CModuleConnection();
pConnection->CopyTo(*pNewConnection);
m_pWorkflow->AddConnection(pNewConnection);
m_pScene->AddConnection(pNewConnection);
}
}
m_pScene->StartSubmitValidateThread();
}
void BreakLineCmd::redo()
{
BreakLine();
}
void BreakLineCmd::BreakLine()
{
try
{
if(!m_pScene || !m_pWorkflow || m_connectionList.isEmpty())
{
return;
}
//等待线程结束
m_pScene->WaitThreadForDone();
foreach(CModuleConnection *pConnection, m_connectionList)
{
if (pConnection)
{
//需要断开的连线
CModuleConnection* pConnectNeedRemove = m_pWorkflow->GetConnection(pConnection);
if (pConnectNeedRemove)
{
m_pScene->DeleteConnection(pConnectNeedRemove);
m_pWorkflow->RemoveConnection(pConnectNeedRemove);
}
}
}
m_pScene->StartSubmitValidateThread();
}
catch(pai::error::generic_error & e)
{
QString strMessage = QString("Exception occured when deleting connection lines. ").append(e.what());
PaiMessageBox::Critical(NULL, PAI_NAME, strMessage);
pai::log::Error(_FLF(QObject::tr("QUndoCommand::ShowMessage ").toStdString()+strMessage.toStdString()));
}
}
}