File indexing completed on 2024-05-12 05:35:47

0001 /*
0002     SPDX-FileCopyrightText: 2018 <furkantokac34@gmail.com>
0003     SPDX-FileCopyrightText: 2019 Cyril Rossi <cyril.rossi@enioka.com>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #pragma once
0009 
0010 #include <KPackage/Package>
0011 #include <KQuickManagedConfigModule>
0012 
0013 #include <QJsonArray>
0014 #include <QJsonValue>
0015 #include <QSortFilterProxyModel>
0016 
0017 class QStandardItemModel;
0018 
0019 class LandingPageData;
0020 class LandingPageGlobalsSettings;
0021 
0022 namespace KActivities
0023 {
0024 namespace Stats
0025 {
0026 class ResultModel;
0027 }
0028 }
0029 
0030 class MostUsedModel : public QSortFilterProxyModel
0031 {
0032     Q_OBJECT
0033 
0034 public:
0035     enum Roles { KcmPluginRole = Qt::UserRole + 1000 };
0036 
0037     explicit MostUsedModel(QObject *parent = nullptr);
0038     void setResultModel(KActivities::Stats::ResultModel *model);
0039     QHash<int, QByteArray> roleNames() const override;
0040     bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
0041     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
0042 
0043 private:
0044     // Model when there is nothing from kactivities-stat
0045     QStandardItemModel *m_defaultModel = nullptr;
0046     // Model fed by kactivities-stats
0047     KActivities::Stats::ResultModel *m_resultModel = nullptr;
0048     mutable QStringList ignoredKCMs;
0049 };
0050 
0051 class LookAndFeelGroup : public QObject
0052 {
0053     Q_OBJECT
0054     Q_PROPERTY(QString id READ id CONSTANT)
0055     Q_PROPERTY(QString name READ name CONSTANT)
0056     Q_PROPERTY(QUrl thumbnail READ thumbnail CONSTANT)
0057 
0058 public:
0059     LookAndFeelGroup(QObject *parent = nullptr);
0060     QString id() const;
0061     QString name() const;
0062     QUrl thumbnail() const;
0063 
0064     KPackage::Package m_package;
0065 };
0066 
0067 class KCMLandingPage : public KQuickManagedConfigModule
0068 {
0069     Q_OBJECT
0070     Q_PROPERTY(MostUsedModel *mostUsedModel READ mostUsedModel CONSTANT)
0071     Q_PROPERTY(LandingPageGlobalsSettings *globalsSettings READ globalsSettings CONSTANT)
0072     Q_PROPERTY(LookAndFeelGroup *defaultLightLookAndFeel READ defaultLightLookAndFeel CONSTANT)
0073     Q_PROPERTY(LookAndFeelGroup *defaultDarkLookAndFeel READ defaultDarkLookAndFeel CONSTANT)
0074 
0075 public:
0076     KCMLandingPage(QObject *parent, const KPluginMetaData &metaData);
0077     ~KCMLandingPage() override
0078     {
0079     }
0080 
0081     MostUsedModel *mostUsedModel() const;
0082 
0083     LandingPageGlobalsSettings *globalsSettings() const;
0084 
0085     LookAndFeelGroup *defaultLightLookAndFeel() const;
0086     LookAndFeelGroup *defaultDarkLookAndFeel() const;
0087 
0088     Q_INVOKABLE void openKCM(const QString &kcm);
0089 
0090 public Q_SLOTS:
0091     void save() override;
0092 
0093 private:
0094     LandingPageData *m_data = nullptr;
0095 
0096     LookAndFeelGroup *m_defaultLightLookAndFeel = nullptr;
0097     LookAndFeelGroup *m_defaultDarkLookAndFeel = nullptr;
0098 
0099     MostUsedModel *m_mostUsedModel = nullptr;
0100 
0101     bool m_lnfDirty = false;
0102 };