|
|
#pragma once
|
|
|
|
|
|
#include "iDlgBaseEx.h"
|
|
|
#include "iRibbonXmlTab.h"
|
|
|
|
|
|
#include "iGuiRibbon_global.h"
|
|
|
|
|
|
///ZXF202605
|
|
|
/// @brief Ribbon简化,仅仅GroupBar模式(这个就相当于ToolBar 里面的 有多个GroupBar,就相当于一个Group一个面板,用于控制折叠这个面板的上按钮)
|
|
|
class I_GUI_RIBBON_EXPORT iWxGroupBar : public QWidget
|
|
|
{
|
|
|
Q_OBJECT
|
|
|
|
|
|
public:
|
|
|
|
|
|
explicit iWxGroupBar(iRibbonXmlGroup* pGroupXml = NULL, \
|
|
|
QWidget *parent = 0);
|
|
|
~iWxGroupBar();
|
|
|
|
|
|
//设置关联的配置信息
|
|
|
void setGroupInfo();
|
|
|
|
|
|
// 折叠控制(供 iWxToolBar 自动布局调用)
|
|
|
void setCollapsed(bool b);
|
|
|
bool getCollapsed() const ;
|
|
|
int expandedWidth();
|
|
|
int collapsedWidth();
|
|
|
|
|
|
// 返回 ButtonWithMenu 类型 cmd 创建的子菜单 action
|
|
|
QVector<QAction*>& getMenuActions() ;
|
|
|
|
|
|
// 返回该 Group 内创建的所有子控件
|
|
|
QVector<QWidget*>& getSubCtrls() ;
|
|
|
|
|
|
public:
|
|
|
//初始化
|
|
|
virtual void initUI();
|
|
|
virtual void initSheets();
|
|
|
|
|
|
protected:
|
|
|
//初始化控件
|
|
|
void initCtrlUI();
|
|
|
|
|
|
//初始化面板按钮
|
|
|
void initGroupBt();
|
|
|
//初始化控件上部分(主要功能区)
|
|
|
void initCtrlTopUI();
|
|
|
//初始化控件下部分(标签区+折叠按钮)
|
|
|
void initCtrlBotUI();
|
|
|
|
|
|
// 各种类型
|
|
|
QWidget* createTabBy(iRibbonXmlTab* pTab);
|
|
|
QWidget* createGroupBy(iRibbonXmlGroup* pGroup);
|
|
|
QWidget* createCmdBy(iRibbonXmlCmd* pCmd, bool bAdd = true);
|
|
|
|
|
|
QWidget* createCmdBy_Btn(iRibbonXmlCmd* pCmd);
|
|
|
QWidget* createCmdBy_Combo(iRibbonXmlCmd* pCmd);
|
|
|
QWidget* createCmdBy_Check(iRibbonXmlCmd* pCmd);
|
|
|
QWidget* createCmdBy_Radio(iRibbonXmlCmd* pCmd);
|
|
|
QWidget* createCmdBy_Text(iRibbonXmlCmd* pCmd);
|
|
|
QWidget* createCmdBy_Label(iRibbonXmlCmd* pCmd);
|
|
|
QWidget* createCmdBy_ListWx(iRibbonXmlCmd* pCmd);
|
|
|
|
|
|
//新增加边界框
|
|
|
QWidget* createCmdBy_LineEdit(iRibbonXmlCmd* pCmd);
|
|
|
|
|
|
// 对于按钮,比较特殊,分别进行实现
|
|
|
QWidget* _createCmdBy_Btn_Normal(iRibbonXmlCmd* pCmd); //常规按钮
|
|
|
QWidget* _createCmdBy_Btn_Menu(iRibbonXmlCmd* pCmd); //下拉菜单式按钮
|
|
|
QWidget* _createCmdBy_Btn_Split(iRibbonXmlCmd* pCmd); //劈分式按钮
|
|
|
|
|
|
virtual bool dealwithCmdSubBy(iRibbonXmlCmd* pCmd, QToolButton*& pBtn);
|
|
|
|
|
|
protected:
|
|
|
virtual void paintEvent(QPaintEvent* event) ;
|
|
|
virtual void mousePressEvent(QMouseEvent* event) ;
|
|
|
virtual void mouseMoveEvent(QMouseEvent* event) ;
|
|
|
virtual void leaveEvent(QEvent* event) ;
|
|
|
//焦点判断
|
|
|
bool eventFilter(QObject *, QEvent *);
|
|
|
// 让 Qt 认为 group 可以一直缩到折叠态宽度,
|
|
|
// 否则按钮们的 minimumSizeHint 会经 layout 累加上传,
|
|
|
// 把主窗口的最小宽度顶死,导致拖动边框拉不动。
|
|
|
virtual QSize minimumSizeHint() const;
|
|
|
|
|
|
private slots:
|
|
|
|
|
|
//面板折叠
|
|
|
void slotGroupCollapse();
|
|
|
void slotBtnClicked(); //Btn
|
|
|
void slotListCtrlIndexChanged(int); //Combox ListWx
|
|
|
void slotCheckCtrlClicked(bool); //CheckBox, RadioBox
|
|
|
|
|
|
|
|
|
void slotSplitBtnClicked(QString sName); //Split Btn
|
|
|
|
|
|
//面板按钮响应(弹出当前Group的Ctrl,重组一个对话框,无边框只有ctrl)
|
|
|
void slotGroupBtnClicked();
|
|
|
|
|
|
signals:
|
|
|
|
|
|
/// @title Ribbon信号触发
|
|
|
/// @param pCtrl触发的子控件
|
|
|
/// @param pInfo关联的Ribbon配置信息(来自xml)
|
|
|
void sigRibbonActioned(QWidget* pCtrl,
|
|
|
iRibbonXmlCmd* pInfo,
|
|
|
QVariant o);
|
|
|
|
|
|
/// @title Ribbon文件菜单信号触发
|
|
|
/// @param sID菜单ID
|
|
|
/// @param sName菜单名称
|
|
|
void sigRibbonFileMenuClicked(QString sID, QString sName);
|
|
|
|
|
|
/// @title Ribbon信号触发
|
|
|
/// @param pCtrl触发的子控件
|
|
|
/// @param pInfo关联的Ribbon配置信息(来自xml)
|
|
|
/// @param listValues显示部分
|
|
|
/// @param listIDs
|
|
|
void sigRibbonGetListValues(QWidget* pCtrl,
|
|
|
iRibbonXmlCmd* pInfo,
|
|
|
QStringList& listValues,
|
|
|
QStringList& listIDs,
|
|
|
int& nCurSel);
|
|
|
|
|
|
/// @title Ribbon信号触发(允许外界对SplitBtton进行调整)
|
|
|
/// @param pCtrl触发的子控件
|
|
|
/// @param pInfo关联的Ribbon配置信息(来自xml)
|
|
|
/// @param listNames 英文Name
|
|
|
/// @param listTexts 中文
|
|
|
/// @param listIcons 图标
|
|
|
/// @param bChanged 是否改变
|
|
|
void sigRibbonAdjustSplitBtns(QWidget* pCtrl,
|
|
|
iRibbonXmlCmd* pInfo,
|
|
|
QStringList& listNames,
|
|
|
QStringList& listTexts,
|
|
|
QStringList& listIcons,
|
|
|
bool& bChanged);
|
|
|
|
|
|
void sigRibbonListWxCurChanged(QWidget* pCtrl,
|
|
|
iRibbonXmlCmd* pInfo,
|
|
|
int nCurSel);
|
|
|
|
|
|
void sigRibbonCheckWxClicked(QWidget* pCtrl,
|
|
|
iRibbonXmlCmd* pInfo,
|
|
|
bool bSelect);
|
|
|
|
|
|
|
|
|
protected:
|
|
|
//组控件
|
|
|
iRibbonXmlGroup* m_pGroupXml;
|
|
|
// 所有的控件
|
|
|
QVector<QWidget*> m_vecSubCtrls;
|
|
|
|
|
|
// 所有的控件QACtion
|
|
|
QVector<QAction*> m_vecMenuActions;
|
|
|
//面板按钮(这个主要用于显示于)
|
|
|
QToolButton* m_pGroupBt;
|
|
|
//内容区容器(折叠时隐藏,展开时显示)
|
|
|
QWidget* m_pContentWx;
|
|
|
//主布局
|
|
|
QVBoxLayout* m_pLayoutMain;
|
|
|
|
|
|
//折叠状态及命中区域
|
|
|
bool m_bCollapsed;
|
|
|
bool m_bHover;
|
|
|
QRect m_rcCollapseBtn;
|
|
|
|
|
|
//展开宽度缓存(用于自动折叠/展开)
|
|
|
int m_nCachedExpandedW;
|
|
|
|
|
|
// 折叠前记录本来就隐藏的控件ID
|
|
|
QStringList m_listHiddenIDs;
|
|
|
|
|
|
// 弹出过程中标志,防止 setParent 引起的 hide 触发恢复逻辑
|
|
|
bool m_bPopupShowing;
|
|
|
};
|