/** * @file WorkflowPluginControl.cpp * @note 该文件是从WorkflowPlugin中提取出来的,如果查看之前的历史请查看WorkflowPlugin.cpp * @date 3014-08-05 */ #include #include #include #include #include #include #include #include #include "WorkFlowFile.h" // #include "WellViewInfo.h" // #include "DataImport.h" // #include "PaiInputDialog.h" // #include "PaiJobMaster.h" #include "PaiSettings.h" #include "WorkflowPluginControl.h" // #include "ModuleGraphicsItem.h" // #include "ConsoleGUIService.h" // #include "ViewExtension.h" #include "WorkflowWidget.h" #include "PaiModuleTree.h" #include "PaiTextEdit.h" #include "PaiWorkflowDataModel.h" #include "WorkflowSceneManager.h" #include "PaiModuleToolBarView.h" #include "ParameterEditor.h" #include "WorkflowConst.h" #include "GlobalUtility.h" #include "ParameterEditorModel.h" // #include "PluginManager.h" // #include "PaiWorkflowMaster.h" // #include "PaiObjectSelection.h" #include "PAIConst.h" #include "ModuleInformation.h" // #include "PaiBalloonTip.h" // #include "TimeStampLogger.h" #include "Utils.h" // #include "PaiBalloonTipSettings.h" #include "DeleteTemplateCmd.h" #include "DeleteWorkflowCmd.h" #include "SaveHelper.h" #include "SaveAsWorkflowCmd.h" #include "SaveAsTemplateCmd.h" // #include "SaveWorkflowCmd.h" #include "SaveTemplateCmd.h" #include "SaveWorkflowAsImageCmd.h" #include "SaveAllWorkflowsCmd.h" // #include "SubmitWorkflowCmd.h" // #include "PaiAction.h" #include "basefun.h" #include "PaiWorkflowTemplateTree.h" // #include "PaiFileDialog.h" // #include "PaiSelectSurveyDialog.h" #include "WorkflowPackage.h" // #include "PaiCheckJobOutputThread.h" // #include "WorkflowPlugin.h" // #include "PaiPermissionChecker.h" #include "PaiMenuToolBar.h" #include "LogModuleConsole.h" #include "WellLogWorkflowDataModel.h" #include "WellLogWorkflowRunner.h" #include "ObjectID.h" // #include "ObjProject.h" // #include "ObjectEvent.h" #include "ObjWelllog.h" // #include "VecDisplayObjectCommand.h" // #include "VecWindow.h" #include "RunTimeContext.h" // #include "ObjWellRulerTrack.h" // #include "VecSceneManager.h" #include "BaseObject.h" // #include "QtViewer.h" // #include "VecWindowCommand.h" #include "GeometryUtils.h" // #include "ConsoleOutputWidget.h" #include "ObjWell.h" #include "PELibraryModule.h" #include "PaiMessageBox.h" // void OSGFRAMEWORK_EXPORT AppendConsole(pai::log::Priority priority,const QString &output); using namespace pai; using namespace pai::gui; using namespace pai::graphics2d; using namespace pai::objectmodel; const QString LAST_EXPORT_WORKFLOW_PATH = "Export workflows path"; const QString LAST_IMPORT_WORKFLOW_PATH = "Import workflows path"; ////////////////////////////////////// WorkflowPluginControl ///////////////////////////////////////// WorkflowPluginControl::WorkflowPluginControl(const QUuid& viewID, QObject* pParent) : QObject(pParent), ControlExtension(), m_ViewID(viewID), m_pTemplateTree(NULL), m_pCheckJobOutputThread(NULL), m_pWellLogWorkflowRunner(new CWellLogWorkflowRunner()) { m_pUndoGroup = new QUndoGroup(this); m_pUndoAction = m_pUndoGroup->createUndoAction(this, g_szUndo); m_pUndoAction->setIcon(QIcon(g_szWUndo2Png)); m_pUndoAction->setShortcut(Qt::CTRL + Qt::Key_Z); m_pRedoAction = m_pUndoGroup->createRedoAction(this, g_szRedo); m_pRedoAction->setIcon(QIcon(g_szUndoPng)); m_pRedoAction->setShortcut(Qt::CTRL + Qt::Key_Y); } WorkflowPluginControl::~WorkflowPluginControl() { if(m_pUndoAction != NULL) { delete m_pUndoAction; m_pUndoAction = NULL; } if(m_pRedoAction != NULL) { delete m_pRedoAction; m_pRedoAction = NULL; } if(m_pUndoGroup != NULL) { delete m_pUndoGroup; m_pUndoGroup = NULL; } // if(m_pCheckJobOutputThread && m_pCheckJobOutputThread->isRunning()) // { // m_pCheckJobOutputThread->wait(); // delete m_pCheckJobOutputThread; // m_pCheckJobOutputThread = NULL; // } delete m_pWellLogWorkflowRunner; m_pWellLogWorkflowRunner = NULL; } QAction* WorkflowPluginControl::GetUndoAction() { return m_pUndoAction; } QAction* WorkflowPluginControl::GetRedoAction() { return m_pRedoAction; } QUndoGroup* WorkflowPluginControl::GetUndoGroup() { return m_pUndoGroup; } std::string WorkflowPluginControl::GetStringID() const { return g_szPluginControl; } QUuid WorkflowPluginControl::GetViewID() const { return m_ViewID; } bool WorkflowPluginControl::BuildTreeMenuActionsForObject(QList< PaiObject* > & contextObjs, QList< PaiAction* > & lstMenuActions) { // if(contextObjs.count() == 1) // { // PaiObject *pContextObj = contextObjs.first(); // ////获取workflowMaster的DBID和类型 // long long workflowMasterID = pContextObj->GetDBID(); // QUuid typeID = pContextObj->GetTypeID(); // if(typeID == QUuid(PaiWorkflowMaster::GetTypeIDString())) // { // PaiAction* pNewWorkflowAction = new PaiAction(QIcon(":/f_new_workflow.png"), tr(g_szNewWorkflowDot), this); // pNewWorkflowAction->SetActionFlags(pNewWorkflowAction->GetFlags() | PaiAction::TreeFloatingAct); // pNewWorkflowAction->SetPermission(pai::gui::PaiAction::CREATE); // pNewWorkflowAction->setData(QVariant(workflowMasterID)); // connect(pNewWorkflowAction, SIGNAL(triggered()), this, SLOT(slotNewWorkflow())); // lstMenuActions.push_back(pNewWorkflowAction); // PaiAction* pImportWorkflowAction = new PaiAction(QIcon(":/f_import_workflow.png"), tr(g_szImportWorkDot), this); // pImportWorkflowAction->SetActionFlags(pImportWorkflowAction->GetFlags() | PaiAction::TreeFloatingAct); // pImportWorkflowAction->SetObject(pContextObj); // pImportWorkflowAction->SetPermission(pai::gui::PaiAction::CREATE); // connect(pImportWorkflowAction, SIGNAL(triggered()), this, SLOT(slotImportWorkflows())); // lstMenuActions.push_back(pImportWorkflowAction); // QList< PaiObject* > childWorkflows; // pContextObj->GetObjectByType(childWorkflows, QUuid(PaiWorkflowDataModel::GetTypeIDString())); // if(!childWorkflows.empty()) // { // PaiAction* pExportWorkflowAction = new PaiAction(QIcon(":/f_export_workflow.png"), // tr(g_szExportAllWorkDot), this); // pExportWorkflowAction->SetActionFlags(pExportWorkflowAction->GetFlags() | PaiAction::TreeFloatingAct); // pExportWorkflowAction->SetObjects(childWorkflows); // pExportWorkflowAction->SetPermission(pai::gui::PaiAction::CREATE); // connect(pExportWorkflowAction, SIGNAL(triggered()), this, SLOT(slotExportWorkflows())); // lstMenuActions.push_back(pExportWorkflowAction); // } // return true; // } // } // // 检查是否所选中类型全为PaiWorkflowDataModel // bool areWorkflowModel = true; // QList wfIDs; // foreach(PaiObject *pObj, contextObjs) // { // wfIDs << QVariant(pObj->GetDBID()); // if (pObj->GetTypeID() != QUuid(PaiWorkflowDataModel::GetTypeIDString())) // { // wfIDs.clear(); // areWorkflowModel = false; // break; // } // } // if(areWorkflowModel) // { // PaiAction* pEditWorkflowAction = new PaiAction(QIcon(":/f_edit_workflow.png"), tr(g_szWorkflowOpen), this); // pEditWorkflowAction->SetActionFlags(pEditWorkflowAction->GetFlags() | PaiAction::TreeFloatingAct); // pEditWorkflowAction->setData(QVariant(wfIDs)); // connect(pEditWorkflowAction, SIGNAL(triggered()), this, SLOT(slotEditItem())); // lstMenuActions.push_back(pEditWorkflowAction); // if(contextObjs.count() == 1) // { // PaiAction* pSubmitWorkflowAction = new PaiAction(QIcon(":/f_submit_job.png"), tr(g_szSubmitODot), this); // pSubmitWorkflowAction->SetActionFlags(pSubmitWorkflowAction->GetFlags() | PaiAction::TreeFloatingAct); // bool bPermitSubmit = true; // bool permission = true; // foreach(PaiObject *pObj, contextObjs) // { // PaiWorkflowDataModel* pWorkflow = dynamic_cast (pObj); // if(pWorkflow == NULL) // { // return false; //得到PaiWorkflowDataModel为空时退出 // } // //如果当前工作流打开了,则需要判断打开的工作流中submit权限 // if(GetObjectModelService()->GetObjectLockManager()->IsObjectLocked(pWorkflow->GetDBID(),false)) // { // QList< PaiWorkflowDataModel* > workflows = GetOpenedWorkflows(); // for(int i = 0; i < workflows.size(); i++) // { // if(workflows.at(i) && pWorkflow->GetDBID() == workflows.at(i)->GetDBID()) // { // pWorkflow = workflows.at(i); //打开的工作流替换为编辑界面流 // break; // } // } // } // else // { // pWorkflow->ReloadDataModuel(); // } // bPermitSubmit = pWorkflow->IsSubmitting() ? false : pWorkflow->CanSubmit(true); // try // { // permission = PaiPermissionChecker::HasPermission(pObj,PaiAction::PaiPermissionTypes(PaiAction::UPDATE)); // } // catch(pai::error::generic_error & e) // { // permission = false; // } // catch(...) // { // permission = false; // } // if(!bPermitSubmit || !permission) // { // break; // } // } // pSubmitWorkflowAction->setEnabled(bPermitSubmit && permission); // if(bPermitSubmit) // { // pSubmitWorkflowAction->SetObjects(contextObjs); // connect(pSubmitWorkflowAction, SIGNAL(triggered()), this, SLOT(slotPreSubmitWorkflow())); // } // lstMenuActions.push_back(pSubmitWorkflowAction); // } // PaiAction* pExportWorkflowAction = new PaiAction(QIcon(":/f_export_workflow.png"), tr(g_szExportWorkflowDot), // this); // pExportWorkflowAction->SetActionFlags(pExportWorkflowAction->GetFlags() | PaiAction::TreeFloatingAct); // pExportWorkflowAction->SetObjects(contextObjs); // pExportWorkflowAction->SetPermission(pai::gui::PaiAction::CREATE); // connect(pExportWorkflowAction, SIGNAL(triggered()), this, SLOT(slotExportWorkflows())); // lstMenuActions.push_back(pExportWorkflowAction); // return true; // } return false; } CPaiWorkflowTemplateTree* WorkflowPluginControl::GetTemplateTree() { return m_pTemplateTree; } void WorkflowPluginControl::slotSaveWorkflowAsImageFile() { //SaveWorkflowAsImageCmd saveWorkflowAsImageCmd(m_ViewID); // saveWorkflowAsImageCmd.redo(); } void WorkflowPluginControl::slotSaveAllWorkflows() { //SaveAllWorkflowsCmd saveAllWorkflowsCmd(m_ViewID, m_pTemplateTree); //saveAllWorkflowsCmd.redo(); } void WorkflowPluginControl::slotSaveAsWorkflow() { //SaveAsWorkflowCmd saveAsWorkflowCmd(m_ViewID, GetActiveWorkflow()); //saveAsWorkflowCmd.redo(); // if(!saveAsWorkflowCmd.GetSaveAsResult() && (SaveHelper::GetSaveExceptionWhich() == pai::error::ERR_DATA_CHANGED)) // { // SaveHelper::SetSaveException(""); // QWidget* pMainWindow = NULL; // QString title = "π-Frame Workflow"; // QString body = QObject::tr("The workflow has been modified. Do you want to reload it?"); // if(PaiMessageBox::Warning(pMainWindow, title, body, PaiMessageBox::Yes | PaiMessageBox::No, PaiMessageBox::Yes) // == PaiMessageBox::Yes) // { // //需要更新工作流模型 // SaveHelper::GetActiveWorkflowView()->SetWorkflow(GetActiveWorkflow(), true); // } // } // pai::graphics2d::CParameterEditor* pEditor = dynamic_cast< pai::graphics2d::CParameterEditor* > (GetParameterEditor()); // if(pEditor != NULL) // { // ParameterEditorModel *pEditorModel = dynamic_cast< ParameterEditorModel* > (pEditor->model()); // if(pEditorModel && GetActiveWorkflow()) // { // pEditorModel->SetCurrentWorkflowID(QUuid(GetActiveWorkflow()->GetID())); // } // } } void WorkflowPluginControl::slotSaveAsTemplate() { // //PageService *pPageService = GetConsoleGUIService()->GetViewTabService()->GetPageService(GetViewID()); // // if(pPageService) // // { // // pPageService->ActiveView(g_szTemplates); // // } // if(m_pTemplateTree &&GetActiveWorkflow()) // { // SaveAsTemplateCmd saveAsTemplateCmd(m_pTemplateTree, GetActiveWorkflow()); // saveAsTemplateCmd.redo(); // } } void WorkflowPluginControl::slotSaveWorkflow() { /* if(GetActiveWorkflow()) { if(GetActiveWorkflow()->IsTemplate()) { SaveTemplateCmd saveTemplateCmd(m_pTemplateTree, GetActiveWorkflow()); saveTemplateCmd.redo(); } else { SaveWorkflowCmd saveWorkflowCmd(m_ViewID, GetActiveWorkflow()); saveWorkflowCmd.redo(); if(!saveWorkflowCmd.GetSaveResult() && (SaveHelper::GetSaveExceptionWhich() == pai::error::ERR_DATA_CHANGED)) { SaveHelper::SetSaveException(""); QWidget* pMainWindow = NULL; QString title = "π-Frame Workflow"; QString body = QObject::tr("The workflow has been modified. Do you want to reload it?"); if(PaiMessageBox::Yes == PaiMessageBox::Warning(pMainWindow, title, body, PaiMessageBox::Yes | PaiMessageBox::No, PaiMessageBox::Yes)) { //需要更新工作流模型 SaveHelper::GetActiveWorkflowView()->SetWorkflow(GetActiveWorkflow(), true); } } } } */ } bool WorkflowPluginControl::OpenNameJobDialog(QString& strJobName, QString strLabelText) { return false; // PaiInputDialog dlg(NULL); // dlg.SetOkButtonText("&Submit"); // dlg.SetText(strJobName); // dlg.SetLabelText(strLabelText); // dlg.setWindowTitle(PAI_NAME); // dlg.UseValidateNameEdit(g_iMaxJobNameLength); // if(dlg.exec() == QDialog::Accepted) // { // strJobName = dlg.TextValue(); // return true; // } // else // { // return false; // } } void WorkflowPluginControl::slotPreSubmitWorkflow() { //测井项目不需要,删除 } void WorkflowPluginControl::slotSubmitWorkflow(pai::objectmodel::PaiWorkflowDataModel* pWorkflow, const QString & jobName) { //测井项目不需要,删除 } void WorkflowPluginControl::slotOnJobSubmitFinished(PaiWorkflowDataModel* pWorkflowObject, const QString& strNewJobName) { //测井项目不需要,删除 } void WorkflowPluginControl::slotOnJobDataGenerated(pai::objectmodel::PaiObject* pJob, const QString& strPropertyName, const QVariant& varJobOutputDataID) { //测井项目不需要,删除 } void WorkflowPluginControl::SubmitWorkflow() { //测井项目不需要,删除 } void WorkflowPluginControl::NewWorkflow(pai::objectmodel::PaiObject *pSur) { //测井项目额外实现,不需要,删除 } void WorkflowPluginControl::slotNewWorkflow() { //测井项目额外实现,不需要,删除 } void WorkflowPluginControl::NewWorkflowByBrowse() { // pai::gui::PaiSelectSurveyDialog selDlg(NULL); // if(QDialog::Accepted == selDlg.exec()) // { // PaiObject *pObj = selDlg.GetSelectedSurvey(); // if(pObj) // { // pai::gui::TimeStampLogger::GetInstance().WriteGUIBenchMarkLog("Workflow", true, "New workflow"); // PaiObject* pSelectObject = GetObjectModelService()->GetObject(pObj->GetID()); // NewWorkflow(pSelectObject); // pai::gui::TimeStampLogger::GetInstance().WriteGUIBenchMarkLog("Workflow", false, "New workflow"); // } // else // { // PaiMessageBox::Information(NULL, tr("Notice"), // "No survey has been seleted!", PaiMessageBox::Ok); // } // } } void WorkflowPluginControl::ParseError(QList< QPair< int, QString > > &importErrorLst, ImportType type) { // QString strErr; // int errorCount = importErrorLst.count(); // for(int i = 0; i < errorCount; ++i) // { // QPair< int, QString > pair = importErrorLst.at(i); // switch(pair.first) // { // case ImportErrorType_STYLE: // strErr.append(tr(g_szWorkflowStyle).arg(pair.second)); // break; // case ImportErrorType_DELETE: // strErr.append(tr(g_szDeletFaile).arg(pair.second)); // break; // case ImportErrorType_REMOVE: // strErr.append(tr(g_szRemoveFailed).arg(pair.second)); // break; // case ImportErrorType_PARSE: // strErr.append(pair.second); // break; // case ImportErrorType_IMPORT: // strErr.append(pair.second); // break; // default: // strErr.append(tr(g_szImportFailed).arg(pair.second)); // break; // } // } // const char *ErrorMsg = (type == WORKFLOW_TYPE) ? g_szImportFailed : g_szTemplateImportFailed; // const char *importType = (type == WORKFLOW_TYPE) ? g_szWorkflowImpor : g_szTemplateImpor; // QString strErrorMsg(ErrorMsg); // if(!strErrorMsg.isEmpty() && ::GetConsoleGUIService()) // { // PaiMessageBox box(PaiMessageBox::Icon_Critical, tr(importType), tr(ErrorMsg).arg(errorCount), strErr, // PaiMessageBox::Ok, NULL); // box.exec(); // } // pai::log::Info(_FLF(QObject::tr(ErrorMsg).arg(errorCount).toStdString() + strErr.toStdString())); } bool WorkflowPluginControl::HasUnsupportedModule(PaiWorkflowDataModel* pWorkflow, QString &versionMsg) { if(!pWorkflow) { return false; } //处理新版本中已经不存在的模块 QStringList modulesNames = pWorkflow->GetMissingModuleNames(); if (!modulesNames.isEmpty()) { //把要显示的模块名称组织成html格式的列表 QString missingModuleName =QString("
    "); foreach(QString str,modulesNames) { missingModuleName += (QString("
  • ")+str+QString("
  • \n")); } //移除最后一个换行符 if(missingModuleName.endsWith("\n")) { missingModuleName.remove(missingModuleName.size()-1,1); } missingModuleName += QString("
