1 /*
2     SPDX-FileCopyrightText: 2019 Kai Uwe Broulik <kde@privat.broulik.de>
3     SPDX-FileCopyrightText: 2019 David Redondo <kde@david-redondo.de>
4 
5     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
6 */
7 
8 #pragma once
9 
10 #include <QSortFilterProxyModel>
11 
12 #include "kcm.h"
13 
14 class FilterProxyModel : public QSortFilterProxyModel
15 {
16     Q_OBJECT
17 
18 public:
19     enum ThemeFilter {
20         AllThemes,
21         LightThemes,
22         DarkThemes,
23         ThemesFollowingColors,
24     };
25     Q_ENUM(ThemeFilter)
26 
27     Q_PROPERTY(QString selectedTheme READ selectedTheme WRITE setSelectedTheme NOTIFY selectedThemeChanged)
28     Q_PROPERTY(int selectedThemeIndex READ selectedThemeIndex NOTIFY selectedThemeIndexChanged)
29     Q_PROPERTY(QString query READ query WRITE setQuery NOTIFY queryChanged)
30     Q_PROPERTY(ThemeFilter filter READ filter WRITE setFilter NOTIFY filterChanged)
31 
32     FilterProxyModel(QObject *parent = nullptr);
33     ~FilterProxyModel() override;
34 
35     QString selectedTheme() const;
36     void setSelectedTheme(const QString &pluginName);
37 
38     int selectedThemeIndex() const;
39 
40     QString query() const;
41     void setQuery(const QString &query);
42 
43     ThemeFilter filter() const;
44     void setFilter(ThemeFilter filter);
45 
46     bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
47 
48 Q_SIGNALS:
49     void filterChanged();
50     void queryChanged();
51 
52     void selectedThemeChanged();
53     void selectedThemeIndexChanged();
54 
55 private:
56     QString m_selectedTheme;
57     QString m_query;
58     ThemeFilter m_filter = AllThemes;
59 };
60