/** * @file SaveHelper.h * @brief 辅助Save和Save As, 用来弹出保存对话框。 * @date 2012-10-17 */ #ifndef PAI_FRAME_WORKFLOWWIDGET_SAVEHELPER_H #define PAI_FRAME_WORKFLOWWIDGET_SAVEHELPER_H #include #include // #include "ErrorCode.h" namespace pai { namespace objectmodel { class PaiObject; class PaiProject; class PaiSurvey; class PaiWorkflowDataModel; } namespace graphics2d { class WorkflowWidget; } namespace gui { class PaiTextEdit; } } /** * @enum SaveType * @brief 保存类型 */ enum SaveType { SaveType_DoCancel = 0x00000000, ///< 取消,不保存 SaveType_DoOpenDialog = 0x00000001, ///< 不覆盖,继续打开保存对话框 一般是点击了不覆盖后设置的 SaveType_IsJobOpen = 0x00000010, ///< 从作业打开的 SaveType_IsWorkOpen = 0x00000100, ///< 从工作流节点打开的 SaveType_ExistSameName = 0x00001000, ///< 存在同名工作流 SaveType_IsCurrentWorkflow = 0x00010000, ///< 同名工作流是当前要保存的工作流 SaveType_IsNewWorkflow = 0x00100000, ///< 当前工作流是新创建未保存过的工作流 SaveType_IsJobSave = 0x01000000 ///< 当前工作流是从作业管理界面直接保存的 }; namespace pai { /** * @class SaveHelper * @brief 辅助Save和Save As, 用来弹出保存对话框。 */ class PAI_WORKFLOWWIDGET_EXPORT SaveHelper { public: /** * @brief 构造函数 */ SaveHelper(); /** * @brief 析构函数 */ virtual ~SaveHelper(); /** * @brief 设置当前正在编辑的工作流页面视图 * @param[in] pWorkflowWidget 正在编辑的工作流页面视图 */ static void SetActiveWorkflowView(pai::graphics2d::WorkflowWidget* pWorkflowWidget); /** * @brief 得到当前激活的正在编辑的工作流页面视图 * @return 正在编辑的工作流页面视图 */ static pai::graphics2d::WorkflowWidget* GetActiveWorkflowView(); /** * @brief 只是保存当前工作流,先后操作工作流模型保存json和数据库部分。 * @param[in] pWorkflow 要保存的工作流模型 * @param[in] isTemplate 要保存的工作流是否是模板 * @return 保存结果 */ static bool SaveWorkflow(pai::objectmodel::PaiWorkflowDataModel *pWorkflow, bool isTemplate = false); /** * @brief 保存当前编辑的工作流为指定名称文件 * @param[in] pWorkflow 要保存的工作流模型 * @param[in] jsonFilePath 保存文件名 * @return 保存结果 */ static bool SaveWorkflowJson(pai::objectmodel::PaiWorkflowDataModel *pWorkflow, const QString& jsonFilePath); /** * @brief 获得属性编辑框 * @return 属性编辑框 */ static pai::gui::PaiTextEdit* GetPropertiesTextEdit(); /** * @brief 打开工作流保存对话框 * @param[in,out] workflowName 工作流名称 * @param[in] ppSurvey 工区指针 * @param[in] pActiveWorkflow 当前工作流 * @return 保存结果 */ static int OpenSaveDialog(QString &workflowName, pai::objectmodel::PaiSurvey** ppSurvey, pai::objectmodel::PaiWorkflowDataModel*pActiveWorkflow); /** * @brief 打开工作流另存为对话框 * @param[in,out] workflowName 工作流名称 * @param[in] ppSurvey 工区指针 * @param[in] pActiveWorkflow 当前工作流 * @return 另存为结果 */ static int OpenSaveAsDialog(QString &workflowName, pai::objectmodel::PaiSurvey** ppSurvey , pai::objectmodel::PaiWorkflowDataModel*pActiveWorkflow); /** * @brief 得到当前修改过的打开的工作流对象集合 * @param[in] viewID 工作流插件ID * @return 当前修改过的打开的工作流对象集合 */ static QList< pai::objectmodel::PaiWorkflowDataModel* > GetModifiedWorkflows(QUuid viewID); /** * @brief 设置保存失败时的异常信息 * @param[in] what 异常信息 * @param[in] which 错误类型 */ // static void SetSaveException(const QString & what, const int which = pai::error::ERR_SUCCESS); /** * @brief 获取保存失败时的异常信息e.what() * @return 异常信息 */ static QString GetSaveExceptionWhat(); /** * @brief 获取保存失败时的异常信息e.which() * @return 错误类型 */ static int GetSaveExceptionWhich(); /** * @brief 获取当前工作流所对应的工区 * @param[in] 当前工作流的DBID * @return pSurvey 工区指针 */ static pai::objectmodel::PaiSurvey* GetSurveyByWfDBID(long long workflowDBID); private: /** * @brief 弹出信息提示对话框,在单元测试的场景下后台输出该语句 * @param[in] title 错误标题 * @param[in] message 错误内容 */ static void ShowMessage(const QString& title, const QString& message); /** * @brief 打开工作流保存对话框 * @param[in] save true Save操作, false save as操作 * @param[in,out] workflowName 工作流名称,也是返回数据 * @param[in] ppSurvey 要返回的工区双指针 * @return 保存类型,见SaveType */ static int OpenSaveDialog(bool save, QString &workflowName, pai::objectmodel::PaiSurvey **ppSurvey, pai::objectmodel::PaiWorkflowDataModel *pActiveWorkflow); /** * @brief 验证保存工作流的名字 * @param[in] save true Save操作, false save as操作 * @param[in] strWorkflowName 工作流的名字 * @param[in] pSurvey 指定工区指针 * @return 见SaveType */ static int ValidateSaveWorkflowName(bool save, const QString& workflowName, pai::objectmodel::PaiWorkflowDataModel *pActiveWorkflow, pai::objectmodel::PaiSurvey *pSurvey = NULL); private: static pai::graphics2d::WorkflowWidget *m_pActiveWorkflowWidget; ///< 当前正在编辑的工作流页面视图 static QString m_ExceptionWhat; ///< 对应捕获异常时的e.what()信息 static int m_ExceptionWhich; ///< 对应捕获异常时的e.whicht()信息 }; } #endif ///< PAI_FRAME_WORKFLOWWIDGET_SAVEHELPER_H