|
|
#pragma once
|
|
|
|
|
|
//#include <QToolButton>
|
|
|
//#include <QMenu>
|
|
|
//#include <QList>
|
|
|
//#include <QPixmap>
|
|
|
//#include <QTimer>
|
|
|
|
|
|
#include "Defines.h"
|
|
|
#include "iPlugin_global.h"
|
|
|
|
|
|
class QAction;
|
|
|
|
|
|
// 实现拆分按钮,该类借鉴AI
|
|
|
class I_PLUGIN_EXPORT ZxSplitButton : public QToolButton
|
|
|
{
|
|
|
Q_OBJECT
|
|
|
|
|
|
public:
|
|
|
|
|
|
// bUpDown 是上下还是左右布局
|
|
|
explicit ZxSplitButton(QWidget *parent = 0, \
|
|
|
bool bUpDown = true);
|
|
|
~ZxSplitButton();
|
|
|
|
|
|
/// @brief 创建拆分窗体
|
|
|
/// @param sz 默认大小
|
|
|
/// @param listNames 英文Name
|
|
|
/// @param listTexts 中文
|
|
|
/// @param listIcons 图标
|
|
|
/// @param nDefault 默认点中
|
|
|
void initUI(QSize sz, \
|
|
|
QStringList& listNames, \
|
|
|
QStringList& listTexts, \
|
|
|
QStringList& listIcons, \
|
|
|
int nDefault = 0);
|
|
|
|
|
|
signals:
|
|
|
|
|
|
// 点击主或次菜单项,均触发
|
|
|
void sbActionClicked(QString sName);
|
|
|
|
|
|
protected:
|
|
|
|
|
|
void mouseMoveEvent(QMouseEvent *);
|
|
|
void mousePressEvent(QMouseEvent *);
|
|
|
void leaveEvent(QEvent *);
|
|
|
void mouseReleaseEvent(QMouseEvent *);
|
|
|
|
|
|
void paintEvent(QPaintEvent *);
|
|
|
|
|
|
void _drawBackground(QPainter* pPainter);
|
|
|
void _drawSeparator(QPainter* pPainter);
|
|
|
void _drawBorders(QPainter* pPainter);
|
|
|
void _drawTextAndIcons(QPainter* pPainter);
|
|
|
void _drawArrow(QPainter* pPainter);
|
|
|
|
|
|
QRect getBoundsOf(bool bMain);
|
|
|
|
|
|
private slots:
|
|
|
|
|
|
// 菜单项
|
|
|
void onMenuTriggered(QAction *action);
|
|
|
|
|
|
// 菜单内部,popup相关
|
|
|
void onMenuAboutToShow();
|
|
|
void onMenuAboutToHide();
|
|
|
|
|
|
private:
|
|
|
|
|
|
/// @brief 添加菜单项
|
|
|
/// @param sName 英文Name
|
|
|
/// @param sText 中文
|
|
|
/// @param sIcon 图标
|
|
|
/// @param bChecked 是否Checked
|
|
|
void addAction(QString sName, \
|
|
|
QString sText, \
|
|
|
QString sIcon, \
|
|
|
bool bChecked);
|
|
|
|
|
|
//int currentActionId() const;
|
|
|
//void setCurrentActionId(int actionId);
|
|
|
//void clearActions();
|
|
|
//int actionCount() const;
|
|
|
|
|
|
QIcon getCurrentIcon() const;
|
|
|
QString getCurrentText() const;
|
|
|
|
|
|
// 判断点所在区域
|
|
|
bool isPointInMainArea(const QPoint& pos) const;
|
|
|
bool isPointInSubArea(const QPoint& pos) const;
|
|
|
|
|
|
private:
|
|
|
|
|
|
// 是上下还是左右布局
|
|
|
// 上下布局时,上为Main,下为Sub
|
|
|
// 左右布局时,左为Main,右为Sub
|
|
|
bool m_bUpDown;
|
|
|
|
|
|
// 菜单项
|
|
|
QMenu* m_pMenu;
|
|
|
QList<QAction*> m_listActions;
|
|
|
|
|
|
struct ActionInfo {
|
|
|
QString name;
|
|
|
QString text;
|
|
|
QIcon icon;
|
|
|
};
|
|
|
QList<ActionInfo> m_listActionInfos;
|
|
|
|
|
|
// 当前对应
|
|
|
QString m_sCurCheckedName;
|
|
|
|
|
|
// 内部变量控制
|
|
|
bool m_bHoveringMain; //鼠标Hover主Main还是次Sub
|
|
|
bool m_bHoveringSub;
|
|
|
bool m_bArrowUp; //对于箭头,总是上下显示
|
|
|
bool m_bMenuIsPopup; //当前菜单是否Popup
|
|
|
bool m_bPressed; //是否摁下
|
|
|
|
|
|
|
|
|
// 次Sub部分的Span
|
|
|
// 对于上下布局,是下侧部分的高
|
|
|
// 对于左右布局,是右侧部分的宽
|
|
|
int m_nSubPartSpan;
|
|
|
|
|
|
// 箭头部分的大小,按正方形考虑
|
|
|
int m_nArrowWH;
|
|
|
};
|