"); versionMsg = QString("The workflow contains one or more modules that do not exist in current system." "Do you still want to import it? " "Module names:%1").arg(missingModuleName); return true; } return false; } void WorkflowPluginControl::UpdateOpenedWorkflow(PaiWorkflowDataModel* pWorkflow, long long workflowdbid) { // if((SaveHelper::GetActiveWorkflowView()->GetWorkflow()) && // SaveHelper::GetActiveWorkflowView()->GetWorkflow()->GetDBID() == workflowdbid) // { // SaveHelper::GetActiveWorkflowView()->SetWorkflow(pWorkflow, false); // } // else // { // PageService* pPageService = GetConsoleGUIService()->GetViewTabService()->GetPageService(m_ViewID); // if(pPageService != NULL) // { // QWidget* pWorkflowTabs = pPageService->GetWidgetView("A"); // if(pWorkflowTabs != NULL) // { // QList< WorkflowWidget* > lstWorkflowWidgets = pWorkflowTabs->findChildren< WorkflowWidget* > (); // foreach(WorkflowWidget* pWorkflowWidget, lstWorkflowWidgets) // { // if((pWorkflowWidget->GetWorkflow()) && // pWorkflowWidget->GetWorkflow()->GetDBID() == workflowdbid) // { // pWorkflowWidget->SetWorkflow(pWorkflow, false); // break; // } // } // } // } // } } bool WorkflowPluginControl::ImportWorkflow(const QString& JsonFilePath, pai::objectmodel::PaiObject *pWorkflowMaster, QList < QPair< int, QString > > &importErrorList, pai::gui::PaiMessageBox::StandardButton &resultButton, QStringList &strNames, ImportType type, QString outPutFile) { // QString strErrMsg; // QString baseWorkflowName; // bool workflowOpend = false; // PaiObject* pOldWorkflow = NULL; // QUuid workflowDataModelID; // long long workflowdbid = 0; // //获取去掉后缀的工作流名称 // QString suffix(g_szJson); // QString strBaseName = GetWorkflowBaseName(JsonFilePath,suffix); // if(strBaseName.endsWith(g_szStyle)) // { // importErrorList << QPair(ImportErrorType_STYLE, JsonFilePath); // return false; // } // //新建工作流 // PaiWorkflowDataModel* pNewWorkflow = new PaiWorkflowDataModel(); // std::string error; // if(pNewWorkflow->Parse(JsonFilePath.toStdString(),"", error, outPutFile.toStdString())) // { // //检查工作流中是否存在当前版本已经不存在的模块 // QString versionMsg; // if(HasUnsupportedModule(pNewWorkflow,versionMsg)) // { // PaiMessageBox::StandardButton resultBtn = PaiMessageBox::Warning(NULL, // tr("Warning"), versionMsg, PaiMessageBox::Yes | PaiMessageBox::Cancel); // if(resultBtn == PaiMessageBox::Cancel) // { // delete pNewWorkflow; // pNewWorkflow = NULL; // return false; // } // } // //处理老的的模块 // QString invalidModules; // if (pNewWorkflow->IsValid(invalidModules) == false) // { // QString msg = QString("The workflow contains different version of modules.\nDo you still want to import it?\n") + invalidModules; // PaiMessageBox::StandardButton resultBtn = PaiMessageBox::Warning(NULL, tr("Warning"), // msg,PaiMessageBox::Yes | PaiMessageBox::Cancel); // if(resultBtn == PaiMessageBox::Cancel) // { // delete pNewWorkflow; // pNewWorkflow = NULL; // return false; // } // } // //检查同名,删除同名 // if(strNames.contains(strBaseName)) // { // const char *deleteOldMsg = (type == WORKFLOW_TYPE)?g_szDeletOld:g_szDeletOldTempalte; // if(resultButton != PaiMessageBox::YesToAll) // { // resultButton = PaiMessageBox::Question(NULL, tr(g_szQuestion), // tr(deleteOldMsg).arg(strBaseName), PaiMessageBox::YesToAll | PaiMessageBox::Yes | PaiMessageBox::Cancel); // } // if(resultButton == PaiMessageBox::Cancel) // { // delete pNewWorkflow; // pNewWorkflow = NULL; // return false; // } // else // { // pOldWorkflow = (type == WORKFLOW_TYPE)?(pWorkflowMaster->GetObjectByName(strBaseName)):(m_pTemplateTree->GetChildByName(strBaseName)); // //如果这个工作流被打开状态,workflowOpend置真 // if(GetObjectModelService()->GetObjectLockManager()->IsObjectLocked(pOldWorkflow->GetDBID(),false)) // { // workflowOpend = true; // workflowDataModelID = pOldWorkflow->GetID(); // workflowdbid = pOldWorkflow->GetDBID(); // } // if(type == WORKFLOW_TYPE && !pOldWorkflow->Erase(&strErrMsg)) // { // importErrorList << QPair(ImportErrorType_DELETE, JsonFilePath); // delete pNewWorkflow; // return false; // } // if(type == WORKFLOW_TYPE && !pWorkflowMaster->RemoveChild(pOldWorkflow, true)) // { // importErrorList << QPair(ImportErrorType_REMOVE, JsonFilePath); // delete pNewWorkflow; // return false; // } // if(type == TEMPLATE_TYPE) // { // DeleteTemplateCmd deleteTemplateCmd(m_pTemplateTree, pOldWorkflow); // deleteTemplateCmd.redo(); // if(!deleteTemplateCmd.GetResult()) // { // importErrorList << QPair(ImportErrorType_DELETE, JsonFilePath); // delete pNewWorkflow; // return false; // } // } // } // } // pNewWorkflow->SetName(strBaseName); // if(workflowOpend) // { // pNewWorkflow->SetID(workflowDataModelID); // } // if(type == WORKFLOW_TYPE) // { // pWorkflowMaster->AddChild(pNewWorkflow); // QString strJsonFileName("/tmp/"); // strJsonFileName += pNewWorkflow->GetName(); // QString strID = pNewWorkflow->GetID().toString();//这里取ID来保证/tmp/下的工作流文件名唯一 // strID.remove('{').remove('-').remove('}'); // strJsonFileName += strID; // strJsonFileName += g_szJson; // pNewWorkflow->Save(strJsonFileName.toStdString()); // } // if(type == TEMPLATE_TYPE) // { // bool bResult = SaveHelper::SaveWorkflow(pNewWorkflow, true); // if (!bResult) // { // importErrorList << QPair(ImportErrorType_IMPORT, SaveHelper::GetSaveExceptionWhat()); // delete pNewWorkflow; // return false; // } // m_pTemplateTree->AddChild(pNewWorkflow); // } // if(type == WORKFLOW_TYPE && !pNewWorkflow->SaveToDB(&strErrMsg)) // { // importErrorList << QPair(ImportErrorType_IMPORT, JsonFilePath); // } // else if(type == WORKFLOW_TYPE) // { // //导入成功则选中 // GetObjectModelService()->GetObjectSelection()->Select(pNewWorkflow->GetID()); // } // //这里要做当老的工作流打开时的处理 // if(workflowOpend) // { // UpdateOpenedWorkflow(pNewWorkflow,workflowdbid); // } // } // else // { // QString importError; // const char *parseFailed = (type == WORKFLOW_TYPE)?g_szParseFailed:g_szTemplateParseFailed; // importError.append(tr(parseFailed).arg(JsonFilePath)); // importErrorList << QPair(ImportErrorType_PARSE, importError + QString::fromStdString(error)); // delete pNewWorkflow; // return false; // } return true; } void WorkflowPluginControl::HandleImportedFiles(const QStringList & lstJsonFilePaths, PaiObject *pWorkflowMaster, QStringList & strNames, ImportType type, QString outPutFile) { // PaiMessageBox::StandardButton resultButton = PaiMessageBox::Yes; // QList < QPair< int, QString > > importErrorList; // QString fileNameList; // foreach(QString strJsonFile, lstJsonFilePaths) // { // QString strBaseName; // if(ImportWorkflow(strJsonFile,pWorkflowMaster,importErrorList,resultButton,strNames,type,outPutFile)) // { // //获取去掉后缀的工作流名称 // QString suffix(g_szJson); // strBaseName = GetWorkflowBaseName(strJsonFile,suffix); // fileNameList += QString("\'"+strBaseName+"\' "); // } // else // { // continue; // } // } // if(importErrorList.empty()) // { // if(fileNameList.isEmpty()) // { // return; // } // if(1 != lstJsonFilePaths.count()) // { // fileNameList += " files."; // } // else // { // fileNameList += " file."; // } // //全部导入成功则不选中parent // if(type == WORKFLOW_TYPE) // { // GetObjectModelService()->GetObjectSelection()->Unselect(pWorkflowMaster->GetID()); // } // const char *title = (type == WORKFLOW_TYPE) ? g_szWorkflowImpor : g_szTemplateImpor; // if(::GetConsoleGUIService()) // { // PaiMessageBox::Information(NULL, tr(title), // tr(g_szImportWorkflowName).arg(fileNameList), PaiMessageBox::Ok); // } // } // else // { // //处理导入错误 // ParseError(importErrorList, type); // } } void WorkflowPluginControl::ImportWorkflows(const QUuid& targetParentID, const QStringList& lstJsonFilePaths, ImportType type) { // //导入workflow时用的判断 // if(type == WORKFLOW_TYPE && targetParentID.isNull()) // { // ShowMessage(PAI_NAME, g_szInvalidId); // return; // } // PaiObject* pParentStage = NULL; // PaiSurvey* pSurvey = NULL; // QString outPutFile; // QStringList names; // if(type == WORKFLOW_TYPE) // { // pParentStage = GetObjectModelService()->GetObject(targetParentID); // Q_ASSERT(NULL != pParentStage); // pSurvey = pParentStage->GetForebear< PaiSurvey > (); // if(!pSurvey) // { // return; // } // outPutFile.append(pSurvey->GetPhysicalFile()); // outPutFile.append("/"); // QList< PaiObject* > workflows; // pParentStage->GetChildren(workflows); // foreach(PaiObject* pWorkflow, workflows) // { // names << pWorkflow->GetName(); // } // } // else if(type == TEMPLATE_TYPE) // { // outPutFile = QString(); // for(int i = 0; i < m_pTemplateTree->GetChildren().count(); ++i) // { // names << m_pTemplateTree->GetChildren().at(i)->GetName(); // } // } // pai::gui::TimeStampLogger::GetInstance().WriteGUIBenchMarkLog("Workflow", true, "Import workflows"); // try // { // //处理选中的工作流文件 // HandleImportedFiles(lstJsonFilePaths,pParentStage,names,type,outPutFile); // } // catch (pai::error::generic_error & e) // { // const char * exceptionMsg = (type == WORKFLOW_TYPE)?g_szImportCaught:g_szImportTemplateCaught; // if (::GetConsoleGUIService()) // { // pai::gui::PaiMessageBox::Critical(NULL, PAI_NAME, QString( // exceptionMsg).append(e.what())); // } // pai::log::Info(_FLF(exceptionMsg + e.what())); // } // pai::gui::TimeStampLogger::GetInstance().WriteGUIBenchMarkLog("Workflow", false, "Import workflows"); } void WorkflowPluginControl::Import(PaiAction *pSender, ImportType type) { // PaiSettings settings; // QStringList filters; // filters << "Workflow files (*.wfl)" << "All Files (*)"; // const QString importPath = (type == WORKFLOW_TYPE) ? LAST_IMPORT_WORKFLOW_PATH : LAST_IMPORT_TEMPLATES_PATH; // //构造文件对话框 // PaiFileDialog importdlg(NULL, g_szWflFilesImp, // settings.value(importPath, QDir::homePath()).toString()); // importdlg.SetNameFilters(filters); // importdlg.SetFileMode(ExistingFiles); // //进入事件循环,等待点ok // if(QDialog::Accepted == importdlg.exec()) // { // QStringList lstWflFiles = importdlg.SelectedFiles(); // if(!lstWflFiles.isEmpty()) // { // QFileInfo fi(lstWflFiles.at(0)); // for(int i = 0; i < lstWflFiles.count(); i++) // { // QFileInfo tmp(lstWflFiles.at(i)); // if(!tmp.exists()) // { // QString fileNotExistMsg = tmp.fileName() + " is not exist."; // PaiMessageBox::Information(NULL, tr("Information"), // fileNotExistMsg, PaiMessageBox::Ok, PaiMessageBox::Ok); // lstWflFiles.removeAt(i); // --i; // } // } // if(lstWflFiles.isEmpty()) // { // return; // } // settings.setValue(importPath, fi.absoluteDir().absolutePath()); // // create temp path to save json files // WorkflowPackage wflPacker; // QString wflTemp = QDir::homePath() + "/" + g_szWorkflowDir; // QString msg; // if(!wflPacker.Exists(wflTemp)) // { // QString msg; // if(!wflPacker.Mkdirs(wflTemp, msg)) // { // PaiMessageBox::Critical(NULL, tr("Error"), msg, // PaiMessageBox::Ok, PaiMessageBox::Ok); // return; // } // } // else if(!wflPacker.IsDirectory(wflTemp)) // { // QString msg; // bool ret = wflPacker.Delete(wflTemp, msg); // if(ret) // { // ret = wflPacker.Mkdirs(wflTemp, msg); // } // if(!ret) // { // PaiMessageBox::Critical(NULL, tr("Error"), msg, // PaiMessageBox::Ok, PaiMessageBox::Ok); // return; // } // } // // unpack workflow files // QStringList lstJsonFiles; // foreach (QString wflpkg, lstWflFiles) // { // //获取去掉后缀的工作流名称 // QString suffix(g_szWfl); // QString wflName = GetWorkflowBaseName(wflpkg,suffix); // QString jsonDirTemp = wflTemp + "/" + QString::number(QDateTime::currentMSecsSinceEpoch()) + wflName; // if(wflPacker.UnZipPackage(wflpkg, jsonDirTemp, msg)) // { // QString jsonFile = jsonDirTemp + "/" + wflName + g_szJson; // QString styleFile = jsonDirTemp + "/" + wflName + g_szStyle + g_szJson; // // list all the json files inside the workflow package // QStringList lstFiles; // if (2 != wflPacker.ListFiles(jsonDirTemp, g_szJson, lstFiles)) // should only contains two json files // { // PaiMessageBox::Critical(NULL, tr("Error"), // tr("It's a invalid workflow file!"),PaiMessageBox::Ok, PaiMessageBox::Ok); // return; // } // // check whether the json file name equals to package file name // // if not then rename the json file // if (!lstFiles.contains(QString(wflName+g_szJson))) // { // foreach (QString name, lstFiles) // { // QString oldPath = jsonDirTemp + "/" + name; // if (name.endsWith(QString(g_szStyle)+QString(g_szJson))) // { // wflPacker.Rename(oldPath, styleFile); // } // else if (name.endsWith(QString(g_szJson))) // { // wflPacker.Rename(oldPath, jsonFile); // } // } // } // lstJsonFiles.append(jsonFile); // } // } // if(!lstJsonFiles.isEmpty()) // { // if(type == WORKFLOW_TYPE) // { // //导入工作流 // PaiObject *pObj = pSender->GetFirstObject(); // ImportWorkflows(pObj ? pObj->GetID() : QUuid(), lstJsonFiles, WORKFLOW_TYPE); // } // else if(type == TEMPLATE_TYPE) // { // //导入模板 // ImportWorkflows(NULL, lstJsonFiles, TEMPLATE_TYPE); // } // // delete temp files and dirs // foreach(QString jsonFile, lstJsonFiles) // { // QFileInfo info(jsonFile); // //获取去掉后缀的工作流名称 // QString suffix(g_szJson); // QString jsonName = GetWorkflowBaseName(jsonFile,suffix); // QString jsonDirTemp = info.absolutePath(); // QString jsonFilePath = jsonDirTemp + "/" + jsonName + g_szJson; // QString styleFilePath = jsonDirTemp + "/" + jsonName + g_szStyle + g_szJson; // QString errorMsg; // wflPacker.Delete(jsonFilePath, errorMsg); // wflPacker.Delete(styleFilePath, errorMsg); // wflPacker.Rmdir(jsonDirTemp); // } // } // } // } } void WorkflowPluginControl::slotImportWorkflows(ImportType type) { // pai::gui::TimeStampLogger::GetInstance().WriteGUIBenchMarkLog("Workflow", true, "Import workflows"); // PaiAction *pAction = NULL; // if(type == WORKFLOW_TYPE) // { // pAction = dynamic_cast< PaiAction* > (sender()); // } // Import(pAction, type); // pai::gui::TimeStampLogger::GetInstance().WriteGUIBenchMarkLog("Workflow", false, "Import workflows"); } QWidget* WorkflowPluginControl::GetParameterEditor() const { //测井项目额外实现,不需要,删除 return NULL; } // WorkflowWidget* WorkflowPluginControl::GetActiveWorkflowView() // { // return SaveHelper::GetActiveWorkflowView(); // } void WorkflowPluginControl::slotRefreshProperties(const QUuid & id) { // QList < QUuid > objIDs; // GetObjectModelService()->GetObjectSelection()->GetSelection(objIDs); // foreach(QUuid objID, objIDs) // { // if(id == objID) // 判断当前要刷新的属性信息当前是否正在显示 // { // pai::objectmodel::PaiObject *pObj = GetObjectModelService()->GetObject(id); // if(pObj) // { // PaiTextEdit *pTEdit = SaveHelper::GetPropertiesTextEdit(); // if(pTEdit) // { // pTEdit->setHtml(pObj->GetProperties()); // } // } // return; // } // } // if(GetObjectModelService()->GetProjectCount() == 0) // { // PaiTextEdit *pTEdit = SaveHelper::GetPropertiesTextEdit(); // if(pTEdit) // { // pTEdit->setHtml(""); // } // } } void WorkflowPluginControl::slotActivateParameterEditor(pai::workflow::CModuleInformation* pInfo, bool IsModuleReadOnly) { if(IsModuleReadOnly) { return; } // PageService* pPageService = GetConsoleGUIService()->GetViewTabService()->GetPageService(GetViewID()); // if(NULL != pPageService) // { // PaiMenuToolBar * pMenuToolBar = pPageService->GetMenuToolBar(); // if(NULL != pMenuToolBar) // { // PaiMenu* pMenu = pMenuToolBar->GetViewsMenu(); // if(NULL != pMenu) // { // QList< QAction * > viewActionList = pMenu->actions(); // foreach(QAction *pViewAction, viewActionList) // { // if(pViewAction->text() == g_szParameters && !pViewAction->isChecked()) // { // if (pInfo && !pInfo->IsBlankModule()) // { // pViewAction->trigger(); // } // break; // } // } // } // } // pPageService->ActiveView(g_szParameters); // } } void WorkflowPluginControl::slotActivateModuleTree(pai::workflow::CModuleInformation* pCurrentModule, bool IsModuleReadOnly) { // if(!IsModuleReadOnly || !m_bUnitTest) // { // PageService* pPageService = GetConsoleGUIService()->GetViewTabService()->GetPageService(GetViewID()); // if(pPageService != NULL) // { // QWidget *pActiveWidget = pPageService->GetCurrentView(g_szB1); // if(pActiveWidget != NULL) // { // QString strExtensionID = pActiveWidget->property(g_szExtensionID).toString(); // if(strExtensionID == g_szTemplates || (strExtensionID == g_szParameters && pCurrentModule == NULL)) // { // if(strExtensionID == g_szParameters) // { // pai::graphics2d::CParameterEditor* pEditor = dynamic_cast< pai::graphics2d::CParameterEditor* > (GetParameterEditor()); // if(pEditor != NULL) // { // pEditor->Clear(); // } // } // pPageService->ActiveView(g_szModules); // } // // ViewExtension *pModuleViewExtension = // dynamic_cast< ViewExtension* > (pPageService->GetExtension(QString(tr(g_szModules)).toStdString())); // if(pModuleViewExtension != NULL) // { // CPaiModuleToolBarView* moduleToolBar = dynamic_cast< CPaiModuleToolBarView* > (pModuleViewExtension->GetView()); // if(moduleToolBar != NULL) // { // if(pCurrentModule && !pCurrentModule->IsBlankModule()) // { // moduleToolBar->GetModuleTree()->selectModules(QString::fromLocal8Bit(pCurrentModule->GetModule()->GetMetaData()->GetName().c_str())); // } // else // { // moduleToolBar->GetModuleTree()->selectModules(""); // } // } // } // } // } // } } void WorkflowPluginControl::ShowMsg(QString strMsg) { // //状态栏提示置空 // if(GetConsoleGUIService() && GetConsoleGUIService()->GetStatusBarService()) // { // GetConsoleGUIService()->GetStatusBarService()->EndProcessMessage(""); // } // ShowMessage(PAI_NAME, strMsg); } void WorkflowPluginControl::slotCloseWorkflowPlugin(QString strAreaName) //syr { // if(strAreaName == g_szA) // { // if(PaiBalloonTipSettings::GetTipSetting("PaiBalloonTipType_HandleSaveAsTemplate") == false) // { // PaiBalloonTip::HideBalloon(); // } // // GetConsoleGUIService()->GetViewTabService()->Unregister(GetViewID().toString().toStdString()); // SaveHelper::SetActiveWorkflowView( NULL); // } } void WorkflowPluginControl::slotActiveParameter() { // WorkflowWidget* pWorkflowWidget = this->GetActiveWorkflowView(); // if(pWorkflowWidget != NULL) // { // assert(GetActiveWorkflow() != NULL); // if(m_pTemplateTree && GetActiveWorkflow()->IsTemplate()) // { // m_pTemplateTree->ActiveItem(GetActiveWorkflow()->GetName()); // } // //设置参数编辑区域的当前工作流 // pai::graphics2d::CParameterEditor* pEditor = dynamic_cast< pai::graphics2d::CParameterEditor* > (GetParameterEditor()); // if(pEditor != NULL) // { // ParameterEditorModel* editorModel = dynamic_cast< ParameterEditorModel * > (pEditor->model()); // if(editorModel != NULL) // { // editorModel->SetCurrentWorkflowID(QUuid(GetActiveWorkflow()->GetID())); // } // } // WorkflowSceneManager* pScene = dynamic_cast(pWorkflowWidget->GetScene()); // if(pScene != NULL && pScene->selectedItems().count() > 0) // { // if(pScene->selectedItems().at(0)->type() == pai::graphics2d::ModuleGraphicsItem::Type) // { // pai::graphics2d::ModuleGraphicsItem *pItem = // dynamic_cast< pai::graphics2d::ModuleGraphicsItem * > (pScene->selectedItems().at(0)); // if(pItem && pItem->GetModule()) // { // pScene->SelectModuleItem(pItem->GetModule()->GetStepID()); // } // else // { // //这里传一个无效的id,只发送moduleSelectedSignal信号 // pScene->SelectModuleItem(-1); // } // } // else // { // if(pScene->selectedItems().at(0)->isSelected()) // { // //这里传一个无效的id,只发送moduleSelectedSignal信号 // pScene->SelectModuleItem(-1); // } // } // } // else // { // // clear parameter editor if no item is selected // if(pEditor != NULL) // { // pEditor->Clear(); // } // //这里传一个无效的id,只发送moduleSelectedSignal信号 // pScene->SelectModuleItem(-1); // } // } } bool WorkflowPluginControl::CloseWorkflow(pai::objectmodel::PaiWorkflowDataModel* pWorkflowObject, QObject* pSender) { // PaiObject *pDataTreeWorkflow = NULL; // PaiSurvey *pSurvey = NULL; // PaiObject *pParentStage = NULL; // if(!pWorkflowObject->IsTemplate()) // { // //获取数据树上虚拟工作流 // pDataTreeWorkflow = GetObjectModelService()->GetObject(pWorkflowObject->GetDBID()); // if(!pDataTreeWorkflow) // { // return true; // } // //获取工作流所在工区 // pSurvey = pDataTreeWorkflow->GetForebear< PaiSurvey > (); // if(pSurvey) // { // //获取工作流管理节点对象指针 // pParentStage = pSurvey->GetMaster(QUuid(PaiWorkflowMaster::GetTypeIDString())); // } // } // if(pWorkflowObject == NULL // || !pWorkflowObject->HasDataModified() // || (!pWorkflowObject->IsTemplate() && !pSurvey)) // { // return true; // } // else // { // // check survey update permission // bool permission = true; // try // { // if(pWorkflowObject->IsTemplate() == false) // { // permission = PaiPermissionChecker::HasPermission(dynamic_cast(pSurvey),PaiAction::PaiPermissionTypes(PaiAction::UPDATE)); // } // } // catch(pai::error::generic_error & e) // { // permission = false; // } // catch(...) // { // permission = false; // } // // do nothing if no permission // if(!permission) // { // return true; // } // } // // if no view extensions on "A" area, return directly // PageService *pPageService = qobject_cast< PageService* > (pSender); // if(pPageService) // { // QList< IExtension* > extensions; // pPageService->GetAreaExtensions(g_szA, extensions); // if(extensions.size() == 0) // { // return true; // } // } // int r = PaiMessageBox::Question(NULL, g_szQuestion, tr(g_szSaveChanges) + pWorkflowObject->GetName() + "?", // PaiMessageBox::Yes | PaiMessageBox::No | PaiMessageBox::Cancel, PaiMessageBox::Yes); // switch(r) // { // case PaiMessageBox::Cancel: // pSender->setProperty(g_szClose, false); // return false; // case PaiMessageBox::No: // { // if(!pWorkflowObject->HasFlag(PaiObject::Loaded)) // { // if(pParentStage) // { // pWorkflowObject->SetModify(false); // pParentStage->RemoveChild(pDataTreeWorkflow, true); // } // } // else // { // pWorkflowObject->ReloadDataModuel(); // } // return true; // } // default: // PaiMessageBox::Yes // { // PaiWorkflowDataModel* pOldActiveWorkflow = GetActiveWorkflow(); // bool bIsCurrentWorkflow = pOldActiveWorkflow == pWorkflowObject ? true : false; // SaveWorkflowCmd *pSaveWorkflowCmd = NULL; // SaveTemplateCmd *pSaveTemplateCmd = NULL; // if(pWorkflowObject->IsTemplate()) // { // pSaveTemplateCmd = new SaveTemplateCmd(m_pTemplateTree, pWorkflowObject); // pSaveTemplateCmd->redo(); // } // else // { // pSaveWorkflowCmd = new SaveWorkflowCmd(m_ViewID, pWorkflowObject); // pSaveWorkflowCmd->redo(); // } // //如果要保存的工作流和当前工作流是同一个,则在保存之后,设置编辑界面的工作流为当前工作流。 // if(bIsCurrentWorkflow && (GetActiveWorkflowView() != NULL)) // { // pOldActiveWorkflow = GetActiveWorkflowView()->GetWorkflow(); // pWorkflowObject = pOldActiveWorkflow; // } // if((pSaveWorkflowCmd && !pSaveWorkflowCmd->GetSaveResult()) || (pSaveTemplateCmd // && !pSaveTemplateCmd->GetSaveResult())) // { // delete pSaveWorkflowCmd; // delete pSaveTemplateCmd; // pSender->setProperty(g_szClose, false); // { // return false; // } // } // break; // } // } // UpdateSaveActions(false, pWorkflowObject); return true; } void WorkflowPluginControl::SetActiveTemplate(pai::CPaiWorkflowTemplateTree *pTemplateTree) { m_pTemplateTree = pTemplateTree; } void WorkflowPluginControl::slotOnClosePluginTabPage(const QString& strPageID) { /* if(strPageID != m_ViewID.toString()) { return; } QList< PaiWorkflowDataModel* > lstModifiedWorkflows = SaveHelper::GetModifiedWorkflows(m_ViewID); int canceledCount = 0; foreach(PaiWorkflowDataModel* pModifiedWorkflow, lstModifiedWorkflows) { canceledCount += CloseWorkflow(pModifiedWorkflow,sender()) == false ? 1:0; } if(canceledCount == 0) { SaveHelper::SetActiveWorkflowView( NULL); // stop handle signal ObjectRefreshed if page was closed disconnect(&pai::objectmodel::PaiObject::m_EventAgent, SIGNAL(ObjectRefreshed(pai::objectmodel::PaiObject*)), 0, 0); } */ } void WorkflowPluginControl::slotCloseWorkflowWidget(const QString& strExtensionID) { /* PageService* pPageService = GetConsoleGUIService()->GetViewTabService()->GetPageService(GetViewID()); if(NULL == pPageService) { return; } ViewExtension* pViewExtension = dynamic_cast< ViewExtension* > (pPageService->GetExtension(strExtensionID.toStdString())); if(NULL == pViewExtension) { return; } WorkflowWidget* pClosingWorkflowWidget = GetFirstChildObject< WorkflowWidget > (pViewExtension->GetView()); if(NULL == pClosingWorkflowWidget) { return; } bool close = CloseWorkflow(pClosingWorkflowWidget->GetWorkflow(), sender()); if(close) { //如果关闭的工作流是活动的工作流,那么把活动工作流置空 if(pClosingWorkflowWidget == GetActiveWorkflowView()) { SaveHelper::SetActiveWorkflowView(NULL); } //关闭前清理参数面板 CParameterEditor* pEditor = dynamic_cast(GetParameterEditor()); if (pEditor != NULL) { pEditor->Clear(); } } */ } void WorkflowPluginControl::slotOnWorkflowPropertyChanged(pai::objectmodel::PaiObject* pObj, const QString & strPropertyName, const QVariant & /*strNewPropertyValue*/) { // QString name = pObj->GetName(); // if(pObj->GetTypeID() == GetClassID_WorkflowDataModel()) // { // ::GetObjectEvent().OnUpdateWorkflowWindow(pObj); // } } void WorkflowPluginControl::UpdateSaveActions(bool updateOrClose, pai::objectmodel::PaiObject* pObj) { /* PageService* pPageService = GetConsoleGUIService()->GetViewTabService()->GetPageService(GetViewID()); if(pPageService == NULL || pObj == NULL) { return; } QAction* pAction = pPageService->GetAction(tr(g_szSave)); QAction* pSaveAllAction = pPageService->GetAction(tr(g_szSaveAll)); if(pAction != NULL && pSaveAllAction != NULL) { bool permission = true; try { //普通工作流需要获取权限,模板目前先按所有人都能修改处理 PaiWorkflowDataModel *pWorkflowDataModel = dynamic_cast< PaiWorkflowDataModel * > (pObj); //数据树上的虚拟节点 PaiObject *pDataTreeWorkflow = GetObjectModelService()->GetObject(pObj->GetDBID()); if(!(pWorkflowDataModel->IsTemplate()) && pDataTreeWorkflow) { permission = pDataTreeWorkflow->GetForebear< PaiSurvey > () && PaiPermissionChecker::HasPermission(pDataTreeWorkflow,PaiAction::PaiPermissionTypes(PaiAction::UPDATE)); } else { permission = true; } } catch(pai::error::generic_error & e) { permission = false; } catch(...) { permission = false; } //如果是pObj工作流的标志更新(updateOrClose应该为true),且pObj是当前工作流 if(updateOrClose) { if(pObj->HasDataModified()) { //此时工作流有数据更新,则Save和SaveAll都应该可用 pAction->setEnabled(permission); pSaveAllAction->setEnabled(permission); } else { //此时工作流没有数据更新,则Save应该不可用 pAction->setEnabled(false); //查询所有打开的工作流,如果都没有数据更新SaveAll应该不可用 QList< PaiWorkflowDataModel* > lstModifiedWorkflows = SaveHelper::GetModifiedWorkflows(m_ViewID); pSaveAllAction->setEnabled(lstModifiedWorkflows.size()); } } else { //以下是关闭某个工作流或者因删除而发生关闭某个工作流时(updateOrClose应该为false), 用来更新SaveAll的可用状态. //若被关闭的工作流有数据更新,则查询所有打开的工作流,如果只有一个有数据更新即为要被关闭的工作流,则SaveAll应该不可用; //此时被关闭的工作流如果没有数据更新,则查询所有打开的工作流,如果都没有数据更新SaveAll应该不可用; QList< PaiWorkflowDataModel* > lstModifiedWorkflows = SaveHelper::GetModifiedWorkflows(m_ViewID); int modified = pObj->HasDataModified() == true ? (lstModifiedWorkflows.size() - 1) : lstModifiedWorkflows.size(); pSaveAllAction->setEnabled(modified); } } */ } void WorkflowPluginControl::CreateTempDir(const QString &tempPath) { // WorkflowPackage wflPacker; // //如果临时文件加不存在 // if(!wflPacker.Exists(tempPath)) // { // //创建临时文件夹 // QString msg; // if(!wflPacker.Mkdirs(tempPath, msg)) // { // PaiMessageBox::Critical(NULL, tr("Error"), msg, PaiMessageBox::Ok, // PaiMessageBox::Ok); // return; // } // } // else if(!wflPacker.IsDirectory(tempPath))//如果存在同名的临时文件 // { // //删除同名临时文件 // QString msg; // bool ret = wflPacker.Delete(tempPath, msg); // if(ret) // { // //创建临时文件夹 // ret = wflPacker.Mkdirs(tempPath, msg); // } // if(!ret) // { // PaiMessageBox::Critical(NULL, tr("Error"), msg, PaiMessageBox::Ok, // PaiMessageBox::Ok); // return; // } // } } void WorkflowPluginControl::DeleteTempDir(const QString &tempPath) { // WorkflowPackage wflPacker; // //如果临时文件夹存在 // if(wflPacker.Exists(tempPath)) // { // //删除临时文件夹 // if(!wflPacker.Rmdir(tempPath)) // { // QString msg("Failed to delete temporary folder!"); // // PaiMessageBox::Critical(NULL, tr("Error"), msg, PaiMessageBox::Ok, // // PaiMessageBox::Ok); // return; // } // } } void WorkflowPluginControl::CheckExportedWorkflows(QList &workflowList, const QString &targetPath) { // WorkflowPackage wflPacker; // PaiMessageBox::StandardButton resultButton = PaiMessageBox::Yes; // QList exportedWorkflows = workflowList; // //遍历被导出的工作流 // foreach(PaiObject* pSrcObject, exportedWorkflows) // { // //目标工作流的绝对路径 // QString strTargetWflFilePath = targetPath + "/" + pSrcObject->GetName() + g_szWfl; // QFileInfo fi(strTargetWflFilePath); // //如果已经存在 // if (fi.exists()) // { // if(resultButton != PaiMessageBox::YesToAll) // { // resultButton = PaiMessageBox::Question(NULL, tr(g_szQuestion), // tr(g_szOverOldOne).arg(pSrcObject->GetName() + g_szWfl), // PaiMessageBox::YesToAll | PaiMessageBox::Yes | PaiMessageBox::Cancel, PaiMessageBox::Cancel); // } // if(resultButton == PaiMessageBox::Yes || resultButton == PaiMessageBox::YesToAll) // { // //删除当前存在的.wfl文件 // DeleteFile(strTargetWflFilePath); // } // if(resultButton == PaiMessageBox::Cancel) // { // //将当前工作流从导出列表中删除 // workflowList.removeOne(pSrcObject); // continue; // } // } // } } void WorkflowPluginControl::OpenExportWorkflowsDialog(QString &targetPath, ImportType type) { // PaiSettings settings; // const QString lastExportPath = (type == WORKFLOW_TYPE) ? LAST_EXPORT_WORKFLOW_PATH : LAST_EXPORT_TEMPLATES_PATH; // //导出对话框初始化 // PaiFileDialog exportdlg(::GetWorkflowConsole()); // //exportdlg.SetLastDirSettingKey("1111111111111111"); // exportdlg.SetFileMode(Directory); // exportdlg.SetAcceptMode(AcceptSave); // exportdlg.SetDirectory(settings.value(lastExportPath, QDir::homePath()).toString()); // exportdlg.setWindowTitle(tr(g_szExportToDot)); // //导出对话框事件循环 // if(QDialog::Accepted == exportdlg.exec()) // { // QStringList selectedFiles = exportdlg.SelectedFiles(); // if(!selectedFiles.isEmpty()) // { // targetPath = selectedFiles.first(); // settings.setValue(lastExportPath, targetPath); // } // } } void WorkflowPluginControl::SaveExportedWorkflows(QList &workflowList) { // PaiMessageBox::StandardButton resultButton = PaiMessageBox::Yes; // //获取所有未保存的工作流 // QList lstModifiedWorkflows = SaveHelper::GetModifiedWorkflows(m_ViewID); // //遍历导出列表 // foreach(PaiObject *pObj,workflowList) // { // PaiWorkflowDataModel*pTmpWF = dynamic_cast(pObj); // if(pTmpWF) // { // //遍历被修改的工作流 // foreach(PaiWorkflowDataModel* pModifiedWorkflow, lstModifiedWorkflows) // { // if(pModifiedWorkflow->GetDBID() == pTmpWF->GetDBID()) // { // if(resultButton != PaiMessageBox::YesToAll) // { // resultButton = PaiMessageBox::Question(NULL, tr(g_szQuestion), // tr(g_szSaveChanges) + pTmpWF->GetName() + "?", // PaiMessageBox::YesToAll | PaiMessageBox::Yes | PaiMessageBox::Cancel, PaiMessageBox::Cancel); // } // if (resultButton == PaiMessageBox::Cancel) // { // break; // } // //保存工作流 // SaveHelper::SaveWorkflow(pModifiedWorkflow, pModifiedWorkflow->IsTemplate()); // break; // } // } // if(!pTmpWF->IsTemplate()) // { // pTmpWF->ReloadDataModuel(); // } // } // } } bool WorkflowPluginControl::DeleteFile(const QString& filePath) { // WorkflowPackage wflPacker; // if(wflPacker.Exists(filePath)) // { // QString errorMsg; // wflPacker.Delete(filePath, errorMsg); // if(!errorMsg.isEmpty()) // { // PaiMessageBox::Critical(NULL, tr("Error"),errorMsg, // PaiMessageBox::Ok, PaiMessageBox::Ok); // return false; // } // } return true; } void WorkflowPluginControl::slotExportWorkflows(ImportType type) { // PaiAction* pAction = NULL; // QList< PaiObject* > objectList; // objectList.clear(); // //获取被导出的工作流或者模板 // if(type == WORKFLOW_TYPE) // { // pAction = dynamic_cast< PaiAction* > (sender()); // if(!pAction) // { // return; // } // objectList = pAction->GetObjects(); // } // else if(type == TEMPLATE_TYPE) // { // objectList = m_pTemplateTree->GetSelectedChildren(); // } // //处理不同项目或不同工区下的同名工作流同时导出情况 // for(int i = 0; i < objectList.count() - 1; ++i) // { // for(int j = i + 1; j < objectList.count(); ++j) // { // if(objectList.at(i)->GetName() == objectList.at(j)->GetName()) // { // QString msg("Can't export the workflow of the same name !"); // PaiMessageBox::Critical(::GetWorkflowConsole(), tr("Error"), msg, PaiMessageBox::Ok, // PaiMessageBox::Ok); // return; // } // } // } // pai::gui::TimeStampLogger::GetInstance().WriteGUIBenchMarkLog("Workflow", true, "Export workflows"); // //保存导出链表中未保存的工作流 // //SaveExportedWorkflows(objectList); // //如果被导出列表为空直接返回 // if(objectList.empty()) // { // return; // } // QString strTargetDirPath(""); // //打开导出工作流对话框 // OpenExportWorkflowsDialog(strTargetDirPath,type); // if(strTargetDirPath.isEmpty()) // { // return; // } // //检查是否目标路径下已经存在当前将被导出的工作流 // // CheckExportedWorkflows(objectList,strTargetDirPath); // //如果被导出列表为空直接返回 // if(objectList.empty()) // { // return; // } // WorkflowPackage wflPacker; // int successCount = 0; // int failCount = 0; // QString saveStrings(""); // //存放工作流文件的临时名称和目标名称 // QMap wflNameMap; // //工作流临时文件夹 // QList wflTmpDir; // foreach(PaiObject* pSrcObject, objectList) // { // // create temp path to save json files // QString workflowTempName = QString::number(QDateTime::currentMSecsSinceEpoch()); // QString workflowTempPath = QDir::homePath() + "/" + g_szWorkflowDir + "/" + workflowTempName; // CreateTempDir(workflowTempPath); // wflTmpDir << workflowTempPath; // //临时目录下的工作流*.json和*_style.json文件名 // QString strTargetJsonFilePath = workflowTempPath + "/" + pSrcObject->GetName() + g_szJson; // QString strTargetStyleFilePath= workflowTempPath + "/" + pSrcObject->GetName() + g_szStyle + g_szJson; // //将要产生的工作流文件*.wfl // QString strTargetWflName = workflowTempName + g_szWfl; // //将要产生的工作流文件的绝对路径 // QString strTargetWflFilePath = strTargetDirPath + "/" + strTargetWflName; // //当前工作流 // pai::objectmodel::PaiWorkflowDataModel* pSrcWorkflow = dynamic_cast(pSrcObject); // if(!pSrcWorkflow) // { // continue; // } // //在临时文件夹下生成*.json和*_style.json文件 // bool retSave = pSrcWorkflow->Save(strTargetJsonFilePath.toStdString(),true); // QFileInfo jsonFileInfo(strTargetJsonFilePath); // QFileInfo styleFileInfo(strTargetStyleFilePath); // QString msg; // //如果*.json和*_style.json文件在临时目录下存在 // if(jsonFileInfo.exists() && styleFileInfo.exists()) // { // QStringList srcFiles; // srcFiles.append(strTargetJsonFilePath); // srcFiles.append(strTargetStyleFilePath); // //生成工作流文件(*.wfl) // // if (!wflPacker.ZipPackage(strTargetDirPath, strTargetWflName, srcFiles, msg)) // // { // // retSave = false; // // } // // else // // { // // wflNameMap[strTargetDirPath +"/" + strTargetWflName]= strTargetDirPath + "/" + pSrcObject->GetName()+g_szWfl; // // } // } // else // { // retSave = false; // } // if (retSave == true) // { // //记录导出成功的次数和信息 // const char *exportPath = (type == WORKFLOW_TYPE)?g_szExportPath:g_szExportTemplatePath; // ++successCount; // // saveStrings.append(tr(exportPath).arg(pSrcObject->GetName(), strTargetDirPath + "/" + pSrcObject->GetName() + g_szWfl)); // } // else // { // //记录导出失败的信息和次数 // const char *exportFailedPath = (type == WORKFLOW_TYPE)?g_szExportFailed:g_szExportTemplatetFailed; // ++failCount; // // saveStrings.append(tr(exportFailedPath).arg(pSrcObject->GetName(), strTargetDirPath + "/" + pSrcObject->GetName() + g_szWfl)); // } // } // //重命名压缩成功的工作流文件 // PaiMessageBox::StandardButton resultButton = PaiMessageBox::Yes; // QMap::const_iterator it = wflNameMap.constBegin(); // while (it != wflNameMap.constEnd()) // { // QFile wflTmpFile(it.key()); // QFile wflTargetFile(it.value()); // if(wflTargetFile.exists()) // { // if(resultButton != PaiMessageBox::YesToAll) // { // resultButton = PaiMessageBox::Question(NULL, tr(g_szQuestion), // tr(g_szOverOldOne).arg(it.value()), // PaiMessageBox::YesToAll | PaiMessageBox::Yes | PaiMessageBox::Cancel, PaiMessageBox::Cancel); // } // if(resultButton == PaiMessageBox::Yes || resultButton == PaiMessageBox::YesToAll) // { // //删除当前存在的.wfl文件 // DeleteFile(it.value()); // wflTmpFile.rename(it.value()); // } // if(resultButton == PaiMessageBox::Cancel) // { // DeleteFile(it.key()); // } // } // else // { // wflTmpFile.rename(it.value()); // } // ++it; // } // foreach(QString wflDir,wflTmpDir) // { // QDir tmpDir(wflDir); // if(tmpDir.exists()) // { // //删除工作流导出时产生的临时文件夹 // DeleteTempDir(wflDir); // } // } // if(::GetConsoleGUIService()) // { // //显示导出工作流成功的信息和导出失败的信息 // const char *title = (type == WORKFLOW_TYPE) ? g_szWorkflowExpor : g_szTemplateExpor; // const char *allSucceedMsg = (type == WORKFLOW_TYPE) ? g_szExportAll : g_szExportAllTemplates; // const char *msg = (type == WORKFLOW_TYPE) ? g_szExportSuccFai : g_szExportSuccFaiTemplate; // PaiMessageBox // box(PaiMessageBox::Icon_Information, tr(title), // failCount == 0 ? tr(allSucceedMsg).arg(successCount) : tr(msg).arg(successCount).arg(failCount), // saveStrings, PaiMessageBox::Ok, NULL); // box.exec(); // } // pai::gui::TimeStampLogger::GetInstance().WriteGUIBenchMarkLog("Workflow", false, "Export workflows"); } void WorkflowPluginControl::slotDeleteItem() { // PaiAction* pAction = dynamic_cast< PaiAction* > (sender()); // if(!pAction) // { // return; // } // pai::gui::TimeStampLogger::GetInstance().WriteGUIBenchMarkLog("Workflow", true, "Delete workflow"); // QList< PaiObject* > objs = pAction->GetObjects(); // if(!objs.empty()) // { // QStringList names; // foreach(PaiObject *pObj, objs) // { // names.append(pObj->GetName()); // } // if(PaiMessageBox::Warning(NULL, tr(g_szWarning), // tr(g_szWantDelete).arg(names.join(" ")), PaiMessageBox::Yes | PaiMessageBox::No, // PaiMessageBox::No) == PaiMessageBox::Yes) // { // foreach(PaiObject *pObject, objs) // { // DeleteWorkflowCmd deleteWorkflowCmd(pObject); // deleteWorkflowCmd.redo(); // } // } // } // pai::gui::TimeStampLogger::GetInstance().WriteGUIBenchMarkLog("Workflow", false, "Delete workflow"); } void WorkflowPluginControl::OpenWorkflowView(long long dbid) { // //获取工作流插件 // pai::IPlugin* pWorkflowPlugin = ::GetConsoleGUIService()->GetPluginManager()->GetPlugin(m_ViewID); // if(!pWorkflowPlugin) // { // return; // } // pai::CPaiWorkflowPlugin* pWorkflowView = dynamic_cast< pai::CPaiWorkflowPlugin* > (pWorkflowPlugin); // if(!pWorkflowView) // { // return; // } // //获取数据树上工作流 // PaiObject *pDataTreeWorkflow = GetObjectModelService()->GetObject(dbid); // if(!pDataTreeWorkflow) // { // return; // } // //dbid>0 说明是已经保存数据库的工作流 // if(dbid > 0) // { // //两种情况,1.已经打开的 2.没有打开的 // if(GetObjectModelService()->GetObjectLockManager()->IsObjectLocked(dbid,false)) // { // pWorkflowView->Show(pDataTreeWorkflow); // } // else // { // PaiWorkflowDataModel *pWorkflow = new PaiWorkflowDataModel(); // //从数据库加载工作流 // pWorkflow->Load(dbid); // pWorkflow->SetID(pDataTreeWorkflow->GetID()); // //可以发送事件 // pWorkflow->SetEventEnabled(true); // pWorkflow->SetModify(false); // bool bOpened = true; // //将合理的工作流打开,不合理的给出提示。(老版本也可以打开) // //把要显示的模块名称组织成html格式的列表 // QStringList modulesNames = pWorkflow->GetMissingModuleNames(); // if (!modulesNames.isEmpty()) // { // QString missingModuleName =QString("
    "); // foreach(QString str,modulesNames) // { // missingModuleName += (QString("
  • ")+str+QString("
  • \n")); // } // //移除最后一个换行符 // if(missingModuleName.endsWith("\n")) // { // missingModuleName.remove(missingModuleName.size()-1,1); // } // missingModuleName += QString("
