177 lines
5.5 KiB
C++
177 lines
5.5 KiB
C++
/**
|
||
* @file PaiWorkspace.h
|
||
* @brief 该类代表一个复杂布局(支持停靠、区域拆分和页签等方式组织管理界面)的容器控件
|
||
* @date 2012-05-07
|
||
*/
|
||
#ifndef PAI_FRAME_WIDGET_PAIWORKSPACE_H
|
||
#define PAI_FRAME_WIDGET_PAIWORKSPACE_H
|
||
|
||
#include "PaiTabWidget.h"
|
||
#include "Turtle.h"
|
||
namespace pai
|
||
{
|
||
namespace gui
|
||
{
|
||
class PaiDropMask;
|
||
}
|
||
}
|
||
|
||
namespace pai
|
||
{
|
||
namespace gui
|
||
{
|
||
/**
|
||
* @class PaiWorkspaceExtension
|
||
* @brief 虚基类,用于定义PaiWorkspace的功能拓展。
|
||
*/
|
||
class PaiWorkspaceExtension
|
||
{
|
||
public:
|
||
/**
|
||
* @brief 将视图加到指定的页签控件并建立两者之间的关系,这种解决方案效率较低,以后会重构
|
||
* @param[in] pView 被拖拽的视图
|
||
* @param[in] icon 待添加的视图的图标
|
||
* @param[in] text 待添加的视图的名字
|
||
* @param[in] pTabWidget 页签控件
|
||
* @return 是否添加成功
|
||
*/
|
||
virtual bool AddViewToTabWidget(QWidget *pView,
|
||
const QIcon & icon,
|
||
const QString & text,
|
||
pai::gui::PaiTabWidget *pTabWidget) = 0;
|
||
|
||
/**
|
||
* @brief 将视图从指定的页签控件移走并切断两者之间的关系,这种解决方案效率较低,以后会重构
|
||
* @param[in] pView 被拖拽走的视图
|
||
* @param[in] pTabWidget 脱离时的页签控件
|
||
* @return 是否移除成功
|
||
*/
|
||
virtual bool RemoveViewFromTabWidget(QWidget *pView, pai::gui::PaiTabWidget *pTabWidget) = 0;
|
||
};
|
||
|
||
/**
|
||
* @class PaiWorkspace
|
||
* @brief 该类代表一个复杂布局(支持停靠、区域拆分和页签等方式组织管理界面)的容器控件
|
||
*/
|
||
class PAI_WIDGET_EXPORT PaiWorkspace : public QWidget
|
||
{
|
||
Q_OBJECT
|
||
public:
|
||
/**
|
||
* @brief 构造函数
|
||
* @param[in] pParent 父控件句柄
|
||
*/
|
||
PaiWorkspace(QWidget *pParent);
|
||
|
||
/**
|
||
* @brief 析构函数
|
||
*/
|
||
virtual ~PaiWorkspace();
|
||
|
||
/**
|
||
* @brief 添加一个Widget到指定区域,本函数为临时实现
|
||
* @param[in] areaName 区域名
|
||
* @param[in] pWidget 待添加的控件
|
||
* @param[in] text 待添加的控件的名字
|
||
* @param[in] icon 待添加的控件的图标
|
||
*/
|
||
void AddWidget(const QString & areaName, QWidget *pWidget, const QString & text, const QIcon & icon);
|
||
|
||
/**
|
||
* @brief 将视图加到指定的页签控件并建立两者之间的关系,这种解决方案效率较低,以后会重构
|
||
* @param[in] pView 被拖拽的视图
|
||
* @param[in] icon 待添加的视图的图标
|
||
* @param[in] text 待添加的视图的名字
|
||
* @param[in] pTabWidget 页签控件
|
||
* @return 是否添加成功
|
||
*/
|
||
static bool AddViewToTabWidget(QWidget *pView, const QIcon & icon, const QString & text, pai::gui::PaiTabWidget *pTabWidget);
|
||
|
||
/**
|
||
* @brief 将视图从指定的页签控件移走并切断两者之间的关系,这种解决方案效率较低,以后会重构
|
||
* @param[in] pView 被拖拽走的视图
|
||
* @param[in] pTabWidget 脱离时的页签控件
|
||
* @return 是否移除成功
|
||
*/
|
||
static bool RemoveViewFromTabWidget(QWidget *pView, pai::gui::PaiTabWidget *pTabWidget);
|
||
|
||
/**
|
||
* @brief 获取主Tab组件,通常依据此组件设置窗口标题
|
||
* @return 返回主Tab组件
|
||
*/
|
||
PaiTabWidget* GetPrimaryTabWidget() const;
|
||
|
||
/**
|
||
* @brief 设置拓展对象,为PaiWorkspace增加功能
|
||
* @param[in] pExtension 功能拓展对象
|
||
*/
|
||
static void SetExtension(PaiWorkspaceExtension *pExtension);
|
||
|
||
protected:
|
||
/**
|
||
* @brief 支持拖动页签到别的区域
|
||
* @param[in] pEvent 拖拽事件
|
||
*/
|
||
virtual void dropEvent(QDropEvent *pEvent);
|
||
|
||
/**
|
||
* @brief 重载此函数来判断拖拽进来的数据是否合法,并给出落点提示
|
||
* @param[in] pEvent 拖拽事件
|
||
*/
|
||
virtual void dragEnterEvent(QDragEnterEvent *pEvent);
|
||
|
||
/**
|
||
* @brief 重载此函数来判断拖拽进来的数据是否合法,并给出落点提示
|
||
* @param[in] pEvent 拖拽事件
|
||
*/
|
||
virtual void dragMoveEvent(QDragMoveEvent *pEvent);
|
||
|
||
/**
|
||
* @brief 重载此函数来取消落点区域位置提示的显示
|
||
* @param[in] pEvent 拖拽事件
|
||
*/
|
||
virtual void dragLeaveEvent(QDragLeaveEvent *pEvent);
|
||
|
||
/**
|
||
* @brief 重载此函数来调用页签控件的关闭流程
|
||
* @param[in] pEvent 关闭事件
|
||
*/
|
||
virtual void closeEvent(QCloseEvent *pEvent);
|
||
|
||
/**
|
||
* @brief 重载eventFilter
|
||
* @param[in] pObject 事件源
|
||
* @param[in] pEvent 事件对象
|
||
*/
|
||
virtual bool eventFilter(QObject *pObject, QEvent *pEvent);
|
||
|
||
private slots:
|
||
/**
|
||
* @brief 当所有的页签都被挪走后关闭工作区域
|
||
*/
|
||
void OnAllTabRemoved();
|
||
|
||
private:
|
||
PaiDropMask *m_pDropAreaHint; ///< 拖动中的页签的落点的区域位置提示
|
||
DragState m_DragState; ///< 拖拽参数
|
||
PaiTabWidget *m_pMainTabWidget; ///< 主tab页
|
||
static PaiWorkspaceExtension *m_pWorkspaceExtension; ///< PaiWorkspace功能拓展,目前需要拓展与TabWidget之间的注册和反注册功能
|
||
|
||
signals:
|
||
/**
|
||
* @brief 切换父窗口的title
|
||
* @param[in] title 标题
|
||
*/
|
||
void CurrentTitleChanged(const QString & title);
|
||
|
||
/**
|
||
* @brief 当数据副标题变化信号,window连接后可用于标题刷新
|
||
*/
|
||
void SubtitleChanged();
|
||
};
|
||
|
||
}
|
||
}
|
||
|
||
#endif ///< PAI_FRAME_WIDGET_PAIWORKSPACE_H
|