logplus/Workflow/WFWidget/include/PaiTabWidget.h

267 lines
7.3 KiB
C
Raw Normal View History

2026-01-17 12:55:45 +08:00
/**
* @file PaiTabWidget.h
* @brief PAI风格TabWidget
* @date 2011-7-19
*/
#ifndef PAI_FRAME_WIDGET_PAITABWIDGET_H
#define PAI_FRAME_WIDGET_PAITABWIDGET_H
#include <QTabBar>
#include <QTabWidget>
#include "Turtle.h"
class QByteArray;
namespace pai
{
namespace gui
{
/**
* @struct DragState
* @brief
*/
struct DragState
{
bool isValid; ///< 拖拽参数是否合法
bool isDragging; ///< 是否正在拖拽中
QWidget *pDraggingWidget;///< 拖拽的页面
QIcon tabIcon; ///< 拖拽的页签的图标
QString tabText; ///< 拖拽的页签的文本
QPoint pressPosition; ///< 鼠标初始点击位置
QRect srcRect; ///< 被拖拽页面的矩形
qint64 appPid; ///< 进程id
};
/**
* @brief
* @param[in] dragState
* @param[out] blob
*/
extern void Serialize(const DragState& dragState, QByteArray& blob);
/**
* @brief
* @param[out] dragState
* @param blob
*/
extern void Unserialize(DragState& dragState, QByteArray& blob);
/**
* @class PaiInfoTabBar
* @brief P.A.I
*/
class PaiInfoTabBar : public QTabBar
{
Q_OBJECT
public:
/**
* @brief
* @param[in] pParent
* @param[in] isSubTabBar
* @param[in] behavior
*/
PaiInfoTabBar(QWidget *pParent = NULL,
bool isSubTabBar = true,
SelectionBehavior behavior = SelectPreviousTab);
/**
* @brief
* @param[in] draggable
*/
void SetDraggable(bool draggable);
protected:
/**
* @brief
* @param[in] pEvent
* @note style sheet中
* margin: 0px 0px 1px 5px; padding-right:0px; padding-left:5px;
* 5...(elide)QSS来决定
*/
virtual void paintEvent(QPaintEvent *pEvent);
/**
* @brief
* @param[in] pEvent
*/
virtual void mousePressEvent(QMouseEvent *pEvent);
/**
* @brief
* @param[in] pEvent
*/
virtual void mouseMoveEvent(QMouseEvent *pEvent);
/**
* @brief
* @param[in] pEvent
*/
virtual void mouseReleaseEvent(QMouseEvent *pEvent);
/**
* @brief Tooltip事件
* @param[in] pEvent
*/
virtual bool event(QEvent *pEvent);
/**
* @brief
* @param[in] pEvent
*/
virtual void timerEvent(QTimerEvent *pEvent);
private:
/**
* @brief
*/
void InitDragState();
/**
* @brief PaiWorkspace
* @return
*/
bool IsDraggable() const;
private:
DragState m_DragState; ///< 拖拽参数
bool m_IsSubTabwidget; ///< 是否为子Tabwidget
bool m_draggable; ///< 是否可拖拽
int m_OutOfConsoleTimer; ///< 定时器
};
/**
* @class PaiTabWidget
* @brief P.A.I
*/
class PAI_WIDGET_EXPORT PaiTabWidget : public QTabWidget
{
Q_OBJECT
public:
/**
* @brief
* @param[in] pParent
* @param[in] isSubTabBar Tabbar
* @param[in] behavior
*/
PaiTabWidget(QWidget *pParent,
bool isSubTabBar = true,
QTabBar::SelectionBehavior behavior = QTabBar::SelectPreviousTab);
/**
* @brief
* @param[in] visible
*/
void SetTabVisible(bool visible);
/**
* @brief
* @param[in] index
*/
void CloseTab(int index);
/**
* @brief
*/
void CloseAll();
/**
* @brief
* @param[in] dropable
*/
void SetDropable(bool dropable = true);
/**
* @brief
* @return
*/
bool IsDropable();
/**
* @brief
* @param[in] draggable
*/
void SetTabBarDraggable(bool draggable);
public slots:
/**
* @brief Tab页切换的消息
* @param[in] index Tab页面的index
*/
void OnCurrentChanged(int index);
protected:
/**
* @brief Tab被添加的消息
* @param[in] index
*/
virtual void tabInserted(int index);
/**
* @brief Tab被移除的消息
* @param[in] index
*/
virtual void tabRemoved(int index);
/**
* @brief
* @param[in] pEvent
*/
virtual void paintEvent(QPaintEvent *pEvent);
/**
* @brief QWebView类型的tab页面对拖拽页签的处理
* @param[in] pObject
* @param[in] pEvent
* @return
*/
virtual bool eventFilter(QObject *pObject, QEvent *pEvent);
private slots:
/**
* @brief
* @param[in] index
*/
void OnTabClose(int index);
private:
bool m_IsDropableTab; ///< 标签控件标志,否接收拖拽来的页签
QString m_ClosedTabID; ///< 关闭页签ID
signals:
/**
* @brief Tab页的Close按钮被点击时触发
* @param[in] extensionID Tab页面的ID
*/
void TabWillBeClosed(const QString & extensionID);
/**
* @brief tab页都被关闭后触发
* @param[in] areaName TabWidget所占的区域名
*/
void AllTabClosed(QString areaName);
/**
* @brief Tab页切换时触发
* @param[in] extensionID Tab页面的ID
*/
void CurrentTabChanged(const QString & extensionID);
/**
* @brief Tab页时触发
* @param[in] index Tab页的索引
*/
void TabInserted(int index);
/**
* @brief tab页被关闭后触发
* @param[in] extensionID Tab页面的ID
*/
void TabRemoved(const QString & extensionID);
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAITABWIDGET_H