SARibbon 2.5.1
SARibbon wiki
载入中...
搜索中...
未找到
SARibbonCustomizeWidget.h
1#ifndef SARIBBONCUSTOMIZEWIDGET_H
2#define SARIBBONCUSTOMIZEWIDGET_H
3#include "SARibbonGlobal.h"
4#include <QWidget>
5#include "SARibbonActionsManager.h"
6#include "SARibbonPanel.h"
7#include "SARibbonCustomizeData.h"
8
9// SARibbonCustomizeWidget 特有
12class SARibbonBar;
13//
14class QStandardItemModel;
15class QStandardItem;
16class QAbstractButton;
17//
18class QXmlStreamWriter;
19class QXmlStreamReader;
20
27class SA_RIBBON_EXPORT SARibbonCustomizeWidget : public QWidget
28{
29 Q_OBJECT
30 SA_RIBBON_DECLARE_PRIVATE(SARibbonCustomizeWidget)
31public:
32 // 保留接口
33 explicit SARibbonCustomizeWidget(SARibbonMainWindow* ribbonWindow,
34 QWidget* parent = nullptr,
35 Qt::WindowFlags f = Qt::WindowFlags());
36 // 对于不使用SARibbonMainWindow的情况,使用此构造函数
37 explicit SARibbonCustomizeWidget(SARibbonBar* ribbonbar,
38 QWidget* parent = nullptr,
39 Qt::WindowFlags f = Qt::WindowFlags());
41
46 {
48 ShowMainCategory
49 };
50
55 {
56 LevelRole = Qt::UserRole + 1,
57 PointerRole = Qt::UserRole + 2,
58 CanCustomizeRole = Qt::UserRole + 3,
59 CustomizeRole = Qt::UserRole + 4,
60 CustomizeObjNameRole = Qt::UserRole + 5
61 };
62
63 // 设置action管理器
64 void setupActionsManager(SARibbonActionsManager* mgr);
65
66 // 判断用户是否有要存储的内容,对应save动作
67 bool isApplied() const;
68
69 // 判断用户是否有改动内容,对应apply动作
70 bool isCached() const;
71
72 // 获取model
73 const QStandardItemModel* model() const;
74
75 // 根据当前的radiobutton选项来更新model
76 void updateModel();
77
78 // 更新model
79 void updateModel(RibbonTreeShowType type);
80
81 // 应用所有的设定
82 bool applys();
83
84 // 转换为xml
85 bool toXml(QXmlStreamWriter* xml) const;
86 bool toXml(const QString& xmlpath) const;
87
88 // 从xml中加载QList<SARibbonCustomizeData>,对于基于配置文件的设置,对话框显示前建议调用此函数,保证叠加设置的正确记录
89 void fromXml(QXmlStreamReader* xml);
90 void fromXml(const QString& xmlpath);
91
92 // 应用xml配置,可以结合customize_datas_from_xml和customize_datas_apply函数
93 static bool fromXml(QXmlStreamReader* xml, SARibbonBar* bar, SARibbonActionsManager* mgr);
94
95 // 缓存应用的动作,这些动作不会被clear清除,用于本地存储
96 void makeActionsApplied();
97
98 // 清除applied的动作,cancel操作后需要清空已应用的动作
99 void clearApplied();
100 // 清除缓存动作,在执行applys函数后,如果要继续调用,应该clear,否则会导致异常
101 void clearCache();
102 // 清除所有动作,不包含本地读取的数据
103 void clear();
104
105protected:
106 // 把QList<SARibbonCustomizeData>进行裁剪,把一些动作合并
107 void simplify();
108
109 SARibbonPanelItem::RowProportion selectedRowProportion() const;
110
111 QAction* selectedAction() const;
112 QAction* itemToAction(QStandardItem* item) const;
113
114 QStandardItem* selectedItem() const;
115
116 // 获取选中的ribbon tree 的level
117 int selectedRibbonLevel() const;
118
119 // 根据选中的item判断
120 int itemLevel(QStandardItem* item) const;
121
122 // 设置某个item被选中
123 void setSelectItem(QStandardItem* item, bool ensureVisible = true);
124
125 // 判断itemn能否改动,可以改动返回true
126 bool isItemCanCustomize(QStandardItem* item) const;
127 bool isSelectedItemCanCustomize() const;
128
129 // 判断item是否是自定义的item
130 bool isCustomizeItem(QStandardItem* item) const;
131 bool isSelectedItemIsCustomize() const;
132
133 // 删除一个item
134 void removeItem(QStandardItem* item);
135
136private Q_SLOTS:
137 void onComboBoxActionIndexCurrentIndexChanged(int index);
138 void onRadioButtonGroupButtonClicked(QAbstractButton* b);
139 void onPushButtonNewCategoryClicked();
140 void onPushButtonNewPanelClicked();
141 void onPushButtonRenameClicked();
142 void onPushButtonAddClicked();
143 void onPushButtonDeleteClicked();
144 void onListViewSelectClicked(const QModelIndex& index);
145 void onTreeViewResultClicked(const QModelIndex& index);
146 void onToolButtonUpClicked();
147 void onToolButtonDownClicked();
148 void onItemChanged(QStandardItem* item);
149 void onLineEditSearchActionTextEdited(const QString& text);
150 void onPushButtonResetClicked();
151
152private:
153 void init(SARibbonBar* ribbonbar);
154 void initConnection();
155
156private:
158};
159
172bool SA_RIBBON_EXPORT sa_customize_datas_to_xml(QXmlStreamWriter* xml, const QList< SARibbonCustomizeData >& cds);
173
179QList< SARibbonCustomizeData > SA_RIBBON_EXPORT sa_customize_datas_from_xml(QXmlStreamReader* xml,
181
188int SA_RIBBON_EXPORT sa_customize_datas_apply(const QList< SARibbonCustomizeData >& cds, SARibbonBar* w);
189
196int SA_RIBBON_EXPORT sa_customize_datas_reverse(const QList< SARibbonCustomizeData >& cds, SARibbonBar* w);
197
212bool SA_RIBBON_EXPORT sa_apply_customize_from_xml_file(const QString& filePath, SARibbonBar* bar, SARibbonActionsManager* mgr);
213
214#endif // SARIBBONCUSTOMIZEWIDGET_H
用于管理SARibbon的所有Action
Definition SARibbonActionsManager.h:37
SARibbonBar继承于QMenuBar,在SARibbonMainWindow中直接替换了原来的QMenuBar
Definition SARibbonBar.h:94
构建SARibbonCustomizeWidget的Ui
Definition SARibbonCustomizeWidget.cpp:162
自定义界面窗口
Definition SARibbonCustomizeWidget.h:28
ItemRole
QStandardItem对应的role
Definition SARibbonCustomizeWidget.h:55
RibbonTreeShowType
定义ribbon树的显示类型
Definition SARibbonCustomizeWidget.h:46
@ ShowAllCategory
显示所有Category,包括contextcategory
Definition SARibbonCustomizeWidget.h:47
如果要使用SARibbonBar,必须使用此类代替QMainWindow
Definition SARibbonMainWindow.h:60
RowProportion
定义了行的占比,ribbon中有large,media和small三种占比
Definition SARibbonPanelItem.h:23