/** * @file WorkflowPlugin.h * @brief 工作流编辑界面插件的入口类 * @date 2011-6-27 */ #ifndef PAI_FRAME_WORKFLOWVIEW_WORKFLOWPLUGIN_H #define PAI_FRAME_WORKFLOWVIEW_WORKFLOWPLUGIN_H #include #include #include #include "IPlugin.h" #include "IObjectTypeSupport.h" #include "IContextMenuExtension.h" #include "WorkflowPluginControl.h" class QAction; class QGraphicsItem; class QWebPage; class QTreeWidgetItem; namespace pai { namespace objectmodel { class PaiObject; class PaiWorkflowDataModel; } namespace graphics2d { class CParameterEditor; } namespace gui { class PaiAction; } } namespace pai { /** * @class CPaiWorkflowPlugin * @brief 工作流编辑界面插件的入口类 */ class PAI_WORKFLOWVIEW_EXPORT CPaiWorkflowPlugin: public QObject, public pai::IPlugin, public pai::IObjectTypeSupport, public pai::IContextMenuExtension { Q_OBJECT Q_INTERFACES(pai::IPlugin pai::IObjectTypeSupport pai::IContextMenuExtension) public: CPaiWorkflowPlugin(); virtual ~CPaiWorkflowPlugin(); /** * @brief插件集成到主控台 */ virtual void Integrate(); /** * Remove the seismic view from main console. */ virtual void Dispose(); /** * Get the unique ID for the plugin. */ virtual QUuid GetID() const { return QUuid(QString("1e511b0b-02a6-4eec-af57-613f489d4b49")); } /** * @brief 得到插件的描述信息 * @return 插件的描述信息 */ virtual PluginInformation GetInformation(); /** * @brief 打开并显示视图的界面,通常用来将GUI插件的界面嵌入到主控台或其他GUI插件。注意事项是必须有且只有一个界面使用IPlugin的ID进行界面的注册。 */ bool OpenView(); /** * @brief 展现数据,用来显示指定数据对象到视图界面上。 * @param[in] pObject 数据对象模型 */ virtual bool Show(pai::objectmodel::PaiObject * pObj); /** * @brief 激活数据,用来激活指定数据对象对应的视图界面。 * @param[in] pObject 数据对象模型 */ virtual bool Active(pai::objectmodel::PaiObject* pObject); /** * @brief 得到支持的所有类型 * @return 所有支持类型的标识符集合 */ virtual QList GetSupportedTypeIDs() const; /** * @brief 处理上下文菜单的统一接口,通常用来向指定的上下文菜单添加该插件所特有的菜单项。 * @param[in] contextObjs 相关对象 * @param[out] actions Action列表 * @return 成功返回true, 失败返回false */ virtual bool Handle(QList & contextObjs, QList & actions); /** * @brief 重载该纯虚函数得到字符串格式的ID */ virtual std::string GetStringID() const { return GetID().toString().toStdString(); } /** * @brief 获得控制器指针 */ WorkflowPluginControl * GetWorkflowPluginCtr() { return &m_control; } public slots: /** * @brief活动tab改变时,切换tab */ void slotOnActiveTabPage(const QString &); /** * @brief 工作流参数预审,redo */ void slotBrowseWorkflow(); /** * @brief 响应点击区域页签 */ void slotActiveAreaTabPage(const QString& strAreaName,const std::string& activedViewID); private slots: /** * @brief param点击后显示param的description,临时方案 */ void slotShowDescription(const QModelIndex & index); /** * @brief 模块点击后显示模块的帮助文档 */ void slotShowHelpDoc(QTreeWidgetItem * item, int column); /** * @brief 选中模块后显示模块的帮助文档 */ void slotShowHelpDocForSceneSelect(pai::workflow::CModuleInformation* pModuleInformation); /** *@brief 显示工作流模板 *@param objectList 要显示的工作流模板对象 */ void slotShowTemplate(QList objectList); /** *@brief 删除工作流模板 *@param objectList 要显示的工作流模板对象 */ void slotDeleteTemplate(QList objectList); /** * @brief 打开工作流帮助文档 */ void OpenWorkflowHelp(); private: /** * @brief 显示指定的工作流对象 * @param pWorkflowObject 指定的工作流对象 */ bool _ShowWorkflow(pai::objectmodel::PaiWorkflowDataModel* pWorkflowObject); /** * @brief 显示模块的帮助文档 */ void ShowHelpDoc(std::string strHelp); /** * @brief 取得模块的帮助文档的Page */ QWebPage* GetWebHelpInfo(); protected: /** *@brief 获取当前活动的工作流 *@return PaiWorkflowDataModel* 活动工作流对象指针 */ pai::objectmodel::PaiWorkflowDataModel* GetActiveWorkflow(); QPointer m_pParameterEditor; WorkflowPluginControl m_control; // 插件的控制器 }; } #endif