323 lines
10 KiB
C++
323 lines
10 KiB
C++
/**
|
||
* @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
|