Unity 8
appdrawerproxymodel.h
1 /*
2  * Copyright (C) 2016 Canonical, Ltd.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU 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 General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  */
16 
17 #include <QSortFilterProxyModel>
18 
19 #include <unity/shell/launcher/AppDrawerModelInterface.h>
20 
21 using namespace unity::shell::launcher;
22 
23 class AppDrawerProxyModel: public QSortFilterProxyModel
24 {
25  Q_OBJECT
26  Q_ENUMS(GroupBy)
27  Q_ENUMS(SortBy)
28  Q_PROPERTY(QAbstractItemModel* source READ source WRITE setSource NOTIFY sourceChanged)
29  Q_PROPERTY(GroupBy group READ group WRITE setGroup NOTIFY groupChanged)
30  Q_PROPERTY(QString filterLetter READ filterLetter WRITE setFilterLetter NOTIFY filterLetterChanged)
31  Q_PROPERTY(QString filterString READ filterString WRITE setFilterString NOTIFY filterStringChanged)
32  Q_PROPERTY(SortBy sortBy READ sortBy WRITE setSortBy NOTIFY sortByChanged)
33  Q_PROPERTY(int count READ count NOTIFY countChanged)
34 
35 public:
36  enum GroupBy {
37  GroupByNone,
38  GroupByAll,
39  GroupByAToZ
40  };
41  enum SortBy {
42  SortByAToZ,
43  SortByUsage
44  };
45 
46  AppDrawerProxyModel(QObject* parent = nullptr);
47 
48  QAbstractItemModel* source() const;
49  void setSource(QAbstractItemModel* source);
50 
51  GroupBy group() const;
52  void setGroup(GroupBy group);
53 
54  QString filterLetter() const;
55  void setFilterLetter(const QString &filterLetter);
56 
57  QString filterString() const;
58  void setFilterString(const QString &filterString);
59 
60  SortBy sortBy() const;
61  void setSortBy(SortBy sortBy);
62 
63  int count() const;
64 
65  QVariant data(const QModelIndex &index, int role) const override;
66  QHash<int, QByteArray> roleNames() const override;
67 
68  Q_INVOKABLE QString appId(int index) const;
69 
70 protected:
71  bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
72 
73 Q_SIGNALS:
74  void sourceChanged();
75  void groupChanged();
76  void filterLetterChanged();
77  void filterStringChanged();
78  void sortByChanged();
79  void countChanged();
80 
81 private:
82  QAbstractItemModel* m_source = nullptr;
83  GroupBy m_group = GroupByNone;
84  QString m_filterLetter;
85  QString m_filterString;
86  SortBy m_sortBy = SortByAToZ;
87 };