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 };