提交头文件

This commit is contained in:
zhaolei 2026-01-17 12:55:45 +08:00
parent e855edcfa8
commit 2adedebde5
28 changed files with 3651 additions and 0 deletions

View File

@ -0,0 +1,130 @@
/**
* @file PaiComboBox.h
* @brief ComboBox控件
* @date 2011-10-17
*/
#ifndef PAI_FRAME_WIDGET_PAICOMBOBOX_H
#define PAI_FRAME_WIDGET_PAICOMBOBOX_H
#include <QComboBox>
#include <QToolButton>
#include <QMargins>
#include "Turtle.h"
namespace pai
{
namespace gui
{
class PaiLineEdit;
}
}
namespace pai
{
namespace gui
{
/**
* @class PaiComboBox
* @brief PaiComboBox是P.A.I系统定制发布的组合框
*/
class PAI_WIDGET_EXPORT PaiComboBox : public QComboBox
{
Q_OBJECT
public:
/**
* @brief
* @param[in] pParent
*/
PaiComboBox(QWidget *pParent = NULL);
/**
* @brief
* @param[in] showAddButton
* @param[in] pParent
*/
PaiComboBox(bool showAddButton, QWidget *pParent = NULL);
/**
* @brief
*/
virtual ~PaiComboBox();
/**
* @brief 使false不使用
* @param[in] flag true 使,
*/
void SetRealTimeValidate(bool flag);
/**
* @brief Editbutton
* @param[in] show true Editbutton
*/
void SetShowAddButton(bool show);
/**
* @brief
*/
virtual void showPopup ();
/**
* @brief
* @return
*/
int GetMaxVisibleItems() const;
/**
* @brief
* @param[in] count
*/
void SetMaxVisibleItems(const int count);
/**
* @brief 使ComboBox设置styleSheet的时候
* 使
* @param[in] styleSheet sytleSheet字符串
*/
void setStyleSheet(const QString & styleSheet);
protected:
/**
* @brief keyPressEvent
* @param[in] pEvent
*/
virtual void keyPressEvent(QKeyEvent *pEvent);
/**
* @brief resizeEvent
* @param[in] pEvent
*/
virtual void resizeEvent (QResizeEvent *pEvent);
/**
* @brief
* @param[in] pEvent
*/
virtual void paintEvent(QPaintEvent *pEvent);
private:
/**
* @brief
*/
void InitComboBox();
private:
PaiLineEdit *m_pLineEdit; ///< 名称编辑框
QToolButton *m_pEditButton; ///< 编辑按钮
bool m_RealTimeValidate; ///< 实时校验标志
bool m_AddButton; ///< 添加按钮
int m_MaxVisibleItems; ///< 最大可视条数
QMargins m_margin; ///< 间隔区域
signals:
/**
* @brief EditButton的点击事件
*/
void EditButtonClicked();
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAICOMBOBOX_H

View File

@ -0,0 +1,205 @@
/**
* @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

View File

@ -0,0 +1,181 @@
/**
* @file PaiHeaderView.h
* @brief PaiHeaderView P.A.I系统定制发布的表头控件
* @attention TableView使用过
*
*******************************************************************
* ENHANCEMENTS *
*******************************************************************
* 1.
* 2.
* @date 2012-01-11
*/
#ifndef PAI_FRAME_WIDGET_PAIHEADERVIEW_H
#define PAI_FRAME_WIDGET_PAIHEADERVIEW_H
#include <QHeaderView>
#include "Turtle.h"
class QToolButton;
class QCheckBox;
namespace pai
{
namespace gui
{
/**
* @class PaiHeaderView
* @brief PAI功能的表格标题栏
*/
class PAI_WIDGET_EXPORT PaiHeaderView: public QHeaderView
{
Q_OBJECT
public:
/**
* @brief
* @param[in] orientation
* @param[in] pParent
*/
PaiHeaderView(Qt::Orientation orientation, QWidget *pParent= NULL);
/**
* @brief
*/
virtual ~PaiHeaderView();
/**
* @brief
* @param[in] selectable
*/
void SetSectionVisibleSelectable(bool selectable);
/**
* @brief
* @param[in] sectionList
*/
void SetUnselectableSections(const QStringList & sectionList);
/**
* @brief PaiSettings记录
*/
void RecallMemberedSections();
/**
* @brief
*/
void RememberCurrentSections();
/**
* @brief ,CheckBox
* @param[in] logicalIndex
* @param[in] checkable
* @param[in] pCheckBox CheckBoxcheckable为false
*/
void SetColumnCheckable(const int logicalIndex, const bool checkable, QCheckBox *pCheckBox = NULL);
/**
* @brief CheckBox的位置
* @param[in] insert true表示插入操作fasle表示删除操作
* @param[in] column
*/
void AdjustCheckBoxMap(bool insert, int column);
protected:
/**
* @brief
* @param[in] pPainter
* @param[in] rect
* @param[in] logicalIndex
*/
void paintSection(QPainter *pPainter, const QRect & rect, int logicalIndex) const;
/**
* @brief 使
* @param[in] pEvent
*/
void resizeEvent(QResizeEvent *pEvent);
/**
* @brief
* @param[in] pEvent
*/
void mousePressEvent (QMouseEvent *pEvent);
private:
/**
* @brief
* @param[in] logicalIndex
* @return
*/
int SectionSuitableWidth(int logicalIndex);
/**
* @brief logical index
* @return
*/
int LastVisibleSection() const;
/**
* @brief If hide is true the section specified by logicalIndex is hidden; otherwise the section is shown
* @param[in] logicalIndex logical index
* @param[in] hide hidden or show
*/
void SetSectionHidden(int logicalIndex, bool hide);
private slots:
/**
* @brief
* @param[in] logicalIndex
* @param[in] oldSize
* @param[in] newSize
*/
void AdjustSectionSuitable(int logicalIndex, int oldSize, int newSize);
/**
* @brief
*/
void ReverseSectionVisible();
/**
* @brief
*/
void ShowSectionVisibleMenu();
/**
* @brief CheckBox选中信号
*/
void CheckBoxStateChanged();
private:
bool m_SectionSelectableVisible; ///< 控制是否可以在表格上可以有选择行的显示某些列的功能
QToolButton *m_pSectionSelectToolButton; ///< 选择显示列按钮
QStringList m_UnselectableSections; ///< 不可以被隐藏的表头名字列表
QMap<int, QCheckBox*> m_ColumnCheckBoxMap; ///< 列序号和对应列的CheckBox的映射
signals:
/**
* @brief
* @param[in] logicalIndex
* @param[in] globalPos
*/
void TitleRightClicked(int logicalIndex, const QPoint & globalPos);
/**
* @brief
* @param[in] logicalIndex
* @param[in] checkstate
*/
void CheckStateChanged(int logicalIndex, Qt::CheckState checkstate);
/**
* @brief
* @param[in] logicalIndex
* @param[in] visible shown or hidden
*/
void SectionVisibleChanged(int logicalIndex, bool visible);
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAIHEADERVIEW_H

View File

@ -0,0 +1,76 @@
/*
* PaiLabel.h
*
* Created on: 2011-10-17
* Author: dev
*/
#ifndef PAI_FRAME_WIDGET_PAILABEL_H
#define PAI_FRAME_WIDGET_PAILABEL_H
#include <QLabel>
#include "Turtle.h"
namespace pai
{
namespace gui
{
/**
* @class PaiLabel
* @brief
*/
class PAI_WIDGET_EXPORT PaiLabel : public QLabel
{
Q_OBJECT
public:
/**
* @enum PromptType
* @brief
*/
enum PromptType
{
PT_Information, ///< 普通信息
PT_Question, ///< 疑问信息
PT_Warning, ///< 警告信息
PT_Error, ///< 错误信息
PT_NO_STYLE_Text, ///< 不设置任何风格的纯文本信息
PT_NO_STYLE ///< 无风格
};
/**
* @brief
* @param[in] pParent
*/
PaiLabel(QWidget *pParent = NULL);
/**
* @brief
* @param[in] text
* @param[in] pParent
*/
PaiLabel(const QString & text, QWidget *pParent = NULL);
/**
* @brief
*/
virtual ~PaiLabel();
/**
* @brief
* @param[in] type
*/
void ShowPromptMessge(PromptType type = PT_Information);
protected:
/**
* @brief
* @param[in] pEvent
*/
virtual void paintEvent(QPaintEvent *pEvent);
private:
PromptType m_PromptType; ///< 显示信息类型
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAILABEL_H

View File

@ -0,0 +1,234 @@
/**
* @file PaiLineEdit.h
* @brief PaiLineEdit是P.A.I系统定制发布的单行文本框控件
* @date 2011-10-21
*/
#ifndef PAI_FRAME_WIDGET_PAILINEEDIT_H
#define PAI_FRAME_WIDGET_PAILINEEDIT_H
#include <QLineEdit>
#include "Turtle.h"
class QTimer;
class QPushButton;
namespace pai
{
class SmartCompleter;
namespace gui
{
/**
* @class PaiLineEdit
* @brief P.A.I系统定制发布的单行文本框控件,便
*/
class PAI_WIDGET_EXPORT PaiLineEdit : public QLineEdit
{
Q_OBJECT
public:
/**
* @enum PromptType
* @brief
*/
enum PromptType
{
PT_NULL, ///< 无提示信息
PT_Information, ///< 普通信息
PT_Question, ///< 疑问信息
PT_Warning, ///< 警告信息
PT_Error ///< 错误信息
};
/**
* @brief
* @param[in] pParent
*/
PaiLineEdit(QWidget *pParent = NULL);
/**
* @brief
* @param[in] text
* @param[in] pParent
*/
PaiLineEdit(const QString & text, QWidget *pParent = NULL);
~PaiLineEdit();
/**
* @brief
* @param[in] validateFailure
*/
void SetValidatorFailureMessage(const QString & validateFailure);
/**
* @brief
* @param[in] exceedMaxLength
*/
void SetExceedMaxLengthMessage(const QString & exceedMaxLength);
/**
* @brief
* @param[in] text
* @note 使 setPlaceholderText()
*/
void setPlaceholderText(const QString & text);
/**
* @brief placeholder
* @return
*/
QString placeholderText() const;
/**
* @brief
* @param[in] message
* @param[in] type
*/
virtual void ShowPromptMessge(const QString & message, PromptType type = PT_Information);
/**
* @brief
* return true false
*/
bool IsEmpty();
/**
* @brief
* @param[in] duration 300
* @note
* returnPressed或editFilished等信号
* 60ms以下60ms以下
*/
void SetEditStopDuration(int duration);
/**
* @brief Completer
* @param[in] pComleter Completer的指针
*/
void SetSmartCompleter(pai::SmartCompleter *pComleter);
/**
* @brief Completer
*/
pai::SmartCompleter *SmartCompleter() const;
protected:
/**
* @brief
* @param[in] iconPath icon路径
*/
void SetRightIcon(const QString & iconPath);
/**
* @brief
* @param[in] inputText
*/
void CheckInput(const QString & inputText);
/**
* @brief mousePressEvent
* @param[in] pEvent
*/
virtual void mousePressEvent(QMouseEvent *pEvent);
/**
* @brief LineEdit
* @return
*/
virtual QSize sizeHint() const;
/**
* @brief
* @param[in] pEvent
*/
virtual void paintEvent(QPaintEvent *pEvent);
/**
* @brief keyReleaseEvent函数
* @param[in] pEvent
*/
virtual void keyReleaseEvent(QKeyEvent *pEvent);
/**
* @brief keyPressEvent函数
* @param[in] pEvent
*/
virtual void keyPressEvent(QKeyEvent *pEvent);
/**
* @brief inputMethodEvent函数
* @param[in] pEvent
*/
virtual void inputMethodEvent(QInputMethodEvent *pEvent);
/**
* @brief contextMenuEvent函数 100
* @param[in] pEvent
*/
virtual void contextMenuEvent(QContextMenuEvent *pEvent);
private:
/**
* @brief
*/
void Init();
/**
* @brief
* @param[in] key
*/
void DealDirectionKey(int key);
private slots:
/**
* @brief
*/
void TextEditingFinished();
/**
* @brief ,SetEditStopDuration(...)
*/
void EmitEditingStoped();
/**
* @brief FuzzyComleter的响应
*/
void InsertCompletion(const QString &completion);
protected:
QString m_PlaceholderText; ///< Placeholder文本
QString m_PromptMessage; ///< 提示信息
QString m_ValidateMessage; ///< 校验信息
QString m_ExceedMaxLengthMessage; ///< 过长信息
PromptType m_PromptType; ///< 提示类型
QTimer *m_pDelayTimer; ///< 用于检查是否停止编辑
QPushButton *m_pRightPBtn; ///< 按钮
pai::SmartCompleter *m_pCompleter; ///< 模糊匹配的
signals:
/**
* @brief
* @param[in] text
*/
void EditingFinished(const QString & text);
/**
* @brief
* @note
* returnPressed或editFilished等信号
* 60ms以下60ms以下
* @param[in] text
*/
void EditingStoped(const QString & text);
/**
* @brief
*/
void RightIconClicked();
/**
*@brief
*/
void LeftMousePress();
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAILINEEDIT_H

View File

@ -0,0 +1,103 @@
/**
* @file PaiListDialog.h
* @brief PAI系统默认列表对话框
* @date 2014-11-25
*/
#ifndef PAI_FRAME_WIDGET_LISTDIALOG_H
#define PAI_FRAME_WIDGET_LISTDIALOG_H
#include <QModelIndex>
#include "PaiDialog.h"
class QListView;
namespace pai
{
namespace gui
{
class PaiPushButton;
class PaiSearchLineEdit;
}
}
namespace pai
{
namespace gui
{
/**
* @class PaiListDialog
* @brief ()
*/
class PAI_WIDGET_EXPORT PaiListDialog : public PaiDialog
{
Q_OBJECT
public:
/**
* @brief
* @param[in] pParent
*/
PaiListDialog(QWidget *pParent = NULL);
/**
* @brief
*/
virtual ~PaiListDialog();
/**
* @brief
* @param[in] textList item文本
*/
void SetTextList(const QStringList & textList);
private:
/**
* @brief
* @param[in] keyword
* @param[in] row
* @return
*/
bool Filter(const QString & keyword, int row);
private slots:
/**
* @brief
* @param[in] keyword
*/
void OnSearchData(const QString & keyword);
/**
* @brief ok按钮调用的槽
*/
void OkButtonClicked();
/**
* @brief item被双击时执行的槽
* @param[in] index item的索引
*/
void ItemDoubleClicked(const QModelIndex & index);
/**
* @brief
* @param[in] current
* @param[in] previous
*/
void EnableOkButton(const QModelIndex & current, const QModelIndex & previous);
private:
PaiSearchLineEdit *m_pSearchLineEdit;///< 搜索框
QListView *m_pListWgt; ///< 列表显示框
PaiPushButton *m_pOkPBtn; ///< ok按钮
PaiPushButton *m_pCancelPBtn; ///< cancel按钮
signals:
/**
* @brief ok按钮发送的信号
* @param[in] text item文本
*/
void SelectedAccepted(const QString & text);
};
}
}
#endif ///< PAI_FRAME_WIDGET_LISTDIALOG_H

View File

@ -0,0 +1,46 @@
/**
* @file PaiListItemDelegate.h
* @brief PAI系统ListItem默认风格
* @date 2014-11-25
*/
#ifndef PAI_FRAME_WIDGET_PAILISTITEMDELEGATE_H
#define PAI_FRAME_WIDGET_PAILISTITEMDELEGATE_H
#include <QStyledItemDelegate>
#include <QPen>
class QListView;
namespace pai
{
namespace gui
{
/**
* @class PaiListItemDelegate
* @brief PAI风格 listItem delegate
*/
class PaiListItemDelegate: public QStyledItemDelegate
{
public:
/**
* @brief
* @param[in] pParent
*/
PaiListItemDelegate(QObject *pParent = NULL);
protected:
/**
* @brief
* @param[in] pPainter
* @param[in] option
* @param[in] index Model
*/
void paint(QPainter *pPainter, const QStyleOptionViewItem & option, const QModelIndex & index) const;
private:
QPen m_GridPen; ///< 画笔
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAILISTITEMDELEGATE_H

View File

@ -0,0 +1,109 @@
/**
* @file PaiMenuToolBar.h
* @brief
* @date 2011-08-23
*/
#ifndef PAI_FRAME_WIDGET_PAIMENUTOOLBAR_H
#define PAI_FRAME_WIDGET_PAIMENUTOOLBAR_H
#include <QMenu>
#include "PaiToolBar.h"
#include "Turtle.h"
namespace pai
{
namespace gui
{
class MenuToolButton;
}
}
namespace pai
{
namespace gui
{
/**
* @class PaiMenuToolBar
* @brief P.A.I系统的插件的内容区通常有一个带菜单的工具栏
*/
class PAI_WIDGET_EXPORT PaiMenuToolBar:public pai::gui::PaiToolBar
{
Q_OBJECT
public:
/**
* @brief
* @param[in] title
* @param[in] pParent
*/
PaiMenuToolBar(const QString & title,QWidget *pParent);
/**
* @brief
*/
virtual ~PaiMenuToolBar();
/**
* @brief
* @return
*/
QMenu* GetMenu() const;
/**
* @brief
* @return
*/
QMenu* GetViewsMenu() const;
/**
* @brief
* @param[in] flag
*/
void setMenuButtonVisible(bool flag);
/**
* @brief
* @param[in] name
* @param[in] viewID ID
*/
void AddViewsMenuAction(QString & name, std::string viewID);
/**
* @brief
* @param[in] viewID ID
* @param[in] checked
*/
void SetViewMenuChecked(const QString & viewID, bool checked);
/**
* @brief Menu列表内容
* @param[in] isVisible Menu控件
*/
void Clear(bool isVisible);
public slots:
/**
* @brief TabWidget
* @param[in] extensionID ID
*/
void CloseTabWidget(const QString & extensionID);
protected:
/**
* @brief
* @param[in] pEvent
*/
virtual void paintEvent(QPaintEvent *pEvent);
private:
QMenu *m_pRootMenu; ///< 根菜单
QMenu *m_pViewsMenu; ///< 视图菜单栏
MenuToolButton *m_pMenuButton; ///< 菜单按钮
QAction *m_pMenuButtonAct;///< 菜单Action
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAIMENUTOOLBAR_H

View File

@ -0,0 +1,322 @@
/**
* @file PaiMessageBox.h
* @brief MessageBox对话框
* @date 2012-03-06
*/
#ifndef PAI_FRAME_PIPROJECTMANAGEMENT_PAIMESSAGEBOX_H
#define PAI_FRAME_PIPROJECTMANAGEMENT_PAIMESSAGEBOX_H
#include <QMap>
#include "PaiDialog.h"
#include "Turtle.h"
class QLabel;
namespace pai
{
namespace gui
{
class PaiPushButton;
class PaiTextEdit;
}
}
namespace pai
{
namespace gui
{
/**
* @class PaiMessageBox
* @brief MessageBox对话框
*/
class PAI_WIDGET_EXPORT PaiMessageBox : public PaiDialog
{
Q_OBJECT
Q_ENUMS(Icon)
Q_FLAGS(StandardButtons)
public:
/**
* @enum Icon
* @brief
*/
enum Icon
{
Icon_None = 0, ///< 无图标
Icon_Information = 1, ///< 信息图标
Icon_Warning = 2, ///< 警告图标
Icon_Critical = 3, ///< 错误图标
Icon_Question = 4 ///< 提问图标
};
/**
* @enum StandardButton
* @brief
*/
enum StandardButton
{
NoButton = 0x00000000, ///< 无按钮
Ok = 0x00000400, ///< OK按钮
Save = 0x00000800, ///< 保存按钮
SaveAll = 0x00001000, ///< 保存所有按钮
Open = 0x00002000, ///< 打开按钮
Yes = 0x00004000, ///< Yes按钮
YesToAll = 0x00008000, ///< Yes to all 按钮
No = 0x00010000, ///< NO按钮
NoToAll = 0x00020000, ///< NO to all 按钮
Abort = 0x00040000, ///< 忽略按钮
Retry = 0x00080000, ///< 重试按钮
Ignore = 0x00100000, ///< 忽略按钮
Close = 0x00200000, ///< 关闭按钮
Cancel = 0x00400000, ///< 取消按钮
Discard = 0x00800000, ///< 打开按钮
Help = 0x01000000, ///< 放弃按钮
Apply = 0x02000000, ///< 应用按钮
Reset = 0x04000000, ///< 重置按钮
RestoreDefaults = 0x08000000, ///< 恢复默认按钮
FirstButton = Ok, ///< 首个按钮
LastButton = RestoreDefaults///< 末尾按钮
};
Q_DECLARE_FLAGS(StandardButtons, StandardButton)
/**
* @brief
* @param[in] pParent
*/
PaiMessageBox(QWidget *pParent = NULL);
/**
* @brief
* @param[in] icon
* @param[in] title
* @param[in] text
* @param[in] buttons 使
* @param[in] pParent
* @param[in] flag
*/
PaiMessageBox(Icon icon,
const QString & title,
const QString & text,
StandardButtons buttons = NoButton,
QWidget *pParent = NULL,
Qt::WindowFlags flag = Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint);
/**
* @brief
* @param[in] icon
* @param[in] title
* @param[in] text
* @param[in] details TextEdit来显示
* @param[in] buttons 使
* @param[in] pParent
* @param[in] flag
*/
PaiMessageBox(Icon icon,
const QString & title,
const QString & text,
const QString & details,
StandardButtons buttons = NoButton,
QWidget *pParent = NULL,
Qt::WindowFlags flag = Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint);
/**
* @brief
*/
virtual ~PaiMessageBox ();
/**
* @brief
* @param[in] icon
*/
void SetIcon(Icon icon);
/**
* @brief
* @param[in] buttons
*/
void SetStandardButtons(StandardButtons buttons);
/**
* @brief
* @param[in] button
*/
void SetDefaultButton(StandardButton button);
/**
* @brief
* @param[in] text
*/
void SetText(const QString & text);
/**
* @brief
* @param[in] text
*/
void SetDetailedText(const QString & text);
/**
* @brief
* @param[in] button
* @param[in] name
*/
void SetStandardButtonName(StandardButton button, const QString & name);
/**
* @brief
* @return
*/
QString GetDetailedText() const;
/**
* @brief
* @param[in] pParent
* @param[in] title
* @param[in] text
* @param[in] buttons 使
* @param[in] defaultButton
* @return
*/
static StandardButton Information(QWidget *pParent,
const QString & title,
const QString & text,
StandardButtons buttons = Ok,
StandardButton defaultButton = NoButton);
/**
* @brief
* @param[in] pParent
* @param[in] title
* @param[in] text
* @param[in] buttons 使
* @param[in] defaultButton
* @return
*/
static StandardButton Question(QWidget *pParent,
const QString & title,
const QString & text,
StandardButtons buttons = Ok,
StandardButton defaultButton = NoButton);
/**
* @brief
* @param[in] pParent
* @param[in] title
* @param[in] text
* @param[in] buttons 使
* @param[in] defaultButton
* @return
*/
static StandardButton Warning(QWidget *pParent,
const QString & title,
const QString & text,
StandardButtons buttons = Ok,
StandardButton defaultButton = NoButton);
/**
* @brief
* @param[in] pParent
* @param[in] title
* @param[in] text
* @param[in] buttons 使
* @param[in] defaultButton
* @return
*/
static StandardButton Critical(QWidget *pParent,
const QString & title,
const QString & text,
StandardButtons buttons = Ok,
StandardButton defaultButton = NoButton);
protected:
/**
* @brief 退
* @param[in] pEvent
*/
void closeEvent(QCloseEvent *pEvent);
private:
/**
* @brief
* @param[in] pParent
* @param[in] title
* @param[in] text
* @param[in] buttons 使
* @param[in] defaultButton
*/
static StandardButton ShowNewMessageBox(QWidget *pParent,
Icon icon,
const QString & title,
const QString & text,
StandardButtons buttons,
StandardButton defaultButton);
/**
* @brief
*/
void InitDialog();
/**
* @brief
* @param[in] button
* @return
*/
QString GetStandardButtonText(StandardButton button);
/**
* @brief ,使
* RestoreButtonPos来调整布局
* @param[in] button
* @return
*/
PaiPushButton* AddButton(StandardButton button);
/**
* @brief
*/
void RestoreButtonPos();
/**
* @brief
* @return
*/
StandardButton DetectedEscapeButton();
/**
* @brief button
* @param[in] button
*/
void SetResutlButton(StandardButton button);
private slots:
/**
* @brief
*/
void ButtonClicked();
private:
QLabel *m_pIconLabel; ///< 图标标签
QLabel *m_pTextLabel; ///< 文本标签
QWidget *m_pBtnWgt; ///< 按钮组件
PaiTextEdit *m_pDetailsTEdit; ///< 文本编辑组件
QMap<StandardButton, PaiPushButton*> m_FlagToBtn; ///< 标记和对应的按钮映射
QList<StandardButton> m_BtnPos; ///< separate left and right with NoButton
QList<StandardButton> m_EscapeBtns; ///< 退出按钮
QMap<StandardButton, QString> m_BtnNames; ///< the name of the standard button
signals:
/**
* @brief
* @param[in] button
*/
void ButtonClicked(StandardButton button);
};
}
}
Q_DECLARE_OPERATORS_FOR_FLAGS(pai::gui::PaiMessageBox::StandardButtons)
#endif ///< PAI_FRAME_PIPROJECTMANAGEMENT_PAIMESSAGEBOX_H

View File

@ -0,0 +1,63 @@
/**
* @file PaiPromptLineEdit.h
* @brief LineEdit的输入框控件
* @date 2013-10-12
*/
#ifndef PAI_FRAME_WIDGET_PAIPROMPTLINEEDIT_H
#define PAI_FRAME_WIDGET_PAIPROMPTLINEEDIT_H
#include "PaiLineEdit.h"
namespace pai
{
namespace gui
{
class PaiLabel;
}
}
#include "Turtle.h"
namespace pai
{
namespace gui
{
/**
* @class PaiPromptLineEdit
* @brief PaiPromptLineEdit
*/
class PAI_WIDGET_EXPORT PaiPromptLineEdit : public PaiLineEdit
{
Q_OBJECT
public:
/**
* @brief
* @param[in] pParent
*/
PaiPromptLineEdit(QWidget *pParent = NULL);
/**
* @brief
*/
virtual ~PaiPromptLineEdit();
/**
* @brief label的信息
* @param[in] pLabel
*/
void SetPromptLabel(PaiLabel *pLabel);
/**
* @brief
* @param[in] message
* @param[in] type
*/
virtual void ShowPromptMessge(const QString & message, PromptType type = PT_Information);
private:
pai::gui::PaiLabel *m_pMessageLabel; ///< 信息标签
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAIPROMPTLINEEDIT_H

View File

@ -0,0 +1,91 @@
/*
* PaiPushButton.h
*
* Created on: 2012-1-31
* Author: dev
*/
#ifndef PAI_FRAME_WIDGET_PAIPUSHBUTTON_H
#define PAI_FRAME_WIDGET_PAIPUSHBUTTON_H
#include <QPushButton>
#include "Turtle.h"
namespace pai
{
namespace gui
{
/**
* @class PaiPushButton
* @brief PaiPushButton是P.A.I系统定制发布的按钮
*/
class PAI_WIDGET_EXPORT PaiPushButton : public QPushButton
{
Q_OBJECT
public:
/**
* @brief
*/
virtual ~PaiPushButton();
/**
* @brief
* @param[in] pParent
*/
PaiPushButton(QWidget *pParent = NULL);
/**
* @brief
* @param[in] text
* @param[in] pParent
*/
PaiPushButton(const QString & text, QWidget *pParent = NULL);
/**
* @brief
* @param[in] icon
* @param[in] text
* @param[in] pParent
*/
PaiPushButton(const QIcon & icon, const QString & text, QWidget *pParent = NULL);
/**
* @brief
* @param[in] pPopupCenterWidget
*/
void SetPopupWidget(QWidget *pPopupCenterWidget);
public slots:
/**
* @brief
*/
void ClosePopupWidget();
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 paintEvent(QPaintEvent *pEvent);
private:
QWidget *m_pPopupWidget; ///< 弹出窗口器件对象
QWidget *m_pPopupFrame; ///< 弹出窗口器件的容器对象
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAIPUSHBUTTON_H

View File

@ -0,0 +1,39 @@
/**
* @file PaiRadioButton.h
* @brief PaiRadioButton是P.A.I系统定制发布的单选按钮
* @date 2012-01-31
*/
#ifndef PAI_FRAME_WIDGET_PAIRADIOBUTTON_H
#define PAI_FRAME_WIDGET_PAIRADIOBUTTON_H
#include <QRadioButton>
#include "Turtle.h"
namespace pai
{
namespace gui
{
/**
* @class PaiRadioButton
* @brief PaiRadioButton是P.A.I系统定制发布的单选按钮
*/
class PAI_WIDGET_EXPORT PaiRadioButton : public QRadioButton
{
Q_OBJECT
public:
/**
* @brief
* @param[in] parent
*/
PaiRadioButton(QWidget *parent = 0);
/**
* @brief
* @param[in] text
* @param[in] parent
*/
PaiRadioButton(const QString &text, QWidget *parent = 0);
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAIRADIOBUTTON_H

View File

@ -0,0 +1,64 @@
/**
* @file PaiSearchLineEdit.h
* @brief LineEdit控件
*/
#ifndef PAI_FRAME_WIDGET_PAISEARCHLINEEDIT_H
#define PAI_FRAME_WIDGET_PAISEARCHLINEEDIT_H
#include "PaiLineEdit.h"
#include "Turtle.h"
class QPushButton;
namespace pai
{
namespace gui
{
/**
* @class PaiSearchLineEdit
* @brief LineEdit
*/
class PAI_WIDGET_EXPORT PaiSearchLineEdit : public PaiLineEdit
{
Q_OBJECT
public:
/**
* @brief
* @param[in] pParent
*/
PaiSearchLineEdit(QWidget *pParent = NULL);
/**
* @brief
*/
virtual ~PaiSearchLineEdit();
/**
* @brief
* @param[in] icon
*/
void UpdateRightIcon(const QIcon & icon);
protected:
/**
* @brief
* @param[in] pEvent
*/
virtual void enterEvent(QEvent *pEvent);
private slots:
/**
* @brief
*/
void SetCurrentIcon();
/**
* @brief
*/
void CleanSearchBox();
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAISEARCHLINEEDIT_H

View File

@ -0,0 +1,56 @@
/**
* @file PaiSpinBox.h
* @brief PaiSpinBox是P.A.I系统定制发布的微调文本框控件
* @date 2011-10-23
*/
#ifndef PAI_FRAME_WIDGET_PAISPINBOX_H
#define PAI_FRAME_WIDGET_PAISPINBOX_H
#include <QSpinBox>
#include "Turtle.h"
namespace pai
{
namespace gui
{
/**
* @class PaiSpinBox
* @brief PaiTextEdit是P.A.I系统定制发布的微调文本框控件
*/
class PAI_WIDGET_EXPORT PaiSpinBox : public QSpinBox
{
Q_OBJECT
public:
/**
* @enum EControlStyle
* @brief
*/
enum EControlStyle
{
ErrorFlag = 0x1 ///< 标志该文本框包含了错误信息,边框变为红色
};
/**
* @brief
* @param[in] pParent
*/
PaiSpinBox(QWidget *pParent = NULL);
/**
* @brief
* @param[in] style
* @param[in] has true表示要设置false指示要取消
*/
void SetStyle(pai::gui::PaiSpinBox::EControlStyle style, bool has);
protected:
/**
* @brief
* @param[in] input
*/
virtual void fixup(QString & input) const;
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAISPINBOX_H

View File

@ -0,0 +1,266 @@
/**
* @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

View File

@ -0,0 +1,67 @@
/*
* @file PaiTableItemDelegate.h
* @brief PAI系统中常见的节点绘制类
* @date 2012-10-16
*/
#ifndef PAI_FRAME_WIDGET_PAITABLEITEMDELEGATE_H
#define PAI_FRAME_WIDGET_PAITABLEITEMDELEGATE_H
#include <QStyledItemDelegate>
#include <QPen>
#include <QTableView>
#include "Turtle.h"
namespace pai
{
namespace gui
{
/**
* @class PaiTableItemDelegate
* @brief PAI item delegate grid line, cell的颜色
*/
class PAI_WIDGET_EXPORT PaiTableItemDelegate: public QStyledItemDelegate
{
public:
/**
* @enum DATA_ROLE
* @brief
*/
enum DATA_ROLE
{
HOVERING_ROLE = 1024 ///< 悬浮
};
public:
/**
* @brief
* @param[in] pTableView QTableView
*/
PaiTableItemDelegate(QTableView *pTableView);
/**
* @brief 线
* @param[in] horizontal 线
* @param[in] verticalLine 线
*/
virtual void setShowGrid(bool horizontal, bool verticalLine);
protected:
/**
* @brief
* @param[in] pPainter
* @param[in] option
* @param[in] index
*/
virtual void paint(QPainter *pPainter, const QStyleOptionViewItem & option, const QModelIndex & index) const;
private:
QPen m_GridPen; ///< 网格画笔
bool m_HorizontalLine; ///< 水平线
bool m_VerticallLine; ///< 垂直线
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAITABLEITEMDELEGATE_H

View File

@ -0,0 +1,208 @@
/**
* @file PaiTableWidget.h
* @brief PaiTableWidget P.A.I系统定制发布的表格控件
* @date 2012-04-27
*/
#ifndef PAI_FRAME_WIDGET_PAITABLEWIDGET_H
#define PAI_FRAME_WIDGET_PAITABLEWIDGET_H
#include <QTableWidget>
#include <QContextMenuEvent>
#include "Turtle.h"
class QCheckBox;
namespace pai
{
namespace gui
{
/**
* @class PaiTableWidget
* @brief PaiTableWidget P.A.I系统定制发布的表格控件
*/
class PAI_WIDGET_EXPORT PaiTableWidget : public QTableWidget
{
Q_OBJECT
public:
/**
* @brief
* @param[in] pParent
*/
PaiTableWidget(QWidget *pParent = NULL);
/**
* @brief
*/
virtual ~PaiTableWidget();
/**
* @brief
* @param[in] ok
* @param[in] maxRowCount
*/
void SetAutoHeight(const bool ok, const int maxRowCount = 10);
/**
* @brief
* @param[in] rowIndex
* @param[in] count ,
*/
void RemoveRows(const int rowIndex, const int count);
/**
* @brief
*/
void RemoveRows();
/**
* @brief
* @param[in] horizontalLine 线
* @param[in] verticalLine 线
*/
virtual void setShowGrid(bool horizontalLine, bool verticalLine);
/**
* @brief
* @param[in] message
*/
void ShowPromptMessage(const QString & message);
/**
* @brief
* @param[in] message
*/
void SetFilterEmptyMessage(const QString & message);
/**
* @brief
* @param[in] selectable
*/
void SetColumnVisibleSelectable(bool selectable);
/**
* @brief
* @param[in] columnList
*/
void SetUnselectableColumns(const QStringList & columnList);
/**
*@brief
*/
void RecallMemberedSections();
/**
* @brief ,CheckBox.()
* @param[in] logicalIndex
* @param[in] checkable
* @param[in] pCheckBox CheckBoxcheckable为false
*/
void SetColumnCheckable(const int logicalIndex, const bool checkable, QCheckBox *pCheckBox = NULL);
public slots:
/**
* @brief
* @param[in] keyword
* @param[in] column
*/
void Filter(const QString & keyword, int column = 0);
/**
* @brief
* @param[in] keyword
* @param[in] columns
* @param[in] ignoreLines
*/
void Filter(const QString & keyword, QList<int> columns, QList<int> ignoreLines = QList<int>());
/**
* @brief 使HeaderView的CheckBox
* @param[in] column
*/
void insertColumn(int column);
/**
* @brief 使HeaderView的CheckBox
* @param[in] column
*/
void removeColumn(int column);
protected:
/**
* @brief
* @param[in] rowIndex
* @return
*/
virtual bool Filter(int rowIndex);
/**
* @brief
* @param[in] pEvent
*/
virtual void paintEvent(QPaintEvent *pEvent);
/**
* @brief
* @param[in] pEvent
*/
virtual void contextMenuEvent(QContextMenuEvent *pEvent);
/**
* @brief
* @param[in] pEvent
*/
virtual void keyPressEvent(QKeyEvent *pEvent);
private:
/**
* @brief
*/
void RememberCurrentSections();
private slots:
/**
* @brief
*/
void ResetTableHeight();
/**
* @brief
*/
void RowCountChanged();
/**
* @brief
*/
void SetClipboard();
/**
* @brief
* @param[in] pItem
*/
void TableItemChanged(QTableWidgetItem *pItem);
protected:
QString m_FilterKeyword; ///< 最近一次过滤的关键字
private:
bool m_AutoHeight; ///< 自动调整高度
bool m_ShowFilterEmptyMessage; ///< 显示搜索空提示
int m_AutoHeightMaxRowCount; ///< 最大行数
QString m_MessageWhileFilterEmpty; ///< 空提示文本
QString m_PromptMessage; ///< 提示文本
QList<int> m_FilterColumns; ///< 最近一次过滤的的列
QList<int> m_IgnoreLines; ///< 最近一次忽略搜索的行
int m_IgnoreHeight; ///< 忽略行的高度,用于显示提示信息
signals:
/**
* @brief
* @param[in] count
*/
void RowCountChanged(const int count);
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAITABLEWIDGET_H

View File

@ -0,0 +1,56 @@
/**
* @file PaiTextEdit.h
* @brief PaiTextEdit是P.A.I系统定制发布的多行文本框控件
* @date 2011-10-22
*/
#ifndef PAI_FRAME_WIDGET_PAITEXTEDIT_H
#define PAI_FRAME_WIDGET_PAITEXTEDIT_H
#include <QTextEdit>
#include "Turtle.h"
namespace pai
{
namespace gui
{
/**
* @class PaiTextEdit
* @brief PaiTextEdit是P.A.I系统定制发布的多行文本框控件
*/
class PAI_WIDGET_EXPORT PaiTextEdit : public QTextEdit
{
public:
/**
* @enum EControlStyle
* @brief
*/
enum EControlStyle
{
ErrorFlag = 0x1 ///< 标志该文本框包含了错误信息,边框变为红色
};
/**
* @brief
* @param[in] pParent
*/
PaiTextEdit(QWidget *pParent = NULL);
/**
* @brief
* @param[in] text
* @param[in] pParent
*/
PaiTextEdit(const QString & text, QWidget *pParent = NULL);
/**
* @brief
* @param[in] style
* @param[in] has true表示要设置false指示要取消
*/
void SetStyle(pai::gui::PaiTextEdit::EControlStyle style, bool has);
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAITEXTEDIT_H

View File

@ -0,0 +1,201 @@
/*
* @file PaiTitleBar.h
* @brief
* @date 2012-11-29
*/
#ifndef PAI_FRAME_WIDGET_PAITITLEBAR_H
#define PAI_FRAME_WIDGET_PAITITLEBAR_H
#include <QStatusBar>
#include <QWidget>
#include "Turtle.h"
namespace pai
{
namespace gui
{
class PaiToolButton;
}
}
class QMenu;
class QHBoxLayout;
namespace pai
{
namespace gui
{
/**
* @class PaiStatusBar
* @brief PAI
*/
class PAI_WIDGET_EXPORT PaiStatusBar: public QStatusBar
{
public:
/**
* @brief
* @param[in] pParent
*/
PaiStatusBar(QWidget *pParent = NULL);
/**
* @brief
*/
virtual ~PaiStatusBar();
};
/**
* @class PaiTitleBar
* @brief PAI
*/
class PAI_WIDGET_EXPORT PaiTitleBar: public QWidget
{
Q_OBJECT
Q_FLAGS(TitleBarFlags)
public:
/**
* @enum TitleBarFlag
* @brief Title Bar
*/
enum TitleBarFlag
{
CloseButtonHint = 0x01, ///< 关闭按钮可视化标志
MaximumButtonHint = 0x02, ///< 最大化按钮可视化标志
MinimumButtonHint = 0x04, ///< 最小化按钮可视化标志
LogoButtonHint = 0x08 ///< logo按钮可视化标志
};
Q_DECLARE_FLAGS(TitleBarFlags, TitleBarFlag)
/**
* @brief
* @param[in] pParent
*/
PaiTitleBar(QWidget *pParent = NULL);
/**
* @brief
*/
virtual ~PaiTitleBar();
/**
* @brief titleBar的title
* @param[in] title title
*/
void SetTitle(const QString & title);
/**
* @brief titleBar的flagbutton的隐藏
* @param[in] flags titleBar的flags
*/
void SetTitleBarFlags(TitleBarFlags flags);
/**
* @brief TitleBarFlags
* @return
*/
PaiTitleBar::TitleBarFlags GetTitleBarFlags() const;
/**
* @brief system menu
* @param[in] pMenu
*/
void CreateSystemMenu(QMenu *pMenu);
/**
* @brief Logo和系统菜单中间的区域插入Widget
* @param[in] pWidget Widgt
* @param[in] alignment Qt::AlignLeft和Qt::AlignRight
*/
void InsertWidget(QWidget *pWidget, Qt::Alignment alignment);
/**
* @brief restore图标状态
* @param[in] maximized
*/
void ChangeRestoreButtonState(bool maximized);
protected:
/**
* @brief paint事件
* @param[in] pEvent
*/
virtual void paintEvent(QPaintEvent *pEvent);
/**
* @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
* @param[in] pEvent
*/
virtual void mouseDoubleClickEvent(QMouseEvent *pEvent);
/**
* @brief resize事件
* @param[in] pEvent
*/
virtual void resizeEvent(QResizeEvent *pEvent);
protected slots:
/**
* @brief restore图标状态
*/
void ChangeRestoreButtonState();
private:
/**
* @brief titlebar的宽幅和m_iTitleNameCenterStand进行比较,titlebar标题文字显示区域
* @param[in] pixelTitle
* @return titlebar标题文字显示区域
*/
QRect GetTitleNameRect(int pixelTitle);
private:
QPoint m_MovePosition; ///< 鼠标点击的坐标用于拖动titleBar所在的mainFrame
QString m_title; ///< 显示的title
PaiToolButton *m_pExitButton; ///< 退出按钮
PaiToolButton *m_pMaximumButton; ///< 最大按钮
PaiToolButton *m_pMinimumButton; ///< 最小按钮
PaiToolButton *m_pLogoButton; ///< Logo按钮
QHBoxLayout *m_pRightHLayout; ///< 为了方便向右侧插入窗体
QHBoxLayout *m_pLeftHLayout; ///< 为了方便向左侧插入窗体
TitleBarFlags m_titleBarFlags; //< 标题按钮是否显示的flag
signals:
/**
* @brief Exit按钮被点击的时候发出此信号
*/
void HandleExitButton();
/**
* @brief Minimum按钮被点击的时候发出此信号
*/
void HandleMinimumButton();
/**
* @brief Maximum按钮被点击的时候发出此信号
*/
void HandleMaximumButton();
};
}
}
Q_DECLARE_OPERATORS_FOR_FLAGS(pai::gui::PaiTitleBar::TitleBarFlags) ///< 此句必须放在命名控件之外
#endif ///< PAI_FRAME_WIDGET_PAITITLEBAR_H

View File

@ -0,0 +1,127 @@
/**
* @file PaiToolBar.h
* @brief
* @date 2011-9-16
*/
#ifndef PAI_FRAME_WIDGET_PAITOOLBAR_H
#define PAI_FRAME_WIDGET_PAITOOLBAR_H
#include <QToolBar>
#include <QWidgetAction>
#include "Turtle.h"
/**
* @brief BEGIN_PAITOOLBAR_WIDGET这个宏为自定义控件创建QWidgetAction END_PAITOOLBAR_WIDGET使用
* @param[out] pWidget QAction指针
* @param[in] pObject1 Action的指针,使NULL使R1R2变量
* @param[in] pObject2 Action的指针
*/
#define BEGIN_PAITOOLBAR_WIDGET(pWidget, pObject1, pObject2) \
QAction *pWidget = NULL; \
{ \
QObject *pTmpReceiver1 = pObject1; \
QObject *pTmpReceiver2 = pObject2; \
class Local_Widget_Action : public QWidgetAction \
{ \
public: \
Local_Widget_Action(QObject *pReceiver1, QObject *pReciever2, QObject *pParent = NULL) : \
QWidgetAction(pParent), \
pR1(pReceiver1), \
pR2(pReciever2){} \
virtual QWidget* createWidget(QWidget *pParent) {
/**
* @brief QWidgetAction
* @param[out] pWidget QAction指针
*/
#define END_PAITOOLBAR_WIDGET(pWidget) \
pWidget->setParent(pParent); \
return pWidget;} \
QObject *pR1, pR2; \
}* pAction = new Local_Widget_Action (pTmpReceiver1, pTmpReceiver2); \
pWidget = pAction; \
}
namespace pai
{
namespace gui
{
/**
* @class PaiToolBar
* @brief P.A.I
*/
class PAI_WIDGET_EXPORT PaiToolBar : public QToolBar
{
public:
/**
* @brief
* @param[in] pParent
*/
PaiToolBar(QWidget *pParent = NULL);
/**
* @brief
* @param[in] title
* @param[in] pParent
*/
PaiToolBar(const QString & title, QWidget *pParent = NULL);
/**
* @brief
*/
virtual ~PaiToolBar();
/**
* @brief
* @param[in] top
* @param[in] bottom
* @param[in] left
* @param[in] right
*/
void ShowBorder(bool top, bool bottom, bool left, bool right);
/**
* @brief 使QAction靠右
* @return QActionUnregister
*/
QAction* AddSpacer();
/**
* @brief
* @param[in] margin
*/
void SetLeftMargin(int margin);
/**
* @brief space
* @param[in] space 4
* @return Action
*/
QAction* AddConstSpace(int space = 4);
protected:
/**
* @brief ToolBar
* @param[in] pEvent
*/
virtual void paintEvent(QPaintEvent *pEvent);
private:
/**
* @brief ToolBar
*/
void InitToolBar();
private:
bool m_ShowTopEdge; ///< 显示上方边界
bool m_ShowBottomEdge; ///< 显示下方边界
bool m_ShowLeftEdge; ///< 显示左方边界
bool m_ShowRightEdge; ///< 显示右方边界
QWidget *m_pLeftMarginWgt; ///< 用来支撑left margin
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAITOOLBAR_H

View File

@ -0,0 +1,110 @@
/**
* @file PaiToolBarView.h
* @brief P.A.I
* @date 2011-09-16
*/
#ifndef PAI_FRAME_WIDGET_PAITOOLBARVIEW_H
#define PAI_FRAME_WIDGET_PAITOOLBARVIEW_H
#include <QWidget>
#include "Turtle.h"
class QVBoxLayout;
class QToolBar;
namespace pai
{
/**
* @class PaiToolBarView
* @brief P.A.I
*/
class PAI_WIDGET_EXPORT PaiToolBarView : public QWidget
{
public:
/**
* @enum EToolBarType
* @brief
*/
enum EToolBarType
{
NORMAL_TOOLBAR = 40, ///< 普通风格
SMALL_TOOLBAR = 28 ///< 小模式ToolBar
};
/**
* @brief
* @param[in] pParent
* @param[in] type
*/
PaiToolBarView(QWidget *pParent = NULL, EToolBarType type = NORMAL_TOOLBAR);
/**
* @brief
*/
virtual ~PaiToolBarView();
/**
* @brief
* @return
*/
QWidget* GetViewport();
/**
* @brief parent将会视为这个类的对象
* @param[in] pWidget
*/
void SetViewport(QWidget *pWidget);
/**
* @brief
* @param[in] pToolBar
* @param[in] type
*/
void AddToolBar(QToolBar *pToolBar, EToolBarType type = NORMAL_TOOLBAR);
/**
* @brief
* @param[in] pToolBar
*/
void RemoveToolBar(QToolBar *pToolBar);
/**
* @brief
* @return
*/
QList<QToolBar*> GetToolBars();
/**
* @brief QAction
* @param[in] pAction action对象
* @param[in] pToolBar
*/
void AddAction(QAction *pAction, QToolBar *pToolBar = NULL);
/**
* @brief QWidget
* @param[in] pWidget widget对象
* @param[in] pToolBar
*/
void AddWidget(QWidget *pWidget, QToolBar *pToolBar = NULL);
/**
* @brief ToolButton(toolbar有2个固定的值所以可以将toolbutton设置为固定的大小)
* @param[in] pToolButton toolbutton对象
* @param[in] pToolBar
*/
void AddToolButton(QWidget *pToolButton, QToolBar *pToolBar = NULL);
private:
QWidget *m_pToolBarArea; ///< 工具栏区域
QWidget *m_pViewport; ///< 视图
QList<QToolBar*> m_ToolBars; ///< 工具栏
QVBoxLayout *m_pMainVLayout; ///< 主布局
QVBoxLayout *m_pToolBarLayout; ///< 工具栏布局
};
}
#endif ///< PAI_FRAME_WIDGET_PAITOOLBARVIEW_H

View File

@ -0,0 +1,76 @@
/**
* @file PaiToolButton.h
* @brief PaiToolButton是P.A.I系统定制发布的工具按钮
* @date 2012-1-31
*/
#ifndef PAI_FRAME_WIDGET_PAITOOLBUTTON_H
#define PAI_FRAME_WIDGET_PAITOOLBUTTON_H
#include <QToolButton>
#include "Turtle.h"
namespace pai
{
namespace gui
{
/**
* @class PaiToolButton
* @brief PaiToolButton是P.A.I系统定制发布的工具按钮
*/
class PAI_WIDGET_EXPORT PaiToolButton : public QToolButton
{
Q_OBJECT
public:
/**
* @brief
*/
virtual ~PaiToolButton();
/**
* @brief
* @param[in] pParent
*/
PaiToolButton(QWidget *pParent = NULL);
/**
* @brief
* @param[in] icon
* @param[in] pParent
*/
PaiToolButton(const QIcon & icon, QWidget *pParent = NULL);
/**
* @brief
* @param[in] pPopupCenterWidget
*/
void SetPopupWidget(QWidget *pPopupCenterWidget);
protected:
/**
* @brief
* @param[in] pEvent
*/
virtual void mousePressEvent(QMouseEvent *pEvent);
/**
* @brief
* @param[in] pEvent
*/
virtual void paintEvent(QPaintEvent *pEvent);
/**
* @brief
* @param[in] pEvent
*/
virtual void enterEvent(QEvent *pEvent);
private:
QWidget *m_pPopupWidget; ///< 弹出窗口器件对象
QWidget *m_pPopupFrame; ///< 弹出窗口器件的容器对象
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAITOOLBUTTON_H

View File

@ -0,0 +1,154 @@
/**
* @file PaiTreeItemDelegate.h
* @brief PAI系统中常见的数据树节点ItemDelegate类
* @date 2011-09-29
*/
#ifndef PAI_FRAME_WIDGET_PAITREEITEMDELEGATE_H
#define PAI_FRAME_WIDGET_PAITREEITEMDELEGATE_H
#include <QStyledItemDelegate>
#include <QRegExp>
#include "Turtle.h"
namespace pai
{
namespace gui
{
/**
* @class PaiTreeItemDelegate
* @brief ItemDelegate
*/
class PAI_WIDGET_EXPORT PaiTreeItemDelegate:public QStyledItemDelegate
{
Q_OBJECT
public:
/**
* @brief
* @param[in] pParent
*/
PaiTreeItemDelegate(QObject * parent = 0);
protected:
/**
* @brief
* @param[in] option
* @param[in] index
* @return
*/
virtual QSize sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index) const;
/**
* @brief
* @param[in] pPainter
* @param[in] option
* @param[in] index
*/
virtual void paint(QPainter *pPainter, const QStyleOptionViewItem & option, const QModelIndex & index) const;
};
/**
* @class PaiCagegoryTreeItemDelegate
* @brief ItemDelegate
*/
class PAI_WIDGET_EXPORT PaiCagegoryTreeItemDelegate : public QStyledItemDelegate
{
public:
/**
* @brief
* @param[in] pParent
*/
PaiCagegoryTreeItemDelegate(QObject *pParent = NULL);
/**
* @brief
* @param[in] height
*/
void SetRowHeight(int height);
protected:
/**
* @brief
* @param[in] pPainter
* @param[in] option
* @param[in] index
*/
virtual void paint(QPainter *pPainter, const QStyleOptionViewItem & option, const QModelIndex & index) const;
/**
* @brief
* @param[in] option
* @param[in] index
* @return
*/
virtual QSize sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index) const;
private:
int m_RowHeight; ///< 行高
};
/**
* @class PaiNameLimitedTreeItemDelegate
* @brief TreeItemDelegate
*/
class PAI_WIDGET_EXPORT PaiNameLimitedTreeItemDelegate : public PaiTreeItemDelegate
{
Q_OBJECT
public:
/**
* @brief
* @param[in] pParent
*/
PaiNameLimitedTreeItemDelegate(QWidget *pParent = NULL);
/**
* @brief
* @param[in] regExp
* @param[in] pParent
*/
PaiNameLimitedTreeItemDelegate(const QRegExp & regExp, QWidget *pParent = NULL);
/**
* @brief LineEdit
* @param[in] pParent
* @param[in] option
* @param[in] index
*/
virtual QWidget *createEditor(QWidget *pParent, const QStyleOptionViewItem & option, const QModelIndex & index) const;
/**
* @brief
* @param[in] pEditor
* @param[in] index
*/
virtual void setEditorData(QWidget *pEditor, const QModelIndex & index) const;
/**
* @brief LineEdit数值更新到model
* @param[in] pEditor
* @param[in] pModel
* @param[in] index
*/
virtual void setModelData(QWidget *pEditor, QAbstractItemModel *pModel, const QModelIndex & index) const;
/**
* @brief LineEdit大小
* @param[in] pEditor
* @param[in] option
* @param[in] index
*/
virtual void updateEditorGeometry(QWidget *pEditor, const QStyleOptionViewItem & option, const QModelIndex & index) const;
private:
QRegExp m_RegExp; ///< 名称限定的正则表达式
signals:
/**
* @brief model时
* @param[in] index
*/
void ModelDataChanged(const QModelIndex & index) const;
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAITREEITEMDELEGATE_H

View File

@ -0,0 +1,106 @@
/**
* @file PaiTreeWidget.h
* @brief P.A.I系统定制发布的树控件
* @date 2012-10-18
*/
#ifndef PAI_FRAME_WIDGET_PAITREEWIDGET_H
#define PAI_FRAME_WIDGET_PAITREEWIDGET_H
#include <QTreeWidget>
#include "Turtle.h"
class QLabel;
namespace pai
{
namespace gui
{
/**
* @class PaiTreeWidget
* @brief PaiTreeWidget是P.A.I系统定制发布的树控件
*/
class PAI_WIDGET_EXPORT PaiTreeWidget : public QTreeWidget
{
Q_OBJECT
public:
/**
* @brief
* @param[in] pParent
*/
PaiTreeWidget(QWidget *pParent = NULL);
/**
* @brief
*/
virtual ~PaiTreeWidget();
public slots:
/**
* @brief
* @param[in] keyword
* @param[in] column
*/
void Filter(const QString & keyword, int column = 0);
/**
* @brief
* @param[in] keyword
* @param[in] columns
*/
void Filter(const QString & keyword, QList<int> columns);
private:
/**
* @brief Filter函数调用
* @param[in] pItem
* @return
*/
bool IsGenerationOfFoundItem(QTreeWidgetItem *pItem);
private:
bool m_InSearching; ///< 表示是否正在进行搜索
QLabel *m_pTipLabel; ///< 搜索结果为空的提示文本信息框
signals:
/**
* @brief
* @param[in] pRootItem
*/
void SearchFinished(QTreeWidgetItem *pRootItem);
};
/**
* @class PaiTreeWidgetItem
* @brief item类
*/
class PAI_WIDGET_EXPORT PaiTreeWidgetItem : public QTreeWidgetItem
{
public:
/**
* @brief
*/
PaiTreeWidgetItem();
/**
* @brief
* @param[in] pParent
*/
PaiTreeWidgetItem(QTreeWidgetItem *pParent);
/**
* @brief
*/
virtual ~PaiTreeWidgetItem();
/**
* @brief QTreeWidgetItem的比较函数
* @param[in] otherItem
* @return item对象的比较结果
*/
virtual bool operator < (const QTreeWidgetItem & otherItem) const;
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAITREEWIDGET_H

View File

@ -0,0 +1,68 @@
/**
* @file PaiWidget.h
* @brief widget
* @date 2013-1-29
*/
#ifndef PAI_FRAME_WIDGET_PAIWIDGET_H
#define PAI_FRAME_WIDGET_PAIWIDGET_H
#include <QWidget>
#include "Turtle.h"
namespace pai
{
namespace gui
{
/**
* @class PaiWidget
* @brief widget
*/
class PAI_WIDGET_EXPORT PaiWidget : public QWidget
{
Q_OBJECT
public:
/**
* @brief
* @param[in] pParent
* @param[in] flags Qt::WindowFlags
*/
PaiWidget(QWidget *pParent = NULL, Qt::WindowFlags flags = 0);
/**
* @brief
*/
virtual ~PaiWidget();
/**
* @brief
* @param[in] top
* @param[in] bottom
* @param[in] left
* @param[in] right
*/
void ShowBorder(bool top, bool bottom, bool left, bool right);
/**
* @brief
* @param[in] color
*/
void SetBackgroundColor(const QColor & color);
protected:
/**
* @brief
* @param[in] pEvent
*/
virtual void paintEvent(QPaintEvent *pEvent);
private:
bool m_ShowTopBorder; ///< 是否显示顶部边框
bool m_ShowBottomBorder; ///< 是否显示底部边框
bool m_ShowLeftBorder; ///< 是否显示左部边框
bool m_ShowRightBorder; ///< 是否显示右部边框
QColor m_BackgroundColor; ///< 背景颜色
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAIWIDGET_H

View File

@ -0,0 +1,86 @@
/**
* @file PaiWidgetAction.h
* @brief PAI自定义的WidgetAction
* @date 2012-11-30
*/
#ifndef PAI_FRAME_WIDGET_PAIWIDGETACTION_H
#define PAI_FRAME_WIDGET_PAIWIDGETACTION_H
#include <QWidgetAction>
#include "Turtle.h"
namespace pai
{
namespace gui
{
/**
* @class PaiHorizonGroupWidget
* @brief PAI自定义的水平组合类
*/
class PAI_WIDGET_EXPORT PaiHorizonGroupWidget : public QWidget
{
Q_OBJECT
public:
/**
* @brief
* @param[in] pFirstWidget Widget
* @param[in] pSecondWidget Widget
* @param[in] spacing
* @param[in] pParent
*/
PaiHorizonGroupWidget(QWidget *pFirstWidget, QWidget *pSecondWidget, int spacing = 0, QWidget *pParent = NULL);
/**
* @brief
*/
virtual ~PaiHorizonGroupWidget();
};
/**
* @class PaiWidgetAction
* @brief PAI自定义的WidgetAction基类
*/
class PAI_WIDGET_EXPORT PaiWidgetAction : public QWidgetAction
{
Q_OBJECT
public:
/**
* @brief
* @param[in] pParent
*/
PaiWidgetAction(QObject *pParent = NULL);
/**
* @brief ,
* @param[in] pParent
* @return
*/
virtual QWidget* NewWidget(QWidget *pParent) = 0;
/**
* @brief
* @param[in] pWidget NewWidget返回的控件指针
*/
virtual void ConnectSignals(QWidget *pWidget);
/**
* @brief
* @return
*/
QWidget* GetDefaultWidget() const;
protected:
/**
* @brief createWidget
* @param[in] pParent
*/
virtual QWidget* createWidget(QWidget *pParent);
private:
QWidget *m_pDefaultWidget; ///< 默认控件指针,即第一个创建出来的工具栏上的,而不是扩展菜单中的。
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAIWIDGETACTION_H

View File

@ -0,0 +1,231 @@
/**
* @file PaiWindow.h
* @brief PAI系统风格默认窗体
* @date 2012-12-13
*/
#ifndef PAI_FRAME_WIDGET_PAIWINDOW_H
#define PAI_FRAME_WIDGET_PAIWINDOW_H
#include <QFrame>
#include <QRubberBand>
#include <QLayout>
#include <QMenu>
#include "PaiTitleBar.h"
#include "Turtle.h"
namespace pai
{
namespace gui
{
/**
* @class PaiWindow
* @brief PAI
*/
class PAI_WIDGET_EXPORT PaiWindow: public QFrame
{
Q_OBJECT
public:
/**
* @brief
* @param[in] parent
*/
PaiWindow(QWidget *parent = NULL);
/**
* @brief
*/
virtual ~PaiWindow();
/**
* @brief UI或控件可以放到里面
* @return
*/
QWidget* GetContainer();
/**
* @brief TitleBar的显示属性
* @param[in] flags titleBar的flags
*/
void SetTitleBarFlags(PaiTitleBar::TitleBarFlags flags);
/**
* @brief
* @param[in] visible
*/
void SetStatusBarVisible(bool visible);
/**
* @brief
* @param[in] visible
*/
void SetTitleBarVisible(bool visible);
/**
* @brief Layout到当前对话框
* @note Container的Layout
* @param[in] pLayout layout manager
*/
void setLayout(QLayout *pLayout);
/**
* @brief layout
* @note Container的layout
* @return layout
*/
QLayout* layout() const;
/**
* @brief statusBar的指针
* @return statusBar的指针
*/
QStatusBar* statusBar();
/**
* @brief systemMenu的指针
* @return systemMenu的指针
*/
QMenu* systemMenu();
/**
* @brief settingMenu的指针
* @return settingMenu的指针
*/
QMenu* settingMenu();
/**
* @brief title bar的menu
*/
void updateMenu();
/**
* @brief TitleBar上Logo和系统菜单中间的区域插入Widget
* @param[in] pWidget Widgt
* @param[in] alignment Qt::AlignLeft和Qt::AlignRight
*/
void InsertTitleBarWidget(QWidget *pWidget, Qt::Alignment alignment);
/**
* @brief window的Geometry
* @note ,window是否是最大化
* @param[in] x
* @param[in] y
* @param[in] w
* @param[in] h
*/
void setGeometry(int x, int y, int w, int h);
/**
* @brief window的Geometry
* @note ,window是否是最大化
* @param[in] rect
*/
void setGeometry(const QRect &rect);
/**
* @brief window的WindowStates
* @note
* @param[in] state Qt::WindowStates
*/
void setWindowState(Qt::WindowStates state);
/**
* @brief
* @param[in] mode 0:;1:
*/
static void SetWindowChangeSizeMode(int mode);
public slots:
/**
* @brief window的title
* @note titlebar
* @param[in] windowTitle dialog的title
*/
void setWindowTitle(const QString & windowTitle);
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 closeEvent(QCloseEvent *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] mousePosion
*/
void setCursorShape(const QPoint & mousePosion);
/**
* @brief Resize事件的实现
* @param[in] mousePosion
*/
void resizeFrame(const QPoint & mousePosion);
private:
ResizeDirction m_ResizeDirction; ///< 拖动的方向变量
bool m_IsPress; ///< 鼠标是否按下
bool m_IsMoved; ///< 鼠标是否拖动
QRubberBand *m_pRubberBand; ///< 窗口大小改变时显示的边框
pai::gui::PaiTitleBar *m_pTitleBar; ///< 自定义的titleBar
pai::gui::PaiStatusBar *m_pStatusBar; ///< 自定义的statusBar
QMenu *m_pSystemMenu; ///< 自定义的systemMenu
QMenu *m_pSettingMenu; ///< 自定义的settingMenu
QWidget *m_pContainerWidget; ///< 容器指针
int m_TimerID; ///< 定时器ID
static int m_WinChangeSizeMode; ///< 鼠标改变窗体大小方式: 0:鼠标左键弹起后窗体变动;1:鼠标左键按下拖动时,窗体显示实时变动;
static bool m_IsInitWinChangeSizeMode; ///< 因为当前配置保存在配置文件中,暂时添加此变量表示是否初始化加载配置文件
};
}
}
#endif ///< PAI_FRAME_WIDGET_PAIWINDOW_H

View File

@ -0,0 +1,176 @@
/**
* @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