You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/Include/iGui/iGuiRibbon/iWxGroupBar.h

183 lines
5.9 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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() ;
//得到里面控件个数是否需要折叠按钮
bool bCollapse();
public:
//初始化
virtual void initUI();
virtual void initSheets();
protected:
//初始化控件
void initCtrlUI();
//初始化面板按钮
void initGroupBt();
//初始化控件上部分(主要功能区)
void initCtrlTopUI();
//两种布局
void initCtrlTopGridUI();//网格
void initCtrlTopHorUI(); //水平
//初始化控件下部分(标签区+折叠按钮)
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;
};