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