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/iWxRibbon.h

149 lines
3.7 KiB
C

#pragma once
#include "iWxToolBar.h"
#include <QHash>
namespace Ui {
class iWxRibbon;
}
class QMenu;
class I_GUI_RIBBON_EXPORT iWxRibbon : public iWxToolBar
{
Q_OBJECT
public:
// 如果自行传入sXmlName文件名不带后缀且bToolbarExt为true则为ToolBar扩展模式
explicit iWxRibbon(QString sXmlName = "", \
QWidget *parent = 0);
~iWxRibbon();
void initUI();
// 类Wps文件模式定制
void setWpsLike(bool b);
// 返回部分指针变量
QVector<QAction*>* getMenuActions();
//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 *);
///ZXF202605
// resize: 触发各 tab 内 group 的折叠重排
virtual void resizeEvent(QResizeEvent* event) ;
protected slots:
///ZXF202605
// 遍历每个 tab对其中的 group 单独按 ribbon 当前宽度折叠
void relayoutAllTabs();
private slots:
void on_tabWxMain_tabCloseRequested(int index);
void on_tabWxMain_currentChanged(int index);
void on_tabWxMain_customContextMenuRequested(const QPoint &pos);
void slotMenuItemClicked(); //文件菜单Item
void slotTabItemDoubleClicked(int n);
void slotTabItemActivated(int n);
void slotFileClicked(); //File
void slotOpentRecent();
signals:
/// @title File按钮信号触发
void sigRibbonFileActivated();
/// @title Ribbon文件菜单信号触发
/// @param sID菜单ID
/// @param sName菜单名称
void sigRibbonFileMenuClicked(QString sID, QString sName);
/// @title 触发信号由外界处理最近文档
void sigFileRecentActivated(QString sUrl);
/// @brief 某一Tab被激活指的Ribbon最顶级的Tab比如数据管理、数据编辑、处理解释等等
/// @param pTab
void sigRibbonTabActivated(iRibbonXmlTab* pTab);
// 20190425
// 允许外界对FileMenu进行调整
// 触发此信号时pMenu已经填入xml中配置的菜单项
void sigAdjustFileMenu(QMenu*& pMenu);
private:
// load Xml And Ini
void loadIniInfos();
// 初始化
void initUI_TabWx();
void initUI_Menu(QMenu*& pMenu);
// 切换正常模式和简缩模式
virtual void swapTabMode(); //
// 绘制Logo
void drawAppInfo(QPainter* painter);
// 获取当前Tab页中的所有Group的宽度
int getCurTabValidWidth();
// 虚拟按钮的响应
// 如果返回true则不再触发信号否则触发
virtual bool runByVirtualBtn();
virtual bool dealwithCmdSubBy(iRibbonXmlCmd* pCmd, QToolButton*& pBtn);
private:
Ui::iWxRibbon *ui;
protected:
// 简缩模式相关
bool m_bSimple;
int m_nLastSel;
// 类Wps文件模式定制
bool m_bWpsLike;
// 模块相关从ini中读取出来
QString m_sIcon;
QString m_sAppDescCN;
QString m_sAppDescEN;
// 最近打开项目
enum { MaxRecentProjects = 5 };
QAction* m_oRecentProjectActs[MaxRecentProjects];
QStringList m_listRencentProjects;
QMenu* m_pMenuRecent;
///ZXF202605
// tab page → 该 page 下按视觉顺序排列的 GroupBar
// 每个 tab 创建完成后存档relayout 时按页查表使用
QHash<QWidget*, QList<iWxGroupBar*> > m_mapPageToBars;
};