logplus/Workflow/WFWidget/include/PaiDialog.h

206 lines
6.1 KiB
C
Raw Normal View History

2026-01-17 12:55:45 +08:00
/**
* @file PaiDialog.h
* @brief PAI系统默认对话框
* @date 2011-10-17
*/
#ifndef PAI_FRAME_WIDGET_PAIDIALOG_H
#define PAI_FRAME_WIDGET_PAIDIALOG_H
#include <QDialog>
#include <QLayout>
#include <QRubberBand>
#include "PaiTitleBar.h"
#include "Turtle.h"
namespace pai
{
namespace gui
{
/**
* @class PaiDialog
* @brief PAI系统默认对话框
*/
class PAI_WIDGET_EXPORT PaiDialog: public QDialog
{
Q_OBJECT
public:
/**
* @brief
* @param[in] pParent
* @param[in] flags
*/
PaiDialog(QWidget *pParent = NULL, Qt::WindowFlags flags = 0);
/**
* @brief
*/
virtual ~PaiDialog();
/**
* @brief UI或控件可以放到里面
* @return
*/
QWidget* GetContainer();
/**
* @brief TitleBar的显示属性
* @param[in] flags titleBar的flags
*/
void SetTitleBarFlags(PaiTitleBar::TitleBarFlags flags);
/**
* @brief TitleBarFlags
* @return
*/
PaiTitleBar::TitleBarFlags GetTitleBarFlags() const;
/**
* @brief dialog的title,titlebar
* @param[in] windowTitle dialog的title
*/
void setWindowTitle(const QString & windowTitle);
/**
* @brief Layout到当前对话框,Container的Layout
* @param[in] pLayout layout manager
*/
void setLayout(QLayout *pLayout);
/**
* @brief layout,Contgainer的layout
* @return
*/
QLayout* layout() const;
/**
* @brief TitleBar上Logo和系统菜单中间的区域插入Widget
* @param[in] pWidget Widgt
* @param[in] alignment Qt::AlignLeft和Qt::AlignRight
*/
void InsertTitleBarWidget(QWidget *pWidget, Qt::Alignment alignment);
/**
* @brief
* @param[in] constraint
*/
void SetConstraintSize(bool constraint);
/**
* @brief window的Geometry,,window是否是最大化
* @param[in] x x轴坐标
* @param[in] y y轴坐标
* @param[in] with
* @param[in] height
*/
void setGeometry(int x, int y, int with, int height);
/**
* @brief window的Geometry,,window是否是最大化
* @param[in] rect
*/
void setGeometry(const QRect & rect);
/**
* @brief
* @param[in] mode 0:;1:;
*/
static void SetWindowChangeSizeMode(int mode);
public slots:
/**
* @brief
*/
void show();
/**
* @brief
* @return
*/
int exec();
protected:
/**
* @brief
* @param[in] pEvent
*/
virtual void mousePressEvent(QMouseEvent *pEvent);
/**
* @brief
* @param[in] pEvent
*/
virtual void mouseReleaseEvent(QMouseEvent *pEvent);
/**
* @brief
* @param[in] pEvent
*/
virtual void mouseMoveEvent(QMouseEvent *pEvent);
/**
* @brief 100便
* @param[in] pEvent
*/
virtual void timerEvent(QTimerEvent *pEvent);
/**
* @brief
* @param[in] pEvent
*/
virtual void paintEvent(QPaintEvent *pEvent);
private:
/**
* @enum ResizeDirction
* @brief Resize事件中拖动的方向
*/
enum ResizeDirction
{
ResizeDirction_None = 0, ///< 无方向
ResizeDirction_Top = 1, ///< 向上
ResizeDirction_Bottom = 2, ///< 向下
ResizeDirction_Left = 3, ///< 向左
ResizeDirction_Right = 4, ///< 向右
ResizeDirction_TopLeft = 5, ///< 左上
ResizeDirction_TopRight = 6, ///< 右上
ResizeDirction_BottomLeft = 7, ///< 左下
ResizeDirction_BottomRight = 8 ///< 右下
};
/**
* @brief Resize事件之前用来更新鼠标样式
* @param[in] mousePosition
*/
void SetCursorShape(const QPoint & mousePosition);
/**
* @brief Resize事件的实现
* @param[in] mousePosition
*/
void ResizeFrame(const QPoint & mousePosition);
private:
pai::gui::PaiTitleBar *m_pTitleBar; ///< 标题栏
QWidget *m_pContainer; ///< 容器指针
ResizeDirction m_ResizeDirction; ///< 方向
bool m_IsPress; ///< 按压标志
bool m_moved; ///< 窗口大小是否拖动
QRubberBand *m_pRubberBand; ///< 橡皮筋
int m_TimerID; ///< 定时器id
bool m_ConstSize; ///< 因为在设置固定大小后,无法最小化,这里特殊控制一下
static int m_WinChangeSizeMode; ///< 鼠标改变窗体大小方式: 0:鼠标左键弹起后窗体变动;1:鼠标左键按下拖动时,窗体显示实时变动;
static bool m_InitWinChangeSizeMode; ///< 因为当前配置保存在配置文件中,暂时添加此变量表示是否初始化加载配置文件
signals:
/**
* @brief
*/
void CloseButtonClicked();
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAIDIALOG_H