241 lines
6.2 KiB
C++
241 lines
6.2 KiB
C++
/*
|
|
* 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<pai::objectmodel::PaiObject*> 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." + "<br> 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<PaiObject*> 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;
|
|
}
|
|
}
|
|
|