1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
#ifndef APPLICATIONSMODEL_H
#define APPLICATIONSMODEL_H
#include <QAbstractListModel>
#include <QDBusObjectPath>
class QDBusInterface;
class AppItem: public QObject
{
Q_OBJECT
Q_PROPERTY(QString storeId MEMBER m_storeId CONSTANT)
Q_PROPERTY(QString uuid MEMBER m_uuid CONSTANT)
Q_PROPERTY(QString name MEMBER m_name CONSTANT)
Q_PROPERTY(QString icon MEMBER m_icon CONSTANT)
Q_PROPERTY(QString vendor MEMBER m_vendor NOTIFY vendorChanged)
Q_PROPERTY(QString version MEMBER m_version NOTIFY versionChanged)
Q_PROPERTY(QString description MEMBER m_description CONSTANT)
Q_PROPERTY(int hearts MEMBER m_hearts CONSTANT)
Q_PROPERTY(QStringList screenshotImages MEMBER m_screenshotImages CONSTANT)
Q_PROPERTY(QString headerImage READ headerImage NOTIFY headerImageChanged)
Q_PROPERTY(QString category MEMBER m_category CONSTANT)
Q_PROPERTY(bool isWatchFace MEMBER m_isWatchFace NOTIFY isWatchFaceChanged)
Q_PROPERTY(bool isSystemApp MEMBER m_isSystemApp CONSTANT)
Q_PROPERTY(bool hasSettings MEMBER m_hasSettings CONSTANT)
Q_PROPERTY(bool companion MEMBER m_companion CONSTANT)
Q_PROPERTY(QString groupId MEMBER m_groupId CONSTANT)
public:
AppItem(QObject *parent = 0);
QString storeId() const;
QString uuid() const;
QString name() const;
QString icon() const;
QString vendor() const;
QString version() const;
QString description() const;
int hearts() const;
QStringList screenshotImages() const;
QString headerImage() const;
bool isWatchFace() const;
bool isSystemApp() const;
bool hasSettings() const;
bool companion() const;
QString category() const;
QString groupId() const;
void setStoreId(const QString &storeId);
void setUuid(const QString &uuid);
void setName(const QString &name);
void setIcon(const QString &icon);
void setVendor(const QString &vendor);
void setVersion(const QString &version);
void setDescription(const QString &description);
void setHearts(int hearts);
void setCategory(const QString &category);
void setScreenshotImages(const QStringList &screenshotImages);
void setHeaderImage(const QString &headerImage);
void setIsWatchFace(bool isWatchFace);
void setIsSystemApp(bool isSystemApp);
void setHasSettings(bool hasSettings);
void setCompanion(bool companion);
// For grouping in lists, e.g. by collection
void setGroupId(const QString &groupId);
signals:
void versionChanged();
void vendorChanged();
void headerImageChanged();
void isWatchFaceChanged();
private:
QString m_storeId;
QString m_uuid;
QString m_name;
QString m_icon;
QString m_vendor;
QString m_version;
QString m_description;
int m_hearts = 0;
QString m_category;
QStringList m_screenshotImages;
bool m_isWatchFace = false;
bool m_isSystemApp = false;
bool m_hasSettings = false;
bool m_companion = false;
QString m_groupId;
QString m_headerImage;
};
class ApplicationsModel : public QAbstractListModel
{
Q_OBJECT
Q_PROPERTY(QStringList links READ links NOTIFY linksChanged)
public:
enum Roles {
RoleStoreId,
RoleUuid,
RoleName,
RoleIcon,
RoleVendor,
RoleVersion,
RoleIsWatchFace,
RoleIsSystemApp,
RoleHasSettings,
RoleDescription,
RoleHearts,
RoleCategory,
RoleGroupId
};
ApplicationsModel(QObject *parent = nullptr);
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role) const override;
QHash<int, QByteArray> roleNames() const override;
void clear();
void insert(AppItem *item);
void insertGroup(const QString &id, const QString &name, const QString &link);
Q_INVOKABLE AppItem* get(int index) const;
AppItem* findByStoreId(const QString &storeId) const;
AppItem* findByUuid(const QString &uuid) const;
Q_INVOKABLE bool contains(const QString &storeId) const;
int indexOf(AppItem *item) const;
Q_INVOKABLE QString groupName(const QString &groupId) const;
Q_INVOKABLE QString groupLink(const QString &groupId) const;
QStringList links() const;
Q_INVOKABLE QString linkName(const QString &link) const;
void addLink(const QString &link, const QString &name);
Q_INVOKABLE void move(int from, int to);
Q_INVOKABLE void commitMove();
signals:
void linksChanged();
void appsSorted();
void changed();
private:
QList<AppItem*> m_apps;
QHash<QString, QString> m_groupNames;
QHash<QString, QString> m_groupLinks;
QStringList m_links;
QHash<QString, QString> m_linkNames;
};
#endif // APPLICATIONSMODEL_H
|