dde-control-center
Deepin Control Center
载入中...
搜索中...
未找到
dccobject.h
1// SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: GPL-3.0-or-later
4#ifndef DCCOBJECT_H
5#define DCCOBJECT_H
6
7#include <QObject>
8#include <QQmlComponent>
9#include <QQmlListProperty>
10#include <QQuickItem>
11
12namespace dccV25 {
13class DccObject : public QObject
14{
15 Q_OBJECT
16public:
17 Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
18 Q_PROPERTY(QString parentName READ parentName WRITE setParentName NOTIFY parentNameChanged)
19 Q_PROPERTY(quint32 weight READ weight WRITE setWeight NOTIFY weightChanged)
20
21 Q_PROPERTY(QString displayName READ displayName WRITE setDisplayName NOTIFY displayNameChanged)
22 Q_PROPERTY(QString description READ description WRITE setDescription NOTIFY descriptionChanged)
23 Q_PROPERTY(QString icon READ icon WRITE setIcon NOTIFY iconChanged)
24 Q_PROPERTY(QUrl iconSource READ iconSource NOTIFY iconSourceChanged)
25 Q_PROPERTY(qint8 badge READ badge WRITE setBadge NOTIFY badgeChanged DESIGNABLE false)
26
27 Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged DESIGNABLE false)
28 Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged DESIGNABLE false)
29 Q_PROPERTY(bool visibleToApp READ isVisibleToApp NOTIFY visibleToAppChanged) // 未设置隐藏且未被配置隐藏则为true
30 Q_PROPERTY(bool enabledToApp READ isEnabledToApp NOTIFY enabledToAppChanged) // 未设置禁用且未被配置禁用则为true
31 Q_PROPERTY(bool canSearch READ canSearch WRITE setCanSearch NOTIFY canSearchChanged DESIGNABLE false)
32
33 Q_PROPERTY(BackgroundTypes backgroundType READ backgroundType WRITE setBackgroundType NOTIFY backgroundTypeChanged DESIGNABLE false)
34
35 Q_PROPERTY(DccObject* currentObject READ currentObject WRITE setCurrentObject NOTIFY currentObjectChanged DESIGNABLE false)
36 Q_PROPERTY(QVector<DccObject *> children READ getChildren NOTIFY childrenChanged DESIGNABLE false)
37
38 Q_PROPERTY(quint8 pageType READ pageType WRITE setPageType NOTIFY pageTypeChanged)
39 Q_PROPERTY(QQmlComponent* page READ page WRITE setPage NOTIFY pageChanged)
40 Q_PROPERTY(QQuickItem* parentItem READ parentItem WRITE setParentItem NOTIFY parentItemChanged)
41
42 Q_PROPERTY(QQmlListProperty<QObject> data READ data DESIGNABLE false)
43 Q_CLASSINFO("DefaultProperty", "data")
44
45 explicit DccObject(QObject *parent = nullptr);
46 ~DccObject() override;
47
48 QString name() const;
49 void setName(const QString &name);
50 QString parentName() const;
51 void setParentName(const QString &parentName);
52 quint32 weight() const;
53 void setWeight(quint32 weight);
54
55 QString displayName() const;
56 void setDisplayName(const QString &displayName);
57 QString description() const;
58 void setDescription(const QString &description);
59 QString icon() const;
60 void setIcon(const QString &icon);
61 QUrl iconSource() const;
62 qint8 badge() const;
63 void setBadge(qint8 badge);
64
65 bool isVisible() const;
66 void setVisible(bool isVisible);
67 bool isVisibleToApp() const;
68
69 bool isEnabled() const;
70 void setEnabled(bool enabled);
71 bool isEnabledToApp() const;
72
73 // 是否参与搜索,默认参与搜索
74 bool canSearch() const;
75 void setCanSearch(bool canSearch);
76
77 enum BackgroundType {
78 AutoBg = 0, // 自动,Menu为Normal|Hover,Group为Normal,其他无背景,默认
79 Normal = 0x01, // 正常base背景
80 Hover = 0x02, // 鼠标悬浮背景
81 Clickable = 0x04, // 点击触发active信号
82 Highlight = 0x08, // 高亮背景,通常表示选中状态
83 Warning = 0x10, // 红色
84 ClickStyle = Normal | Hover | Clickable, // 有悬浮背景并可点击
85 };
86 Q_DECLARE_FLAGS(BackgroundTypes, BackgroundType)
87 Q_FLAG(BackgroundTypes)
88 BackgroundTypes backgroundType() const;
89 void setBackgroundType(BackgroundTypes type);
90
91 DccObject *currentObject();
92 void setCurrentObject(DccObject *obj);
93
94 enum PageType {
95 EditorPage = 1, // 编辑控件,page为右则的编辑控件,左则为displayName和description
96 ItemPage, // 控件,page为整个控件
97
98 Menu = 0x40, // 菜单项,子页面是page,默认
99 MenuEditor, // 菜单加编辑控件,子项是一个菜单项
100
101 Control = 0x20, // 页面中的一个控件,与其他组合使用
102 Editor = EditorPage | Control, // 编辑控件
103 Item = ItemPage | Control, // 控件
104
105 UserType = 0x80, // 0x80及以上: 用户自定义使用
106 };
107 Q_ENUM(PageType)
108 quint8 pageType() const;
109 void setPageType(quint8 type);
110 Q_INVOKABLE QQuickItem *getSectionItem(QObject *parent);
111 QQuickItem *parentItem();
112 void setParentItem(QQuickItem *item);
113 QQmlComponent *page() const;
114 void setPage(QQmlComponent *page);
115
116 QQmlListProperty<QObject> data();
117 const QVector<DccObject *> &getChildren() const;
118
119 class Private;
120
121Q_SIGNALS:
122 // 激活信号
123 void active(const QString &cmd);
124 void deactive();
125 // 子项变化信号
126 void childAboutToBeAdded(const DccObject *parent, int pos);
127 void childAdded(DccObject *child);
128 void childAboutToBeRemoved(const DccObject *parent, int pos);
129 void childRemoved(DccObject *child);
130 void childAboutToBeMoved(const DccObject *parent, int pos, int oldPos);
131 void childMoved(DccObject *child);
132 void childrenChanged(const QVector<DccObject *> &children);
133 // 属性变化信号
134 void nameChanged(const QString &name);
135 void parentNameChanged(const QString &parentName);
136 void weightChanged(quint32 weight);
137
138 void displayNameChanged(const QString &displayName);
139 void descriptionChanged(const QString &description);
140 void iconChanged(const QString &icon);
141 void iconSourceChanged(const QUrl &iconSource);
142 void badgeChanged(qint8 badge);
143
144 void visibleChanged(bool visible);
145 void enabledChanged(bool enabled);
146 void visibleToAppChanged(bool visibleToApp);
147 void enabledToAppChanged(bool enabledToApp);
148 void canSearchChanged(bool canSearch);
149
150 void backgroundTypeChanged(BackgroundTypes type);
151
152 void currentObjectChanged(DccObject *obj);
153
154 void pageTypeChanged(quint8 type);
155 void pageChanged(QQmlComponent *page);
156 void parentItemChanged(QQuickItem *item);
157
158protected:
159 DccObject::Private *p_ptr;
160};
161} // namespace dccV25
162#endif // DCCOBJECT_H
Definition dccobject.h:14