1 /* 2 SPDX-FileCopyrightText: 2014 Marco Martin <mart@kde.org> 3 SPDX-FileCopyrightText: 2014 Vishesh Handa <me@vhanda.in> 4 SPDX-FileCopyrightText: 2016 David Rosca <nowrep@gmail.com> 5 SPDX-FileCopyrightText: 2018 Kai Uwe Broulik <kde@privat.broulik.de> 6 SPDX-FileCopyrightText: 2019 Kevin Ottens <kevin.ottens@enioka.com> 7 8 SPDX-License-Identifier: LGPL-2.0-only 9 */ 10 11 #pragma once 12 13 #include <KQuickAddons/ManagedConfigModule> 14 15 #include "desktopthemesettings.h" 16 #include "themesmodel.h" 17 18 class QTemporaryFile; 19 20 namespace Plasma 21 { 22 class Theme; 23 } 24 25 namespace KIO 26 { 27 class FileCopyJob; 28 } 29 30 class QQuickItem; 31 class DesktopThemeData; 32 class FilterProxyModel; 33 34 class KCMDesktopTheme : public KQuickAddons::ManagedConfigModule 35 { 36 Q_OBJECT 37 38 Q_PROPERTY(DesktopThemeSettings *desktopThemeSettings READ desktopThemeSettings CONSTANT) 39 Q_PROPERTY(FilterProxyModel *filteredModel READ filteredModel CONSTANT) 40 Q_PROPERTY(ThemesModel *desktopThemeModel READ desktopThemeModel CONSTANT) 41 Q_PROPERTY(bool downloadingFile READ downloadingFile NOTIFY downloadingFileChanged) 42 Q_PROPERTY(bool canEditThemes READ canEditThemes CONSTANT) 43 44 public: 45 KCMDesktopTheme(QObject *parent, const QVariantList &args); 46 ~KCMDesktopTheme() override; 47 48 DesktopThemeSettings *desktopThemeSettings() const; 49 ThemesModel *desktopThemeModel() const; 50 FilterProxyModel *filteredModel() const; 51 52 bool downloadingFile() const; 53 54 bool canEditThemes() const; 55 56 Q_INVOKABLE void installThemeFromFile(const QUrl &url); 57 58 Q_INVOKABLE void applyPlasmaTheme(QQuickItem *item, const QString &themeName); 59 60 Q_INVOKABLE void editTheme(const QString &themeName); 61 62 Q_SIGNALS: 63 void downloadingFileChanged(); 64 65 void showSuccessMessage(const QString &message); 66 void showErrorMessage(const QString &message); 67 68 public Q_SLOTS: 69 void load() override; 70 void save() override; 71 void defaults() override; 72 73 private: 74 bool isSaveNeeded() const override; 75 76 void processPendingDeletions(); 77 78 void installTheme(const QString &path); 79 80 DesktopThemeData *m_data; 81 82 ThemesModel *m_model; 83 FilterProxyModel *m_filteredModel; 84 QHash<QString, Plasma::Theme *> m_themes; 85 bool m_haveThemeExplorerInstalled; 86 87 QScopedPointer<QTemporaryFile> m_tempInstallFile; 88 QPointer<KIO::FileCopyJob> m_tempCopyJob; 89 }; 90 91 Q_DECLARE_LOGGING_CATEGORY(KCM_DESKTOP_THEME) 92