Unity 8
indicatorsmodel.h
1 /*
2  * Copyright 2012 Canonical Ltd.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License as published by
6  * the Free Software Foundation; version 3.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU Lesser General Public License for more details.
12  *
13  * You should have received a copy of the GNU Lesser General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  *
16  * Authors:
17  * Renato Araujo Oliveira Filho <renato@canonical.com>
18  * Nick Dedekind <nick.dedekind@canonical.com>
19  */
20 
21 #ifndef INDICATORSMODEL_H
22 #define INDICATORSMODEL_H
23 
24 #include "indicator.h"
25 #include "unityindicatorsglobal.h"
26 
27 #include <QAbstractListModel>
28 #include <QQmlEngine>
29 
30 class IndicatorsManager;
31 
32 class UNITYINDICATORS_EXPORT IndicatorsModel : public QAbstractListModel
33 {
34  Q_OBJECT
35  Q_ENUMS(Roles)
36  Q_PROPERTY(int count READ count NOTIFY countChanged)
37  Q_PROPERTY(QString profile READ profile WRITE setProfile NOTIFY profileChanged)
38 
39 public:
40 
41  IndicatorsModel(QObject *parent=0);
42  ~IndicatorsModel();
43 
44  Q_INVOKABLE void load();
45  Q_INVOKABLE void unload();
46 
47  Q_INVOKABLE QVariant data(int row, int role) const;
48 
49  QString profile() const;
50  void setProfile(const QString& profile);
51 
52  /* QAbstractItemModel */
53  QHash<int, QByteArray> roleNames() const override;
54  int columnCount(const QModelIndex &parent = QModelIndex()) const override;
55  QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
56  QModelIndex parent (const QModelIndex &index) const override;
57  int rowCount(const QModelIndex &parent = QModelIndex()) const override;
58 
59 
60 Q_SIGNALS:
61  void countChanged();
62  void profileChanged();
63  void indicatorDataChanged(const QVariant& data);
64 
65 private Q_SLOTS:
66  void onIdentifierChanged();
67  void onIndicatorPropertiesChanged();
68  void onIndicatorLoaded(const QString& indicator);
69  void onIndicatorAboutToBeUnloaded(const QString& indicator);
70 
71 private:
72  IndicatorsManager *m_manager;
73 
74  QList<Indicator::Ptr> m_indicators;
75 
76  void notifyDataChanged(QObject *sender, int role);
77  int count() const;
78 };
79 
80 #endif // INDICATORSMODEL_H