logplus/Workflow/WFWidget/include/PaiWorkspace.h
2026-01-17 12:55:45 +08:00

177 lines
5.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @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