1 /*
2     SPDX-FileCopyrightText: 2014-2015 Eike Hein <hein@kde.org>
3     SPDX-FileCopyrightText: 2016-2017 Ivan Cukic <ivan.cukic@kde.org>
4 
5     SPDX-License-Identifier: GPL-2.0-or-later
6 */
7 
8 #pragma once
9 
10 #include "placeholdermodel.h"
11 
12 #include <QPointer>
13 
14 #include <KConfig>
15 
16 class PlaceholderModel;
17 
18 namespace KActivities
19 {
20 class Consumer;
21 namespace Stats
22 {
23 namespace Terms
24 {
25 class Activity;
26 } // namespace Terms
27 } // namespace Stats
28 } // namespace KActivities
29 
30 class KAStatsFavoritesModel : public PlaceholderModel
31 {
32     Q_OBJECT
33 
34     Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged)
35     Q_PROPERTY(QStringList favorites READ favorites WRITE setFavorites NOTIFY favoritesChanged)
36     Q_PROPERTY(int maxFavorites READ maxFavorites WRITE setMaxFavorites NOTIFY maxFavoritesChanged)
37 
38     Q_PROPERTY(QObject *activities READ activities CONSTANT)
39 
40 public:
41     explicit KAStatsFavoritesModel(QObject *parent = nullptr);
42     ~KAStatsFavoritesModel() override;
43 
44     QString description() const override;
45 
46     Q_INVOKABLE bool trigger(int row, const QString &actionId, const QVariant &argument) override;
47 
48     bool enabled() const;
49     void setEnabled(bool enable);
50 
51     QStringList favorites() const;
52     void setFavorites(const QStringList &favorites);
53 
54     int maxFavorites() const;
55     void setMaxFavorites(int max);
56 
57     Q_INVOKABLE bool isFavorite(const QString &id) const;
58 
59     Q_INVOKABLE void addFavorite(const QString &id, int index = -1);
60     Q_INVOKABLE void removeFavorite(const QString &id);
61 
62     Q_INVOKABLE void addFavoriteTo(const QString &id, const QString &activityId, int index = -1);
63     Q_INVOKABLE void removeFavoriteFrom(const QString &id, const QString &activityId);
64 
65     Q_INVOKABLE void setFavoriteOn(const QString &id, const QString &activityId);
66 
67     Q_INVOKABLE void portOldFavorites(const QStringList &ids);
68 
69     Q_INVOKABLE QStringList linkedActivitiesFor(const QString &id) const;
70 
71     Q_INVOKABLE void moveRow(int from, int to);
72 
73     Q_INVOKABLE void initForClient(const QString &client);
74 
75     QObject *activities() const;
76     Q_INVOKABLE QString activityNameForId(const QString &activityId) const;
77 
78     AbstractModel *favoritesModel() override;
79 
80 public Q_SLOTS:
81     void refresh() override;
82 
83 Q_SIGNALS:
84     void enabledChanged() const;
85     void favoritesChanged() const;
86     void maxFavoritesChanged() const;
87 
88 private:
89     class Private;
90     Private *d;
91 
92     AbstractEntry *favoriteFromId(const QString &id) const;
93 
94     void addFavoriteTo(const QString &id, const KActivities::Stats::Terms::Activity &activityId, int index = -1);
95     void removeFavoriteFrom(const QString &id, const KActivities::Stats::Terms::Activity &activityId);
96 
97     bool m_enabled;
98 
99     int m_maxFavorites;
100 
101     KActivities::Consumer *m_activities;
102 };
103