/** * @file PaiModuleTree.h * @brief 模块树 * @author: shiyuerong * @date: 2011-8-17 */ #ifndef PAI_FRAME_WORKFLOWVIEW_PAIMODULETREE_H #define PAI_FRAME_WORKFLOWVIEW_PAIMODULETREE_H #include #include "PaiTreeWidget.h" #include "ControlExtension.h" #include "ModuleInformation.h" namespace pai { /** * 模块树的逻辑,封装了初始化模块节点和拖动树上节点等逻辑 */ class PAI_WORKFLOWVIEW_EXPORT CPaiModuleTreeControl:public QObject,public ControlExtension { public: /** * @brief 构造函数 * @param bUnitTest 是否处于单元测试的场景 * @param pParent 父对象句柄 */ CPaiModuleTreeControl(QObject* pParent=NULL); /** * @brief 从全局模块管理器初始化模块树的所有节点,并返回第一级节点的列表 * @param[out] toplevelTreeItems 返回的第一级节点的列表 */ void BuildTreeItemsFromModuleManager(QList& toplevelTreeItems); /** * @brief 拖动树上节点的逻辑,产生一个QDrag对象 * @param pCurrentItem 当前拖拽的树节点 */ void DragItem(QTreeWidgetItem* pCurrentItem); private: /** * 基类IExtension的接口,必须实现 */ virtual std::string GetStringID() const; }; /** * 工作流编辑所用的模块树 */ class CPaiModuleTree : public pai::gui::PaiTreeWidget { Q_OBJECT public: CPaiModuleTree(QWidget*); virtual ~CPaiModuleTree(); /** * @brief 在场景中选中module,右边相应的节点会高亮 * @param strModuleName 选中module的名字 */ void selectModules(const QString& strModuleName); void MonkeyClickedModule(const QString& strModuleName); protected: /** * @brief 重写该虚函数来支持从模块树拖拽一个模块 */ virtual void startDrag(Qt::DropActions /*supportedActions*/); virtual void mouseDoubleClickEvent(QMouseEvent *event); signals: /** * @brief 将模块提交到工作流区域 */ void DeliverModule(const QString&); void menuClicked(const QString&,const QString&); // 第一个变量为菜单名,第二个变量是模块名 public slots: void moduleSelectedSlot(bool); // slot for setting scenes module selected flag /** * @brief 请求将当前选中模块提交到工作流区域 */ void RequireDeliverSelectedModules(); /** *@brief 选中场景中的模块时关联选中模块树上的模块 */ void slotSelectModule(pai::workflow::CModuleInformation* pModule); private slots: void changeFolderToOpen(QTreeWidgetItem*); void changeFolderToClose(QTreeWidgetItem*); void menuSelectedSlot(); /** * @brief 右击节点时接收槽 * @param[in] point 右击的坐标 */ void RightMenuRequest(const QPoint &point); private: CPaiModuleTreeControl m_control; bool scenseModuleSelected; // scense module selected flag }; } #endif