/* * BreakLineCmd.cpp * * Created on: 2012-10-10 * Author: limengzhuo */ #include #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 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())); } } }