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++

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