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.bak

177 lines
5.8 KiB
C

#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;
};