Lomiri
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 <lomiri/shell/launcher/AppDrawerModelInterface.h>
20 
21 using namespace lomiri::shell::launcher;
22 
23 class AppDrawerProxyModel: public QSortFilterProxyModel
24 {
25  Q_OBJECT
26  Q_PROPERTY(QAbstractItemModel* source READ source WRITE setSource NOTIFY sourceChanged)
27  Q_PROPERTY(GroupBy group READ group WRITE setGroup NOTIFY groupChanged)
28  Q_PROPERTY(QString filterLetter READ filterLetter WRITE setFilterLetter NOTIFY filterLetterChanged)
29  Q_PROPERTY(QString filterString READ filterString WRITE setFilterString NOTIFY filterStringChanged)
30  Q_PROPERTY(SortBy sortBy READ sortBy WRITE setSortBy NOTIFY sortByChanged)
31  Q_PROPERTY(int count READ count NOTIFY countChanged)
32 
33 public:
34  enum GroupBy {
35  GroupByNone,
36  GroupByAll,
37  GroupByAToZ
38  };
39  Q_ENUM(GroupBy)
40  enum SortBy {
41  SortByAToZ,
42  SortByUsage
43  };
44  Q_ENUM(SortBy)
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 };