logplus/ModuleConsole/include/WorkflowPluginControl.h

533 lines
16 KiB
C
Raw Normal View History

2026-01-16 17:18:41 +08:00
/**
* @file WorkflowPluginControl.h
* @brief
* @note WorkflowPlugin中提取出来的WorkflowPlugin.h
* @date 3014-08-05
*/
#ifndef PAI_FRAME_WORKFLOWVIEW_WORKFLOWPLUGINCONTROL_H
#define PAI_FRAME_WORKFLOWVIEW_WORKFLOWPLUGINCONTROL_H
#include <QObject>
#include <QUuid>
#include <QPair>
#include "ControlExtension.h"
#include "PaiMessageBox.h"
#include "RunTimeContext.h"
#include "WellLogWorkflowRunner.h"
#include "ModuleInformation.h"
// #include "VecWindow.h"
class QAction;
class QUndoGroup;
namespace pai
{
class CPaiWorkflowTemplateTree;
class PaiCheckJobOutputThread;
namespace objectmodel
{
class PaiObject;
class PaiSurvey;
class PaiWorkflowDataModel;
}
namespace graphics2d
{
class WorkflowWidget;
}
namespace gui
{
class PaiAction;
}
}
/**
* @enum HandleEnvironmentType
* @brief
*/
enum HandleEnvironmentType
{
HandleEnvironment_BeforeUnselect = 0,
HandleEnvironment_AfterSelect = 1
};
/**
* @enum ImportType
* @brief
*/
enum ImportType
{
WORKFLOW_TYPE = 0, // 导入工作流
TEMPLATE_TYPE = 1 // 导入模板
};
/**
* @enum ImportErrorType
* @brief
*/
enum ImportErrorType
{
ImportErrorType_STYLE = 0, // style文件
ImportErrorType_DELETE = 1, // 同名删除错误
ImportErrorType_REMOVE = 2, // 同名树节点删除错误
ImportErrorType_PARSE = 3, // 解析错误
ImportErrorType_IMPORT = 4 // 导入错误
};
namespace pai
{
/**
* @class WorkflowPluginControl
* @brief
*/
class PAI_WORKFLOWVIEW_EXPORT WorkflowPluginControl : public QObject, public ControlExtension
{
Q_OBJECT
public:
/**
* @brief
*/
WorkflowPluginControl(const QUuid& viewID, QObject* pParent = NULL);
/**
* @brief
*/
virtual ~WorkflowPluginControl();
/**
* @brief
* @param contextObjs
* @param[out] lstMenuActions
*/
bool BuildTreeMenuActionsForObject(QList< pai::objectmodel::PaiObject* > & contextObjs,
QList< pai::gui::PaiAction* >& lstMenuActions);
/**
* @brief json格式的工作流定义文件到指定的对象下
* @param targetParentID ID
* @param lstJsonFilePaths json格式的工作流定义文件
*/
void ImportWorkflows(const QUuid& targetParentID, const QStringList& lstJsonFilePaths, ImportType type = WORKFLOW_TYPE);
/**
* @brief Workflow
*/
void SubmitWorkflow();
/**
* @brief Workflow
* @param[in] strName
*/
void RenameWorkflow(QString /*strName*/);
/**
* @brief
* @param type select之后还是unselect之前
*/
void HandleCurrentWorkEnvironment(HandleEnvironmentType type);
/**
* @brief
*/
// pai::graphics2d::WorkflowWidget* GetActiveWorkflowView();
/**
* ID
*/
QUuid GetViewID() const;
/**
* @brief UndoAction
*/
QAction* GetUndoAction();
/**
* @brief RedoAction
*/
QAction* GetRedoAction();
/**
* @brief UndoGroup
*/
QUndoGroup* GetUndoGroup();
/**
*@brief
*/
void SetActiveTemplate(pai::CPaiWorkflowTemplateTree *pTemplateTree);
/**
* @brief get template tree.
*/
pai::CPaiWorkflowTemplateTree * GetTemplateTree();
/**
* @brief save相关action的状态
* @param[in] updateOrClose true根据pObj更新savesaveall状态false则由于有关闭操作更新saveall状态
* @param[in] pObj工作流对象指针
*/
void UpdateSaveActions(bool updateOrClose, pai::objectmodel::PaiObject* pObj);
/**
* @brief
* @param[in] dbid
*/
void OpenWorkflowView(long long dbid);
public slots:
/**
* @brief
*/
void slotNewWorkflow();
/**
* @brief
*/
void NewWorkflowByBrowse();
/**
* @brief
*/
void ShowMsg(QString strMsg);
/**
* @brief
*/
void SlotRunWelllogModule();
void SlotRunWelllogModule(float sdep,float edep);
/**
* @brief json文件格式批量导出到指定目录
*/
void slotExportWorkflows(ImportType type = WORKFLOW_TYPE);
/**
* @brief
*/
void slotSaveAsTemplate();
private slots:
/**
* @brief Workflow线
*/
void slotPreSubmitWorkflow();
/**
* @brief Workflow
*/
void slotSubmitWorkflow(pai::objectmodel::PaiWorkflowDataModel* workflow, const QString& jobName);
/**
* @brief
*/
void slotSaveWorkflow();
/**
* @brief
*/
void slotSaveAsWorkflow();
/**
* @brief
*/
void slotSaveAllWorkflows();
/**
* @brief json文件导入工作流
*/
void slotImportWorkflows(ImportType type = WORKFLOW_TYPE);
/**
* @brief tabWidget的时候tabWidget的个数是0
*/
void slotCloseWorkflowPlugin(QString strAreaName); //syr
/**
*
* @param[in] pInfo module.
* @param[in] IsModuleReadOnly
*/
void slotActivateParameterEditor(pai::workflow::CModuleInformation* pInfo, bool IsModuleReadOnly);
/**
*
*/
void slotActiveParameter();
/**
* @brief B1区切换到模块树为当前激活页签
* @param[in] pCurrentModule
* @param[in] IsModuleReadOnly
*/
void slotActivateModuleTree(pai::workflow::CModuleInformation* pCurrentModule, bool IsModuleReadOnly = false);
/**
* @brief tab页时
* @param strPageID ID
*/
void slotOnClosePluginTabPage(const QString& strPageID);
/**
* @brief
* @param strExtensionID ID
*
*/
void slotCloseWorkflowWidget(const QString& strExtensionID);
/**
* @brief
* @param strNewJobName[in]
*/
void slotOnJobSubmitFinished(pai::objectmodel::PaiWorkflowDataModel* pWorkflowObject, const QString& strNewJobName);
/**
* @brief ,defect12215
* @param pJob
* @param strPropertyName
* @param varNewPropertyValue DB ID
*/
void slotOnJobDataGenerated(pai::objectmodel::PaiObject* pJob,
const QString& strPropertyName,
const QVariant& varJobOutputDataID);
/**
* @brief Untitile工作流的重命名
* @param pObj
* @param strPropertyName
* @param varNewPropertyValue
*/
void slotOnWorkflowPropertyChanged(pai::objectmodel::PaiObject* pObj,
const QString& strPropertyName,
const QVariant& strNewPropertyValue);
// /**
// * @brief 将步骤下的所有工作流以json文件格式批量导出到指定目录
// */
// void slotExportWorkflows(ImportType type = WORKFLOW_TYPE);
/**
* @brief
*/
void slotDeleteItem();
/**
* @brief
*/
void slotEditItem();
/**
* @brief workflow页签切换的消息Worflow对象
* @param strExtensionID workflow页签所携带的视图扩展ID,Worflow对象的ID
*/
void slotOnActiveCurrentWorkflow(const QString& strExtensionID);
/**
* @brief
*/
void slotRefreshProperties(const QUuid & id);
/**
* @brief
*/
void slotSaveWorkflowAsImageFile();
/**
* @brief
*/
void slotPasteItems();
/**
* @brief
*/
void slotCutItems();
/**
* @brief
*/
void slotCopyItems();
/**
* @brief
* @param[in] pJob
*/
void slotOnWorkflowRefreshed(pai::objectmodel::PaiObject* pObj);
public :
/**
* @brief
*/
void DisplayCaculatedCurveOnWellSectionWindow(Qt::CheckState checkstate = Qt::Checked);
CWellLogWorkflowRunner * GetWorkflowRunner(){return m_pWellLogWorkflowRunner;};
/**
* @brief 线
*/
// void ApplyTemplate(CVecWindow * pWindow);
private:
/**
* @brief 线
* @param[in] 线
*/
void AddCurvesToDataTree(CObjWellLog * pWelllogCurve);
/**
* @brief
* @param[in] filePath
* @return true删除成功
*/
bool DeleteFile(const QString& filePath);
/**
* @brief
* @param[in] JsonFilePath
* @param[in] pWorkflowMaster
* @param[in] importErrorList
* @param[in] resultButton
* @param[in] strNames
* @param[in] type ,
* @param[in] outPutFile
* */
bool 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());
/**
* @brief
* @param[in] workflowdbid id
* @param[in] pWorkflow workflowdbid对应最新工作流
*/
void UpdateOpenedWorkflow(pai::objectmodel::PaiWorkflowDataModel* pWorkflow, long long workflowdbid);
/**
* @brief
* @param[in] pWorkflow
* @param[in] versionMsg
* @return true,;
*/
bool HasUnsupportedModule(pai::objectmodel::PaiWorkflowDataModel* pWorkflow, QString &versionMsg);
/**
* @brief
* @param[in] pSur
*/
void NewWorkflow(pai::objectmodel::PaiObject *pSur);
/**
* @brief获得去除后缀以后的工作流名称.wfl
* @param[in] workflowFileName ()
* @param[in] suffix (.wfl)
* @return
*/
QString GetWorkflowBaseName(const QString &workflowFileName, const QString &suffix);
/**
* @brief
* @param[in] workflowList将被导出工作流或者工作流模板
*/
void SaveExportedWorkflows(QList<pai::objectmodel::PaiObject*> &workflowList);
/**
* @brief
* @param[out] targetPath
* @param[in] type
*/
void OpenExportWorkflowsDialog(QString &targetPath, ImportType type);
/**
* @brief
* @param[in] workflowList将被导出工作流或者工作流模板
* @param[in] targetPath
*/
void CheckExportedWorkflows(QList<pai::objectmodel::PaiObject*> &workflowList, const QString &targetPath);
/**
* @brief
* @param[in] tempPath
*/
void CreateTempDir(const QString &tempPath);
/**
* @brief
* @param[in] tempPath
*/
void DeleteTempDir(const QString &tempPath);
/**
*@brief
*@return PaiWorkflowDataModel*
*/
pai::objectmodel::PaiWorkflowDataModel* GetActiveWorkflow();
/**
* @brief
*/
void Import(pai::gui::PaiAction *pSender, ImportType type);
/**
* @brief解析错误
*/
void ParseError(QList< QPair< int, QString > > &importErrorLst, ImportType type);
/**
* @brief处理导入个*.wfl文件
* @param[in] lstJsonFilePaths被导入的文件的链表
* @param[in] pWorkflowMaster数据对象指针
* @param[in] strNames工作流或模板名称链表
* @param[in] type导入类型
* @param[in] outPutFile工作流所在工区的路径名称
*/
void HandleImportedFiles(const QStringList& lstJsonFilePaths,
pai::objectmodel::PaiObject *pWorkflowMaster,
QStringList &strNames,
ImportType type,
QString outPutFile = QString());
/**
* IExtension的接口
*/
virtual std::string GetStringID() const;
/**
*
*/
QWidget* GetParameterEditor() const;
/**
* @brief ,
* @param pWorkflowObject
* @param pSender Cancel逻辑
* @param[out] false表示取消了操作trueyes和no
*/
bool CloseWorkflow(pai::objectmodel::PaiWorkflowDataModel* pWorkflowObject, QObject* pSender);
/**
* @brief
* @param strJobName
* @param strLabelText
*/
bool OpenNameJobDialog(QString& strJobName, QString strLabelText);
/**
* @brief
* @return
*/
QList<pai::objectmodel::PaiWorkflowDataModel*> GetOpenedWorkflows();
//计算完成后,刷新图形区域
// void RefreshMapArea(CVecWindow * pWindow);
private:
QUuid m_ViewID; // 插件ID
QUndoGroup* m_pUndoGroup; // 命令栈组
QAction* m_pUndoAction; // 撤销action
QAction* m_pRedoAction; // 重做action
pai::CPaiWorkflowTemplateTree *m_pTemplateTree; // 模板树
pai::PaiCheckJobOutputThread *m_pCheckJobOutputThread;
CWellLogWorkflowRunner * m_pWellLogWorkflowRunner;
};
}
#endif