WIP: add Qt Quick HomeScreen UI
[staging/HomeScreen.git] / HomeScreenNG / statusbarmodel.cpp
1 #include "statusbarmodel.h"
2 #include "statusbarserver.h"
3
4 #include <QtDBus/QDBusConnection>
5
6 class StatusBarModel::Private
7 {
8 public:
9     Private(StatusBarModel *parent);
10
11 private:
12     StatusBarModel *q;
13 public:
14     StatusBarServer server;
15     QString iconList[StatusBarServer::SupportedCount];
16 };
17
18 StatusBarModel::Private::Private(StatusBarModel *parent)
19     : q(parent)
20 {
21     QDBusConnection dbus = QDBusConnection::sessionBus();
22     dbus.registerObject("/StatusBar", &server);
23     dbus.registerService("org.agl.homescreen");
24     connect(&server, &StatusBarServer::statusIconChanged, [&](int placeholderIndex, const QString &icon) {
25         if (placeholderIndex < 0 || StatusBarServer::SupportedCount <= placeholderIndex) return;
26         if (iconList[placeholderIndex] == icon) return;
27         iconList[placeholderIndex] = icon;
28         emit q->dataChanged(q->index(placeholderIndex), q->index(placeholderIndex));
29     });
30     for (int i = 0; i < StatusBarServer::SupportedCount; i++) {
31         iconList[i] = server.getStatusIcon(i);
32     }
33 }
34
35 StatusBarModel::StatusBarModel(QObject *parent)
36     : QAbstractListModel(parent)
37     , d(new Private(this))
38 {
39 }
40
41 StatusBarModel::~StatusBarModel()
42 {
43     delete d;
44 }
45
46 int StatusBarModel::rowCount(const QModelIndex &parent) const
47 {
48     if (parent.isValid())
49         return 0;
50
51     return StatusBarServer::SupportedCount;
52 }
53
54 QVariant StatusBarModel::data(const QModelIndex &index, int role) const
55 {
56     QVariant ret;
57     if (!index.isValid())
58         return ret;
59
60     switch (role) {
61     case Qt::DisplayRole:
62         ret = d->iconList[index.row()];
63         break;
64     default:
65         break;
66     }
67
68     return ret;
69 }
70
71 QHash<int, QByteArray> StatusBarModel::roleNames() const
72 {
73     QHash<int, QByteArray> roles;
74     roles[Qt::DisplayRole] = "icon";
75     return roles;
76 }