107 lines
2.9 KiB
C
107 lines
2.9 KiB
C
|
|
/**
|
|||
|
|
* @file PaiModuleTree.h
|
|||
|
|
* @brief 模块树
|
|||
|
|
|
|||
|
|
* @author: shiyuerong
|
|||
|
|
* @date: 2011-8-17
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
#ifndef PAI_FRAME_WORKFLOWVIEW_PAIMODULETREE_H
|
|||
|
|
#define PAI_FRAME_WORKFLOWVIEW_PAIMODULETREE_H
|
|||
|
|
|
|||
|
|
#include <QWidget>
|
|||
|
|
#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<QTreeWidgetItem*>& 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
|