102 lines
2.8 KiB
C++
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()));
|
|
}
|
|
}
|
|
}
|
|
|