dde-control-center
Deepin Control Center
载入中...
搜索中...
未找到
moduleobject.h
1// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: GPL-3.0-or-later
4#ifndef DCC_MODULEOBJECT_H
5#define DCC_MODULEOBJECT_H
6
7#include "namespace.h"
8
9#include <QIcon>
10#include <QObject>
11#include <QVariant>
12
13using DCC_MODULE_TYPE = uint32_t;
14
15#define DCC_MODULE_HIERARCHY_BIT 0x80000000
16#define DCC_MODULE_GROUP_BIT 0x40000000
17#define DCC_MODULE_LEAF_BIT 0x20000000
18#define DCC_MODULE_LAYOUT_BIT 0x10000000
19
20#define DCC_MODULE_LISTVIEW_BIT 0x08000000
21#define DCC_MODULE_ITEM_BIT 0x04000000
22#define DCC_MODULE_SETTINGSGROUP_BIT 0x02000000
23#define DCC_MODULE_HORIZONTAL_BIT 0x01000000
24#define DCC_MODULE_VERTICAL_BIT 0x00800000
25
26#define DCC_MODULE_MAIN_BIT 0x00040000
27#define DCC_MODULE_CUSTOM_BIT 0x00020000
28
29namespace DCC_NAMESPACE {
30enum : DCC_MODULE_TYPE {
31 HIERARCHY_OBJECT = DCC_MODULE_HIERARCHY_BIT,
32 LEAF_OBJECT = DCC_MODULE_LEAF_BIT,
33 LISTVIEW = DCC_MODULE_GROUP_BIT | DCC_MODULE_LAYOUT_BIT | DCC_MODULE_LISTVIEW_BIT,
34 ITEM = DCC_MODULE_LEAF_BIT | DCC_MODULE_ITEM_BIT,
35 SETTINGSGROUP = DCC_MODULE_GROUP_BIT | DCC_MODULE_LAYOUT_BIT | DCC_MODULE_SETTINGSGROUP_BIT,
36 HORIZONTAL = DCC_MODULE_GROUP_BIT | DCC_MODULE_LAYOUT_BIT | DCC_MODULE_HORIZONTAL_BIT,
37 MAINLAYOUT = DCC_MODULE_GROUP_BIT | DCC_MODULE_LAYOUT_BIT | DCC_MODULE_MAIN_BIT,
38 HLISTLAYOUT = DCC_MODULE_GROUP_BIT | DCC_MODULE_LAYOUT_BIT | DCC_MODULE_HORIZONTAL_BIT
39 | DCC_MODULE_LISTVIEW_BIT,
40 VLISTLAYOUT = DCC_MODULE_GROUP_BIT | DCC_MODULE_LAYOUT_BIT | DCC_MODULE_VERTICAL_BIT
41 | DCC_MODULE_LISTVIEW_BIT,
42 PAGELAYOUT = DCC_MODULE_GROUP_BIT | DCC_MODULE_LAYOUT_BIT | DCC_MODULE_VERTICAL_BIT,
43 CUSTOM_OBJECT = DCC_MODULE_CUSTOM_BIT,
44};
45
46class ModuleObjectPrivate;
47
54{
55 QString name;
56 QString displayName;
57 QStringList contentText;
58 QVariant icon;
59 QString description;
60};
61
65class ModuleObject : public QObject
66{
67 Q_OBJECT
68 Q_PROPERTY(QString name READ name WRITE setName NOTIFY moduleDataChanged)
69 Q_PROPERTY(QString displayName READ displayName WRITE setDisplayName NOTIFY displayNameChanged)
70 Q_PROPERTY(QString description READ description WRITE setDescription NOTIFY moduleDataChanged)
71 Q_PROPERTY(
72 QStringList contentText READ contentText WRITE setContentText NOTIFY moduleDataChanged)
73 Q_PROPERTY(QVariant icon READ icon WRITE setIcon NOTIFY moduleDataChanged)
74 Q_PROPERTY(int badge READ badge WRITE setBadge NOTIFY moduleDataChanged)
75
76 Q_PROPERTY(bool hidden READ isHidden WRITE setHidden NOTIFY stateChanged)
77 Q_PROPERTY(bool disabled READ isDisabled WRITE setDisabled NOTIFY stateChanged)
78
79public:
80 explicit ModuleObject(QObject *parent = nullptr);
81 explicit ModuleObject(const QString &name,
82 const QString &displayName = {},
83 QObject *parent = nullptr);
84 explicit ModuleObject(const QString &name,
85 const QStringList &contentText,
86 QObject *parent = nullptr);
87 explicit ModuleObject(const QString &name,
88 const QString &displayName,
89 const QStringList &contentText,
90 QObject *parent = nullptr);
91 explicit ModuleObject(const QString &name,
92 const QString &displayName,
93 const QVariant &icon,
94 QObject *parent = nullptr);
95 explicit ModuleObject(const QString &name,
96 const QString &displayName,
97 const QString &description,
98 QObject *parent = nullptr);
99 explicit ModuleObject(const QString &name,
100 const QString &displayName,
101 const QString &description,
102 const QVariant &icon,
103 QObject *parent = nullptr);
104 explicit ModuleObject(const QString &name,
105 const QString &displayName,
106 const QString &description,
107 const QIcon &icon,
108 QObject *parent = nullptr);
109 explicit ModuleObject(const QString &name,
110 const QString &displayName,
111 const QString &description,
112 const QStringList &contentText,
113 const QVariant &icon,
114 QObject *parent = nullptr);
115 explicit ModuleObject(const ModuleInitContext &message, QObject *parent = nullptr);
116 virtual ~ModuleObject();
122 virtual QWidget *activePage(bool autoActive = true);
123
124public Q_SLOTS:
128 virtual void active();
135 virtual QWidget *page();
139 virtual void deactive();
140
141public:
142 QString name() const;
143 QString displayName() const;
144 QString description() const;
145 QStringList contentText() const;
146 QVariant icon() const;
147 int badge() const;
148
149 bool isHidden() const;
150 bool isVisible() const;
151 bool isDisabled() const;
152 bool isEnabled() const;
157 bool getFlagState(uint32_t flag) const;
158 uint32_t getFlag() const;
159
160 // 扩展标志,在VList和Page布局中放在最下面,横向排列
161 bool extra() const;
162 void setExtra(bool value = true);
163
164 // 是否参与搜索,默认参与搜索
165 bool noSearch() const;
166 void setNoSearch(bool noSearch = true);
167
183
184public Q_SLOTS:
185 void setHidden(bool hidden);
186 void setVisible(bool visible);
187 void setDisabled(bool disabled);
188 void setEnabled(bool enabled);
189 void trigger();
190
191 // 名称,作为每个模块的唯一标识,不可为空
192 virtual void setName(const QString &name);
193 // 显示名称,如菜单的名称,页面的标题等,为空则不显示
194 virtual void setDisplayName(const QString &displayName);
195 // 描述,如主菜单的描述信息
196 virtual void setDescription(const QString &description);
197 // 上下文数据,参与搜索,只可用于终结点:DisplayName -> ContentText(one of it)
198 virtual void setContentText(const QStringList &contentText);
199 virtual void addContentText(const QString &contentText);
200 virtual void addContentText(const QStringList &contentText);
201 // 图标,如主菜单的图标
202 // 字符串类型,支持DDciIcon\QVariant,优先作为DDciIcon处理
203 virtual void setIcon(const QVariant &icon);
204 virtual void setIcon(const QIcon &icon);
205 // 主菜单中的角标, 默认为0不显示,大于0显示
206 virtual void setBadge(int badge);
212 virtual void setFlagState(uint32_t flag, bool state);
218
219Q_SIGNALS:
227 void displayNameChanged(const QString &displayName);
233 void stateChanged(uint32_t flag, bool state);
240 void childStateChanged(ModuleObject *const child, uint32_t flag, bool state);
244 void removedChild(ModuleObject *const module);
248 void insertedChild(ModuleObject *const module);
252 void childrenSizeChanged(const int size);
256 void triggered();
261 void currentModuleChanged(ModuleObject *currentModule);
262
263 void visibleChanged();
264
265public:
266 ModuleObject *getParent();
272 int findChild(ModuleObject *const child);
273
274 static int findChild(ModuleObject *const module, ModuleObject *const child);
275
276 inline bool hasChildrens() { return !childrens().isEmpty(); }
277
282 const QList<ModuleObject *> &childrens();
283 ModuleObject *children(const int index) const;
284 int getChildrenSize() const;
285
286 virtual void appendChild(ModuleObject *const module);
287 virtual void removeChild(ModuleObject *const module);
288 virtual void removeChild(const int index);
289 virtual void insertChild(QList<ModuleObject *>::iterator before, ModuleObject *const module);
290 virtual void insertChild(const int index, ModuleObject *const module);
291
293 static unsigned GetCurrentVersion();
299 static bool IsVisible(DCC_NAMESPACE::ModuleObject *const module);
300 static bool IsHidden(DCC_NAMESPACE::ModuleObject *const module);
306 static bool IsHiddenFlag(uint32_t flag);
312 static bool IsEnabled(DCC_NAMESPACE::ModuleObject *const module);
313 static bool IsDisabled(DCC_NAMESPACE::ModuleObject *const module);
319 static bool IsDisabledFlag(uint32_t flag);
320
321 inline virtual DCC_MODULE_TYPE getClassID() const { return HIERARCHY_OBJECT; }
322
323private:
324 static int findChild(ModuleObject *const module, ModuleObject *const child, const int num);
325 DCC_DECLARE_PRIVATE(ModuleObject)
326};
327
328} // namespace DCC_NAMESPACE
329
330#endif // DCC_MODULEOBJECT_H
ModuleObject作为规范每个Module的接口,每个Module必须提供其基本的信息
Definition moduleobject.h:66
static bool IsEnabled(dccv23::ModuleObject *const module)
IsEnabled 返回module是否可用,判断了配置项和程序设置项
static bool IsHiddenFlag(uint32_t flag)
IsHiddenFlag 判断标志是否为隐藏标志
void removedChild(ModuleObject *const module)
删除child前触发
void currentModuleChanged(ModuleObject *currentModule)
currentModuleChanged 当前激活的子项改变时会触发此信号
void displayNameChanged(const QString &displayName)
displayName改变后发送此信号
int findChild(ModuleObject *const child)
搜索子项,使用广度搜索
void stateChanged(uint32_t flag, bool state)
stateChanged 状态标志变化 (可见、禁用等)
virtual void setFlagState(uint32_t flag, bool state)
setFlagState 设置状态标志,状态标志共32位,高16位为预留,低16位可根据需要设置
void childStateChanged(ModuleObject *const child, uint32_t flag, bool state)
childStateChanged 子项状态标志变化 (可见、禁用等)
virtual QWidget * page()
每次被调均需new新的QWidget
void moduleDataChanged()
基本信息改变后发送此信号
virtual void active()
当进入模块时,active会被调用,如无需通知则可不实现
virtual ModuleObject * defultModule()
defultModule 默认active的子项 当某个页面被active时,会通过defultModule去active子项 当返回为nullptr时,不再递归active子项 ModuleObjec...
const QList< ModuleObject * > & childrens()
子项,不可直接使用QList进行增删改操作,应使用appendChild、removeChild、insertChild
static bool IsDisabledFlag(uint32_t flag)
IsDisabledFlag 判断标志是否为禁用标志
ModuleObject * currentModule() const
currentModule 当前active的子项 当前active的子项变化时会触发currentModuleChanged信号, page与子项相关时需要处理currentModuleChanged...
void triggered()
trigger触发该信号,框架收到信号会切换到该ModuleObject页
virtual void deactive()
当离开模块时,deactive会被调用,如无需通知则可不实现
void setCurrentModule(ModuleObject *child)
setCurrentModule 设置当前active的子项
void childrenSizeChanged(const int size)
childrens() 改变后必须发送此信号
void insertedChild(ModuleObject *const module)
插入child后触发
static unsigned GetCurrentVersion()
Returns current ModuleObject version
bool getFlagState(uint32_t flag) const
获取状态标志
virtual QWidget * activePage(bool autoActive=true)
activePage 激活并返回page
static bool IsVisible(dccv23::ModuleObject *const module)
IsVisible 返回module是否显示,判断了配置项和程序设置项
ModuleInitContext 作为初始化传入的结构体,其中name和displayName 必须有数值 这个结构体保存了所有初始化的信息
Definition moduleobject.h:54