/* * SaveAsTemplateCmd.cpp * * Created on: 2012-12-10 * Author: dev */ #include "SaveAsTemplateCmd.h" #include "PaiWorkflowDataModel.h" #include "PaiWorkflowMaster.h" #include "WorkflowPluginControl.h" #include "DeleteTemplateCmd.h" #include "PaiBalloonTipSettings.h" #include "PaiBalloonTip.h" #include "SaveHelper.h" #include "PaiWorkflowTemplateTree.h" #include "PaiInputDialog.h" #include "ConsoleGUIService.h" #include "WorkflowConst.h" #include "TimeStampLogger.h" #include "WellLogWorkflowDataModel.h" #include "ObjectID.h" using namespace pai; using namespace pai::objectmodel; using namespace pai::gui; namespace pai { SaveAsTemplateCmd::SaveAsTemplateCmd(pai::CPaiWorkflowTemplateTree* pTemplateTree, pai::objectmodel::PaiWorkflowDataModel *pActiveWorkflow, QUndoCommand *parent) :QUndoCommand(parent) ,m_bSaveSuccess(true) { m_pOldWorkflow = NULL; m_pSameNameTemplate = NULL; m_pTemplateTree = pTemplateTree; m_pActiveWorkflow = pActiveWorkflow; } SaveAsTemplateCmd::~SaveAsTemplateCmd() { } void SaveAsTemplateCmd::undo() { } void SaveAsTemplateCmd::redo() { pai::gui::TimeStampLogger::GetInstance().WriteGUIBenchMarkLog("Workflow", true, "Save workflow as template"); m_bSaveSuccess = _HandleSaveAsTemplate(); pai::gui::TimeStampLogger::GetInstance().WriteGUIBenchMarkLog("Workflow", false, "Save workflow as template"); } PaiWorkflowDataModel* SaveAsTemplateCmd::_CopyWorkflow() { if (m_pOldWorkflow == NULL) return NULL; //创建新工作流模型 CWellLogWorkflowDataModel* pNewWorkflow = new CWellLogWorkflowDataModel(GetWindowTypeID_QtMultiWellSection()); pNewWorkflow->SetIgnoreSyncDB(true); //拷贝当前工作流模型到新工作流模型 pNewWorkflow->Copy(*m_pOldWorkflow); pNewWorkflow->SetName(m_strNewTtemplateName); return pNewWorkflow; } PaiObject* SaveAsTemplateCmd::_GetOldSameNameWorkflow() { QList objectList = m_pTemplateTree->GetChildren(); foreach(PaiObject *pObj, objectList) { if (pObj->GetName() == m_strNewTtemplateName) { return pObj; } } return NULL; } bool SaveAsTemplateCmd::_HandleSaveAsTemplate() { if(!m_pActiveWorkflow) { return false; } m_pOldWorkflow = m_pActiveWorkflow;//备份原来的ActiveWorkflow m_SaveType = OpenSaveAsDialog(m_strNewTtemplateName); if (m_SaveType == SaveTemplate_DoCancel || m_strNewTtemplateName.isEmpty()) { return false; } m_pSameNameTemplate = _GetOldSameNameWorkflow();//如果要替换同名的工作流,先获得同名工作流 bool bSameWorkflow = m_pSameNameTemplate == m_pOldWorkflow ? true : false; if (NULL != m_pSameNameTemplate && bSameWorkflow == false) { QString errMsg; if (!m_pSameNameTemplate->TryDelete(errMsg)) { PaiMessageBox::Critical(NULL, QObject::tr("Error"), QObject::tr("Cannot save as template \"%1\":\n").arg(m_pSameNameTemplate->GetName()) + errMsg, PaiMessageBox::Ok, PaiMessageBox::Ok); return false; } } PaiWorkflowDataModel* pNewWorkflow = m_pOldWorkflow; if (!bSameWorkflow) { pNewWorkflow = _CopyWorkflow(); } if (m_pSameNameTemplate != NULL && !bSameWorkflow) { DeleteTemplateCmd deleteTemplateCmd(m_pTemplateTree, m_pSameNameTemplate); deleteTemplateCmd.redo(); } //保存新工作流模型 //if (SaveHelper::SaveWorkflow(pNewWorkflow, true)) //{ m_pTemplateTree->AddChild(pNewWorkflow); //} // else // { // return false; // } if (pNewWorkflow->HasFlag(PaiObject::Loaded)) { QString text = QObject::tr("Workflow template \"") + m_strNewTtemplateName + QObject::tr("\"") + " saved." + "
    Double click to open it or right click to open menu."; PaiBalloonGuide::GetInstance()->ShowInstantTip(pNewWorkflow->GetID(), text, "PaiBalloonTipType_HandleSaveAsTemplate"); } return true; } int SaveAsTemplateCmd::OpenSaveDialog(QString &strTemplateName) { return OpenSaveDialog(true, strTemplateName); } int SaveAsTemplateCmd::OpenSaveAsDialog(QString &strTemplateName) { return OpenSaveDialog(false, strTemplateName); } int SaveAsTemplateCmd::OpenSaveDialog(bool bSave, QString &strTemplateName) { if(!m_pActiveWorkflow) { return SaveType_DoCancel; } PaiWorkflowDataModel *pCurrentWorkflow = m_pActiveWorkflow; //打开对话框设置工作流模板的名字 PaiInputDialog dlgNameTemplate(NULL); dlgNameTemplate.SetOkButtonText("&Save"); dlgNameTemplate.SetLabelText("Please enter the workflow template name:"); dlgNameTemplate.SetText(pCurrentWorkflow->GetName().remove("/")); dlgNameTemplate.UseValidateNameEdit(g_iMaxWorkflowNameLength); if (bSave) { dlgNameTemplate.setWindowTitle(g_szSave); } else { dlgNameTemplate.setWindowTitle(g_szSaveAs); } while (dlgNameTemplate.exec() == QDialog::Accepted) { strTemplateName = dlgNameTemplate.TextValue(); if (strTemplateName.contains("/")) { QString szContent = QObject::tr("Cannot report '/' character in mame."); PaiMessageBox::Warning(NULL,"",szContent, PaiMessageBox::Yes, PaiMessageBox::Yes); return (SaveType_DoCancel); } if (strTemplateName.isEmpty()) { return (SaveType_DoCancel); } int findResult = ValidateSaveTemplateName(strTemplateName); if (findResult & SaveType_DoOpenDialog) { dlgNameTemplate.ResetValidateNameEdit(); continue; } else { return findResult; } } //1.取消操作 return (SaveType_DoCancel); } int SaveAsTemplateCmd::ValidateSaveTemplateName(QString strTemplateName) { if(!m_pActiveWorkflow) { return SaveTemplate_Save; } int ret = SaveTemplate_Save; QList lstChildren = m_pTemplateTree->GetChildren(); for (int i = 0; i < lstChildren.count(); ++i) { if (lstChildren.at(i)->GetName() == strTemplateName) { QWidget* pMainWindow = NULL; QString title = "π-Frame Workflow"; QString body = QObject::tr("workflow template %1 exists. Do you want to replace it?").arg(strTemplateName); if (PaiMessageBox::No == PaiMessageBox::Warning(pMainWindow, title, body, PaiMessageBox::Yes | PaiMessageBox::No, PaiMessageBox::Yes)) { ret = SaveTemplate_DoOpenDialog; } break; } } return ret; } }