File indexing completed on 2024-05-12 17:07:20

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 <KQuickAddons/ManagedConfigModule>
0012 
0013 #include <QJsonArray>
0014 #include <QJsonValue>
0015 
0016 class QStandardItemModel;
0017 
0018 class LandingPageData;
0019 class LandingPageGlobalsSettings;
0020 
0021 namespace KActivities
0022 {
0023 namespace Stats
0024 {
0025 class ResultModel;
0026 }
0027 }
0028 
0029 class MostUsedModel : public QSortFilterProxyModel
0030 {
0031     Q_OBJECT
0032 
0033 public:
0034     enum Roles { KcmPluginRole = Qt::UserRole + 1000 };
0035 
0036     explicit MostUsedModel(QObject *parent = nullptr);
0037     void setResultModel(KActivities::Stats::ResultModel *model);
0038     QHash<int, QByteArray> roleNames() const override;
0039     bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
0040     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
0041 
0042 private:
0043     // Model when there is nothing from kactivities-stat
0044     QStandardItemModel *m_defaultModel = nullptr;
0045     // Model fed by kactivities-stats
0046     KActivities::Stats::ResultModel *m_resultModel = nullptr;
0047     mutable QStringList ignoredKCMs;
0048 };
0049 
0050 class LookAndFeelGroup : public QObject
0051 {
0052     Q_OBJECT
0053     Q_PROPERTY(QString id READ id CONSTANT)
0054     Q_PROPERTY(QString name READ name CONSTANT)
0055     Q_PROPERTY(QString thumbnail READ thumbnail CONSTANT)
0056 
0057 public:
0058     LookAndFeelGroup(QObject *parent = nullptr);
0059     QString id() const;
0060     QString name() const;
0061     QString thumbnail() const;
0062 
0063     KPackage::Package m_package;
0064 };
0065 
0066 class KCMLandingPage : public KQuickAddons::ManagedConfigModule
0067 {
0068     Q_OBJECT
0069     Q_PROPERTY(MostUsedModel *mostUsedModel READ mostUsedModel CONSTANT)
0070     Q_PROPERTY(LandingPageGlobalsSettings *globalsSettings READ globalsSettings CONSTANT)
0071     Q_PROPERTY(LookAndFeelGroup *defaultLightLookAndFeel READ defaultLightLookAndFeel CONSTANT)
0072     Q_PROPERTY(LookAndFeelGroup *defaultDarkLookAndFeel READ defaultDarkLookAndFeel CONSTANT)
0073 
0074 public:
0075     KCMLandingPage(QObject *parent, const KPluginMetaData &metaData, const QVariantList &args);
0076     ~KCMLandingPage() override
0077     {
0078     }
0079 
0080     MostUsedModel *mostUsedModel() const;
0081 
0082     LandingPageGlobalsSettings *globalsSettings() const;
0083 
0084     LookAndFeelGroup *defaultLightLookAndFeel() const;
0085     LookAndFeelGroup *defaultDarkLookAndFeel() const;
0086 
0087     Q_INVOKABLE void openWallpaperDialog();
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 };