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.
nmWATI/Include/iGui/iGuiRibbon/iWxRibbon.h

191 lines
5.4 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"
namespace Ui {
class iWxRibbon;
}
class QMenu;
class I_GUI_RIBBON_EXPORT iWxRibbon : public iDlgBaseEx
{
Q_OBJECT
public:
// 如果自行传入sXmlName文件名不带后缀且bToolbarExt为true则为ToolBar扩展模式
explicit iWxRibbon(QString sXmlName = "", \
bool bToolbarExt = false, \
QWidget *parent = 0);
~iWxRibbon();
void initUI();
// 类Wps文件模式定制
void setWpsLike(bool b);
// 返回部分指针变量
vecRibbonTabPtr* getRibbonStruts();
QVector<QWidget*>* getSubCtrls();
QVector<QAction *>* getMenuActions();
// 根据辅助信息返回cmd
iRibbonXmlCmd* getCmdByExtInfo(QString sExtInfo);
// 根据ID返回cmd
iRibbonXmlCmd* getCmdByID(QString sID);
//ZXF202409得到按钮(为了更新按钮的子项例如窗口个数管理)
QWidget* getSubCtrl(QString sID);
//更新按钮(主要是子项)
bool refreshSubCtrl(QString sID, QStringList listSubWnds, QVector<bool> vecShows);
// 最近打开
bool refreshRecentProjects(QString& sPath); //最近打开
bool fillUIOfRecentProjects(); //更新最近打开菜单项
bool removeFromRecentProjects(QString sUrl);
protected:
// paint
virtual void paintEvent(QPaintEvent *);
private slots:
void on_tabWxMain_tabCloseRequested(int index);
void on_tabWxMain_currentChanged(int index);
void on_tabWxMain_customContextMenuRequested(const QPoint &pos);
void slotTabItemDoubleClicked(int n);
void slotGroupActivated(int n);
void slotBtnClicked(); //Btn
void slotMenuItemClicked(); //文件菜单Item
void slotListCtrlIndexChanged(int); //Combox ListWx
void slotCheckCtrlClicked(bool); //CheckBox, RadioBox
void slotFileClicked(); //File
void slotOpentRecent();
signals:
/// @title File按钮信号触发
void sigRibbonFileActivated();
/// @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 触发信号由外界处理最近文档
void sigFileRecentActivated(QString sUrl);
/// @title Ribbon信号触发
/// @param pCtrl触发的子控件
/// @param pInfo关联的Ribbon配置信息来自xml
/// @param listValues显示部分
/// @param listIDs
void sigRibbonGetListValues(QWidget* pCtrl,
iRibbonXmlCmd* pInfo,
QStringList& listValues,
QStringList& listIDs,
int& nCurSel);
void sigRibbonListWxCurChanged(QWidget* pCtrl,
iRibbonXmlCmd* pInfo,
int nCurSel);
void sigRibbonCheckWxClicked(QWidget* pCtrl,
iRibbonXmlCmd* pInfo,
bool bSelect);
// 某一Group被激活
void sigRibbonGroupActivated(iRibbonXmlGroup* pGroup);
// 20190425
// 允许外界对FileMenu进行调整
// 触发此信号时pMenu已经填入xml中配置的菜单项
void sigAdjustFileMenu(QMenu*& pMenu);
private:
// load Xml And Ini
void loadIniInfos();
void loadXmlStructs();
// 初始化
void initUI_TabWx();
void initUI_Menu(QMenu*& pMenu);
QWidget* createTabBy(iRibbonXmlTab* pTab);
QWidget* createGroupBy(iRibbonXmlGroup* pGroup);
QWidget* createCmdBy(iRibbonXmlCmd* pCmd);
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);
bool dealwithCmdSubBy(iRibbonXmlCmd* pCmd, QToolButton*& pBtn);
// 切换正常模式和简缩模式
void swapTabMode(); //
// 绘制Logo
void drawAppInfo(QPainter* painter);
// 获取当前Tab页中的所有Group的宽度
int getCurTabValidWidth();
// 虚拟按钮的响应
// 如果返回true则不再触发信号否则触发
virtual bool runByVirtualBtn();
private:
Ui::iWxRibbon *ui;
QString m_sXmlName; //可以外部设定只是文件名不带xml后缀
bool m_bToolbarExt;//类ToolBar模式
// 简缩模式相关
bool m_bSimple;
int m_nLastSel;
// 类Wps文件模式定制
bool m_bWpsLike;
// 配置化结构体
vecRibbonTabPtr m_vecTabXmls;
// 模块相关从ini中读取出来
QString m_sIcon;
QString m_sAppDescCH;
QString m_sAppDescEN;
// 所有的控件
QVector<QWidget*> m_vecSubCtrls;
QVector<QAction*> m_vecMenuActions;
// 最近打开项目
enum { MaxRecentProjects = 5 };
QAction* m_oRecentProjectActs[MaxRecentProjects];
QStringList m_listRencentProjects;
QMenu* m_pMenuRecent;
};