"); // //显示的消息 // QString msg = QString("The workflow contains one or more modules that do not exist in current system. " // "Module names:%1").arg(missingModuleName); // PaiMessageBox::Warning(NULL, tr("Warning"), msg, PaiMessageBox::Ok); // } // //检查模块版本 // QString invalidModules; // if (pWorkflow->IsValid(invalidModules) == false) // { // QString msg = QString("The workflow contains different version of modules.\n") + invalidModules; // PaiMessageBox::Warning(NULL, tr("Warning"), msg, PaiMessageBox::Ok); // } // if(NULL == GetConsoleGUIService()->GetViewTabService()->GetExtension(m_ViewID.toString().toStdString())) // { // //如果没有打开View,则先打开View // bOpened = pWorkflowView->OpenView(); // } // if(bOpened) // { // pWorkflowView->Show(pWorkflow); // } // } // } // else // { // pWorkflowView->Show(pDataTreeWorkflow); // } } void WorkflowPluginControl::slotEditItem() { // PaiAction* pAction = dynamic_cast< PaiAction* > (sender()); // if(!pAction) // { // return; // } // pai::gui::TimeStampLogger::GetInstance().WriteGUIBenchMarkLog("Workflow", true, "Edit workflow"); // QList< PaiObject* > objs; // QList wfIDs = pAction->data().toList(); // foreach(QVariant wfID,wfIDs) // { // bool ok = false; // long long dbid = wfID.toLongLong(&ok); // if(ok) // { // OpenWorkflowView(dbid); // } // } // pai::gui::TimeStampLogger::GetInstance().WriteGUIBenchMarkLog("Workflow", false, "Edit workflow"); } void WorkflowPluginControl::slotOnActiveCurrentWorkflow(const QString& strExtensionID) { // ViewExtension *pViewExtension = dynamic_cast< ViewExtension * > (sender()); // if(pViewExtension != NULL) // { // WorkflowWidget* pWorkflowWidget = // GetFirstChildWidget< WorkflowWidget > (dynamic_cast< QWidget* > (pViewExtension->GetView())); // if(pWorkflowWidget != NULL) // { // if(GetActiveWorkflow() == pWorkflowWidget->GetWorkflow()) // { // return; // } // SaveHelper::SetActiveWorkflowView(pWorkflowWidget); // } // } // slotActiveParameter(); // QUuid currentWorkflowID(strExtensionID); // if(!currentWorkflowID.isNull()) // { // PageService* pPageService = GetConsoleGUIService()->GetViewTabService()->GetPageService(GetViewID()); // if(pPageService != NULL) // { // HandleCurrentWorkEnvironment(HandleEnvironment_BeforeUnselect); // // QList< IExtension* > lstWorkflowExtensions; // pPageService->GetAreaExtensions(g_szA, lstWorkflowExtensions); // foreach(IExtension* pExtension,lstWorkflowExtensions) // { // QUuid otherWorkflowID(QString::fromStdString(pExtension->GetStringID())); // if(!otherWorkflowID.isNull()) // { // GetObjectModelService()->GetObjectSelection()->Unselect(otherWorkflowID); // } // } // if(GetActiveWorkflow()) // { // pPageService->SetFullPathName(GetActiveWorkflow()->GetFullPathName()); // } // } // // to fix 27548, 如果是工作流模板对象,则不试图在数据树上选中节点 // if(!GetActiveWorkflow()->IsTemplate()) // { // GetObjectModelService()->GetObjectSelection()->Select(currentWorkflowID, true); // } // // HandleCurrentWorkEnvironment(HandleEnvironment_AfterSelect); // } } void WorkflowPluginControl::HandleCurrentWorkEnvironment(HandleEnvironmentType type) { // PageService* pPageService = GetConsoleGUIService()->GetViewTabService()->GetPageService(GetViewID()); // if(pPageService != NULL) // { // switch(type) // { // case HandleEnvironment_BeforeUnselect: // { // //获得当前工作流数据模型,因此本函数需要在设置新的工作流数据模型前使用 // PaiWorkflowDataModel* pCurrentActiveWorkflow = GetActiveWorkflow(); // if(pCurrentActiveWorkflow != NULL) // { // ViewExtension *pViewExtension = // dynamic_cast< ViewExtension* > (pPageService->GetExtension(pCurrentActiveWorkflow->GetID().toString().toStdString())); // if(pViewExtension != NULL) // { // //当前工作流对应的WorkflowWidget,即前一个WorkflowWidget. // WorkflowWidget *pLastWorkflowWidget = // GetFirstChildWidget< WorkflowWidget > (dynamic_cast< QWidget* > (pViewExtension->GetView())); // if(pLastWorkflowWidget != NULL) // { // //清空map // pLastWorkflowWidget->ClearSelectedExtensions(); // // //为前一个WorkflowWidget保存B类页选择的ExtensionID // //保存选择的ExtensionID. // QWidget *pActiveWidget = pPageService->GetCurrentView(g_szB1); // if(pActiveWidget != NULL) // { // QString strExtensionID = pActiveWidget->property(g_szExtensionID).toString(); // pLastWorkflowWidget->SetSelectedExtension(g_szB1, strExtensionID); // } // // pActiveWidget = pPageService->GetCurrentView(g_szB2); // if(pActiveWidget != NULL) // { // QString strExtensionID = pActiveWidget->property(g_szExtensionID).toString(); // pLastWorkflowWidget->SetSelectedExtension(g_szB2, strExtensionID); // } // // //这里还要设置一下菜单项的可用情况 // WorkflowSceneManager* pScene = dynamic_cast(pLastWorkflowWidget->GetScene()); // if(pScene != NULL) // { // pScene->RestoreActions(false); // } // } // } // } // } // break; // // case HandleEnvironment_AfterSelect: // { // //获得当前工作流数据模型,因此本函数需要在设置新的工作流数据模型前使用 // WorkflowWidget *pActiveWorkflowWidget = GetActiveWorkflowView(); // // if(pActiveWorkflowWidget != NULL)//如果用户拖拽了一个别的页面到工作流的A区且激活该页则可能为空 // { // //这里还要设置一下菜单项的可用情况 // WorkflowSceneManager* pScene = dynamic_cast(pActiveWorkflowWidget->GetScene()); // if(pScene != NULL) // { // //if all command undo redo ok, this line can be opened. // m_pUndoGroup->setActiveStack(pScene->GetUndoStack()); // pScene->RestoreActions(true); // pScene->UpdateActions(); // } // //在切换页签时,更新工作流插件的工具栏 // UpdateSaveActions(true,GetActiveWorkflow()); // // //读取当前WorkflowWidget的B类页选择的ExtensionID, 执行ActiveView。 // QMap< QString, QString > selectedMap; // pActiveWorkflowWidget->GetSelectedExtensions(selectedMap); // // QMapIterator< QString, QString > i(selectedMap); // while(i.hasNext()) // { // i.next(); // pPageService->ActiveView(i.value().toStdString()); // } // } // } // break; // // default: // break; // } // } } void WorkflowPluginControl::slotPasteItems() { // WorkflowWidget *wfView = GetActiveWorkflowView(); // if(wfView == NULL) // { // return; // } // WorkflowSceneManager* wfScene = dynamic_cast(wfView->GetScene()); // if(wfScene != NULL) // { // wfScene->slotPaste(); // } } void WorkflowPluginControl::slotCutItems() { // WorkflowWidget *wfView = GetActiveWorkflowView(); // if(wfView == NULL) // { // return; // } // WorkflowSceneManager* wfScene = dynamic_cast(wfView->GetScene()); // if(wfScene != NULL) // { // wfScene->slotCutItem(); // } } void WorkflowPluginControl::slotCopyItems() { // WorkflowWidget *wfView = GetActiveWorkflowView(); // if(wfView == NULL) // { // return; // } // WorkflowSceneManager* wfScene = dynamic_cast(wfView->GetScene()); // if(wfScene != NULL) // { // wfScene->slotCopy(); // } } void WorkflowPluginControl::slotOnWorkflowRefreshed(pai::objectmodel::PaiObject* pObj) { // PaiWorkflowDataModel *pWorkflowModel = dynamic_cast< PaiWorkflowDataModel* > (pObj); // if(pWorkflowModel) // { // //重新加载一次,跟数据库同步,新建工作流刷新不做任何事情 // if(pWorkflowModel->GetDBID() > 0) // { // if(GetObjectModelService()->GetObjectLockManager()->IsObjectLocked(pWorkflowModel->GetDBID(),false)) // { // // 被刷新工组流为当前打开工作流时,需要刷新显示 // if(GetActiveWorkflow() && GetActiveWorkflow()->GetDBID() == pWorkflowModel->GetDBID()) // { // //清理模块参数编辑面板 // CParameterEditor* pEditor = dynamic_cast(GetParameterEditor()); // if (pEditor != NULL) // { // pEditor->Clear(); // } // //重新设置场景 // SaveHelper::GetActiveWorkflowView()->SetWorkflow(pWorkflowModel, false); // } // else // { // PageService* pPageService = GetConsoleGUIService()->GetViewTabService()->GetPageService(m_ViewID); // if(pPageService != NULL) // { // QWidget* pWorkflowTabs = pPageService->GetWidgetView("A"); // if(pWorkflowTabs != NULL) // { // QList< WorkflowWidget* > lstWorkflowWidgets = pWorkflowTabs->findChildren< WorkflowWidget* > (); // foreach(WorkflowWidget* pWorkflowWidget, lstWorkflowWidgets) // { // if(pWorkflowWidget) // { // PaiWorkflowDataModel* pWorkflow = pWorkflowWidget->GetWorkflow(); // if(pWorkflow->GetDBID() == pWorkflowModel->GetDBID()) // { // pWorkflowWidget->SetWorkflow(pWorkflowModel, false); // } // } // } // } // } // } // } // } // } } pai::objectmodel::PaiWorkflowDataModel* WorkflowPluginControl::GetActiveWorkflow() { // if(GetActiveWorkflowView()) // { return ::GetWorkflowConsole()->GetWorkflowWidget()->GetWorkflow();//->GetWorkflow(); // } // return NULL; } QString WorkflowPluginControl::GetWorkflowBaseName(const QString &workflowFileName, const QString &suffix) { QFileInfo fi(workflowFileName); QString workflowFile = fi.fileName(); //找到后缀开始的位置,找不到返回-1 int pos = workflowFile.lastIndexOf(suffix); if(pos >= 0) { return workflowFile.remove(pos,suffix.size()); } else { return workflowFile; } } QList WorkflowPluginControl::GetOpenedWorkflows() { QList< PaiWorkflowDataModel* > lstWorkflows; // PageService* pPageService = GetConsoleGUIService()->GetViewTabService()->GetPageService(m_ViewID); // if(pPageService != NULL) // { // QWidget* pWorkflowTabs = pPageService->GetWidgetView("A"); // if(pWorkflowTabs != NULL) // { // QList< WorkflowWidget* > lstWorkflowWidgets = pWorkflowTabs->findChildren< WorkflowWidget* > (); // foreach(WorkflowWidget* pWorkflowWidget, lstWorkflowWidgets) // { // PaiWorkflowDataModel* pWorkflow = pWorkflowWidget->GetWorkflow(); // if (pWorkflow) // { // lstWorkflows.prepend(pWorkflow); // } // } // } // } return lstWorkflows; } void WorkflowPluginControl::SlotRunWelllogModule() { //slotSaveAsTemplate(); CWellLogWorkflowDataModel * pWorkflowDataModel =dynamic_cast( ::GetWorkflowConsole()->GetWorkflowWidget()->GetWorkflow() ); if (pWorkflowDataModel != NULL) { // //检查当前井次是否存在,因为有可能被删除 // CBaseObject* subtree=CPaiObjectHelper::GetSubtree(::GetProject(),pWorkflowDataModel->GetCurrentWellRoundPath()); // /*if(!subtree)//说明该井次已经被删除,需要重新选择当前井次 // { // QMessageBox::warning(NULL, "提示","如下井次不存在,请检查数据:"+pWorkflowDataModel->GetCurrentWellRoundPath()); // return; // }*/ // m_pWellLogWorkflowRunner->GetRunTimeContext()->SetCurrentWellRoundPath(pWorkflowDataModel->GetCurrentWellRoundPath()); // AppendConsole(pai::log::PAI_INFO,"开始执行...."); m_pWellLogWorkflowRunner->RunWorkFlow(pWorkflowDataModel); } } void WorkflowPluginControl::SlotRunWelllogModule(float sdep,float edep) { //slotSaveAsTemplate(); CWellLogWorkflowDataModel * pWorkflowDataModel =dynamic_cast( ::GetWorkflowConsole()->GetWorkflowWidget()->GetWorkflow() ); if (pWorkflowDataModel != NULL) { // //检查当前井次是否存在,因为有可能被删除 // CBaseObject* subtree=CPaiObjectHelper::GetSubtree(::GetProject(),pWorkflowDataModel->GetCurrentWellRoundPath()); // /*if(!subtree)//说明该井次已经被删除,需要重新选择当前井次 // { // QMessageBox::warning(NULL, "提示","如下井次不存在,请检查数据:"+pWorkflowDataModel->GetCurrentWellRoundPath()); // return; // }*/ m_pWellLogWorkflowRunner->GetRunTimeContext()->SetCurrentWellRoundPath(pWorkflowDataModel->GetCurrentWellRoundPath()); // AppendConsole(pai::log::PAI_INFO,"开始执行...."); m_pWellLogWorkflowRunner->RunWorkFlow(pWorkflowDataModel,sdep,edep); } } void WorkflowPluginControl::DisplayCaculatedCurveOnWellSectionWindow(Qt::CheckState checkstate) { // //判断是否已经显示曲线,如果已经显示,就清除 // CVecWindow *pOSGWindow = dynamic_cast(::GetWorkflowConsole()->GetVSplitter()->widget(0)); // int wellcount=pOSGWindow->GetSceneManager()->GetDocument()->GetChildrenCount(); // PaiObject* pWellTrack = pOSGWindow->GetSceneManager()->GetDocument()->GetChildByType( GetOSGWellTrackID()); // CWellLogWorkflowDataModel * pWorkflowDataModel =dynamic_cast( ::GetWorkflowConsole()->GetWorkflowWidget()->GetWorkflow() ); // CBaseObject* wellTrack = dynamic_cast(pWellTrack); // //将曲线上树,通过模板刷新数据 // if (checkstate ==Qt::Checked) // { // std::map logCurveContainer = m_pWellLogWorkflowRunner->GetRunTimeContext()->GetLogCurveContainer(); // std::map::iterator it = logCurveContainer.begin(); // for (;it != logCurveContainer.end();it++) // { // pai::datamodel::CObjWellLog* pCurve = it->second; // if(pCurve->GetSlfFileName()!="") // { // AddCurvesToDataTree(pCurve); // continue; // } // if(pCurve->GetProperty().size()>0){//有效数据才上树TODO 加入多维数据判断 // //检查数据是否是有效数据 TODO 删掉没有上树的数据,保证内存不泄露 // bool validatecurve=false; // for(int sampleindex=0;sampleindexGetProperty().size();sampleindex++){ // float samplevalue=pCurve->GetData(sampleindex); // if(samplevalue!=samplevalue) continue;//NaN // if(samplevalue > std::numeric_limits::max()) //INF // continue; // if(samplevalue <- std::numeric_limits::max()) //-INF // continue; // if(samplevalue>=999999) continue;//诡异的极大值 // if(samplevalue<=-999999) continue;//诡异的极小值 // validatecurve=true; // break; // } // if (!validatecurve){ // AppendConsole(pai::log::PAI_INFO,"发现无效数据,抛弃:"+pCurve->GetName()); // QApplication::processEvents(); // continue; // } // AppendConsole(pai::log::PAI_INFO," 上树开始:"+pCurve->GetName()); // AddCurvesToDataTree(pCurve); // QApplication::processEvents(); // if(!pWorkflowDataModel->IsSingleModuleMode()){//只有组合模块才进行绘制,单方法由模板进行刷新 // pCurve->SetCheckState( checkstate ); // AppendConsole(pai::log::PAI_INFO," 开始绘制:"+pCurve->GetName()); // CVecDisplayObjectCommand::ClickObjectCommand( pCurve, pOSGWindow ); // QApplication::processEvents(); // } // } // } // if(pWorkflowDataModel->IsSingleModuleMode()){ // RefreshMapArea(pOSGWindow); // } // //TODO 计算范围内刷新 // } } void WorkflowPluginControl::AddCurvesToDataTree(CObjWellLog * pWelllogCurve) { // CObjWelllogRound * m_pParent = m_pWellLogWorkflowRunner->GetRunTimeContext()->GetCurrentWellRound(); // if(m_pParent) // { // //增加深度道 // //首先判断树上有没有重复节点 // CObjWellLog *existwelllog=m_pParent->GetWellLogByName(pWelllogCurve->GetName()); // if (existwelllog) // { // if (existwelllog == pWelllogCurve)//基本上都是输入曲线 // { // return; // } // else // { // QAction * pAction = ::GetGlobalCommand().GetAction(QUuid(GetViewCmdID_SwitchMode()),true); // if (pAction->isChecked())//非覆盖模式 // { // pWelllogCurve->SetName(m_pParent->GetNextChildName(existwelllog->GetName())); // //将计算结果挂到数据树上 // m_pParent->AddChild(pWelllogCurve); // CObjProject::AddIDMap( pWelllogCurve->GetID(),pWelllogCurve ); // } // else//覆盖模式,内容覆盖,而该曲线还在树上 // { // //如果非slf文件,则直接把数据拿过来,否则重新从slf加载即可 // if(existwelllog->GetSlfFileName()=="") // { // existwelllog->SetProperty(&pWelllogCurve->GetMD(),&pWelllogCurve->GetProperty()); // //TODO 删掉pWelllogCurve // } // else // { // existwelllog->isLoad=false; // existwelllog->LoadFromSLF();//更新数据 // } // } // // if (QMessageBox::Yes == QMessageBox::information(NULL,"输出曲线","该名称节点已存在,是否覆盖?",QMessageBox::Yes,QMessageBox::No)) // // { // // m_pParent->RemoveChild(childList[index],true); // // } // // else // // { // // pWelllogCurve->SetName(m_pParent->GetNextChildName(childList[index]->GetName())); // // } // } // } // else//没有该曲线,直接上树 // { // m_pParent->AddChild(pWelllogCurve); // CObjProject::AddIDMap( pWelllogCurve->GetID(),pWelllogCurve ); // } // } } // void WorkflowPluginControl::ApplyTemplate(CVecWindow * pWindow) // { // QString strTemplatePath = ::GetTemplatePath(); // QSettings *inioperator = new QSettings(::GetConfPath()+"module-template.ini",QSettings::IniFormat); // QString strValue; // CWellLogWorkflowDataModel * pWorkflow = dynamic_cast(::GetWorkflowConsole()->GetWorkflowWidget()->GetWorkflow()); // // if(pWorkflow->GetModuleCount()==0) return; // if(pWorkflow->GetModuleCount()>1)//组合模块模式 // { // QString wkfname=pWorkflow->GetName(); // strValue =inioperator->value(wkfname).toString(); // } // else{ // CWellLogWorkflowDataModel * pWorkflow = dynamic_cast(::GetWorkflowConsole()->GetWorkflowWidget()->GetWorkflow()); // WorkflowSceneManager * pSceneManager = dynamic_cast(::GetWorkflowConsole()->GetWorkflowWidget()->GetScene()); // workflow::CModuleInformation *pModule = pSceneManager->GetSingleSelectedModule(); // PELibraryModule *pLogModule=NULL; // if (pModule) // { // pLogModule=dynamic_cast(pModule->GetModule()); // if(pLogModule) { // if(!pLogModule->strDLLFun.isEmpty()) { // if(!pLogModule->strPlot.isEmpty()) strValue=pLogModule->strPlot; // else if(pLogModule->Hd) { // strValue=pLogModule->Hd->Plot; // if(strValue.isEmpty()) strValue=pLogModule->strDLLFun+".tpl"; // } // else strValue=pLogModule->strDLLFun+".tpl"; // } // } // else strValue =inioperator->value(QString::fromStdString(pModule->GetModuleID())).toString(); // } // } // QString val=strValue; // if (strValue.isEmpty()) // { // QString wellname; // QString path; // CObjProject *pProject = ::GetProject(); // QString slf=pProject->GetCurrentWell(); // if(!slf.isEmpty()) // { // GetWellNameAndPath(slf,wellname,path); // } // QString strTempPath=::GetTemplatePath(); // QString strTplFilter="单井图文件(*.tpl);;多井图文件(*.mpl)"; // QString temp=path+QDir::separator(); // QString sourceDir=strTempPath+"well"+QDir::separator(); // if(!path.isEmpty()) strTempPath=temp; // else strTempPath=sourceDir; // strTplFilter="单井图文件(*.tpl);;多井图文件(*.mpl)"; // QString defaultTempleteFile=QFileDialog::getOpenFileName(NULL,QObject::tr("选择模板"),strTempPath,strTplFilter); // if(defaultTempleteFile.trimmed()!="") // { // /* if(defaultTempleteFile.indexOf("template")>-1) { // CObjProject *pProject = ::GetProject(); // QString name; // if(pProject)name=pProject->GetName(); // QString wellname; // QString path; // QString slf=pProject->GetCurrentWell(); // if(!slf.isEmpty()) // { // GetWellNameAndPath(slf,wellname,path); // } // QString Templetename; // QString Templetepath; // if(!slf.isEmpty()) // { // GetWellNameAndPath(defaultTempleteFile,Templetename,Templetepath); // } // QString TempleteFile=path+QDir::separator()+wellname+Templetename+".tpl"; // QFile::copy(defaultTempleteFile,TempleteFile); // defaultTempleteFile=TempleteFile; // } // */ // pWindow->GetSceneManager()->GetDocument()->SetTemplateFileName(defaultTempleteFile); // QString windowname; // windowname=pWindow->GetWindowDocument()->GetName(); // QFileInfo afile(defaultTempleteFile); // windowname=windowname+"_"+afile.completeBaseName()+"_"; // //qDebug()<GetSceneManager()->GetDocument()->ApplyTemplate(defaultTempleteFile); // pWindow->GetSceneManager()->UpdateAll(); // pWindow->GetSceneManager()->GetCameraCommand().TranslateGDIPixel( 0,0) ; // return; // } // } // else { // strValue=QString("well")+QDir::separator()+strValue; // } // QString wellname; // QString path; // CObjProject *pProject = ::GetProject(); // CBaseObject* subtree=pProject->GetCurrentObject(); // CObjWelllogRound * m_pParent =dynamic_cast(subtree); // if(m_pParent) { // QString slf=m_pParent->GetSlfFileName(); // GetWellNameAndPath(slf,wellname,path); // } // if(wellname.isEmpty()) return; // QString temp=path+QDir::separator()+wellname+val; // QString sourceDir=::GetTemplatePath()+strValue; // QDir dir; // if(!dir.exists(temp)) { // if(dir.exists(sourceDir)) { // if(QFile::copy(sourceDir,temp)) sourceDir=temp; // } // } // else sourceDir=temp; // pWindow->GetWindowDocument()->ApplyTemplate(sourceDir); // pWindow->GetSceneManager()->UpdateAll(); // delete inioperator; // } // //计算完成后,刷新图形区域,更新深度范围,更新改了的曲线 // void WorkflowPluginControl::RefreshMapArea(CVecWindow * pWindow) // { // PaiObject* pWellTrack = pWindow->GetSceneManager()->GetDocument()->GetChildByType( GetOSGWellTrackID()); // if(!pWellTrack) return; // CObjectViewInfo* trackinfo=pWindow->GetSceneManager()->GetViewInfo(pWellTrack->GetID()); // CWellLogWorkflowDataModel * pWorkflowDataModel =dynamic_cast( ::GetWorkflowConsole()->GetWorkflowWidget()->GetWorkflow() ); // PELibraryModule* amodule= dynamic_cast(pWorkflowDataModel->GetModule(0)->GetModule()); // if(trackinfo&&amodule) // { // CWellViewInfo *pWellViewInfo = dynamic_cast( trackinfo ); // QScrollBar* vScroll=NULL; // int value=0; // CQtViewer *pView=dynamic_cast(pWindow->GetSceneManager()->GetVecViwer()); // if(pView) { // vScroll=pView->GetVScroll(); // if(vScroll) // { // value=vScroll->value(); // vScroll->setValue(0); // } // } // CVecWindowCommand::ViewInfoPropetyChanged( "TopDepth", pWellViewInfo,pWellViewInfo->GetTopDepth()); // if(pView)pView->UpdateScrollbar(); // if(vScroll) { // if(value>vScroll->maximum()) value=vScroll->maximum()-1; // vScroll->setValue(value); // } // } // }