File indexing completed on 2024-10-13 07:58:58
0001 // SPDX-FileCopyrightText: 2023 Méven Car <meven@kde.org> 0002 // SPDX-FileCopyrightText: 2023 Devin Lin <devin@kde.org> 0003 // SPDX-License-Identifier: GPL-2.0-or-later 0004 0005 #pragma once 0006 0007 #include <QObject> 0008 #include <QQmlPropertyMap> 0009 #include <QQuickItem> 0010 #include <qqmlregistration.h> 0011 0012 #include <KConfig> 0013 #include <KConfigGroup> 0014 #include <KConfigLoader> 0015 #include <KConfigPropertyMap> 0016 #include <KConfigWatcher> 0017 0018 #include <PlasmaQuick/ConfigModel> 0019 0020 #include <QCoroDBusPendingReply> 0021 0022 class WallpaperConfigModel; 0023 class WallpaperPlugin : public QObject 0024 { 0025 Q_OBJECT 0026 QML_ELEMENT 0027 QML_SINGLETON 0028 0029 Q_PROPERTY(QString homescreenWallpaperPath READ homescreenWallpaperPath NOTIFY homescreenWallpaperPathChanged) 0030 Q_PROPERTY(QString lockscreenWallpaperPath READ lockscreenWallpaperPath NOTIFY lockscreenWallpaperPathChanged) 0031 0032 Q_PROPERTY(QQmlPropertyMap *homescreenConfiguration READ homescreenConfiguration NOTIFY homescreenConfigurationChanged) 0033 Q_PROPERTY(QQmlPropertyMap *lockscreenConfiguration READ lockscreenConfiguration NOTIFY lockscreenConfigurationChanged) 0034 Q_PROPERTY(PlasmaQuick::ConfigModel *wallpaperPluginModel READ wallpaperPluginModel CONSTANT) 0035 0036 Q_PROPERTY(QString homescreenWallpaperPlugin READ homescreenWallpaperPlugin WRITE setHomescreenWallpaperPlugin NOTIFY homescreenWallpaperPluginChanged) 0037 Q_PROPERTY(QString homescreenWallpaperPluginSource READ homescreenWallpaperPluginSource NOTIFY homescreenWallpaperPluginChanged) 0038 Q_PROPERTY(QString lockscreenWallpaperPlugin READ lockscreenWallpaperPlugin WRITE setLockscreenWallpaperPlugin NOTIFY lockscreenWallpaperPluginChanged) 0039 Q_PROPERTY(QString lockscreenWallpaperPluginSource READ lockscreenWallpaperPluginSource NOTIFY lockscreenWallpaperPluginChanged) 0040 0041 public: 0042 WallpaperPlugin(QObject *parent = nullptr); 0043 0044 PlasmaQuick::ConfigModel *wallpaperPluginModel(); 0045 QQmlPropertyMap *homescreenConfiguration() const; 0046 QQmlPropertyMap *lockscreenConfiguration() const; 0047 0048 QString homescreenWallpaperPlugin() const; 0049 QString homescreenWallpaperPluginSource(); 0050 Q_INVOKABLE void setHomescreenWallpaperPlugin(const QString &wallpaperPlugin); 0051 QString lockscreenWallpaperPlugin() const; 0052 QString lockscreenWallpaperPluginSource(); 0053 Q_INVOKABLE void setLockscreenWallpaperPlugin(const QString &wallpaperPlugin); 0054 0055 // changes the plugin to org.kde.image and sets an image 0056 Q_INVOKABLE QCoro::Task<void> setHomescreenWallpaper(const QString &path); 0057 Q_INVOKABLE void setLockscreenWallpaper(const QString &path); 0058 0059 QString homescreenWallpaperPath(); 0060 QString lockscreenWallpaperPath(); 0061 0062 Q_INVOKABLE QCoro::Task<void> saveHomescreenSettings(); 0063 Q_INVOKABLE void saveLockscreenSettings(); 0064 0065 public Q_SLOTS: 0066 QCoro::Task<void> loadHomescreenSettings(); 0067 void loadLockscreenSettings(); 0068 0069 Q_SIGNALS: 0070 void homescreenWallpaperPathChanged(); 0071 void lockscreenWallpaperPathChanged(); 0072 void homescreenConfigurationChanged(); 0073 void lockscreenConfigurationChanged(); 0074 void currentWallpaperPluginChanged(); 0075 void homescreenWallpaperPluginChanged(); 0076 void lockscreenWallpaperPluginChanged(); 0077 0078 private: 0079 QQmlPropertyMap *loadConfiguration(KConfigGroup group, QString wallpaperPlugin, bool loadDefaults); 0080 0081 QString m_homescreenWallpaperPlugin; 0082 QString m_lockscreenWallpaperPlugin; 0083 0084 QString m_homescreenWallpaperPath; 0085 QString m_lockscreenWallpaperPath; 0086 0087 QQmlPropertyMap *m_homescreenConfig{nullptr}; 0088 QQmlPropertyMap *m_lockscreenConfig{nullptr}; 0089 0090 KSharedConfig::Ptr m_homescreenConfigFile{nullptr}; 0091 KSharedConfig::Ptr m_lockscreenConfigFile{nullptr}; 0092 KConfigWatcher::Ptr m_lockscreenConfigWatcher{nullptr}; 0093 0094 WallpaperConfigModel *m_wallpaperPluginModel = nullptr; 0095 }; 0096 0097 class WallpaperConfigModel : public PlasmaQuick::ConfigModel 0098 { 0099 Q_OBJECT 0100 0101 public: 0102 WallpaperConfigModel(QObject *parent); 0103 public Q_SLOTS: 0104 void repopulate(); 0105 };