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
|