File indexing completed on 2024-05-19 05:38:05
0001 /* 0002 SPDX-FileCopyrightText: 2014 Marco Martin <mart@kde.org> 0003 SPDX-FileCopyrightText: 2014 Vishesh Handa <me@vhanda.in> 0004 SPDX-FileCopyrightText: 2016 David Rosca <nowrep@gmail.com> 0005 SPDX-FileCopyrightText: 2018 Kai Uwe Broulik <kde@privat.broulik.de> 0006 SPDX-FileCopyrightText: 2019 Kevin Ottens <kevin.ottens@enioka.com> 0007 0008 SPDX-License-Identifier: LGPL-2.0-only 0009 */ 0010 0011 #pragma once 0012 0013 #include <KQuickManagedConfigModule> 0014 #include <QLoggingCategory> 0015 0016 #include "desktopthemesettings.h" 0017 #include "themesmodel.h" 0018 0019 class QTemporaryFile; 0020 0021 namespace KSvg 0022 { 0023 class ImageSet; 0024 } 0025 0026 namespace KIO 0027 { 0028 class FileCopyJob; 0029 } 0030 0031 class QQuickItem; 0032 class DesktopThemeData; 0033 class FilterProxyModel; 0034 0035 class KCMDesktopTheme : public KQuickManagedConfigModule 0036 { 0037 Q_OBJECT 0038 0039 Q_PROPERTY(DesktopThemeSettings *desktopThemeSettings READ desktopThemeSettings CONSTANT) 0040 Q_PROPERTY(FilterProxyModel *filteredModel READ filteredModel CONSTANT) 0041 Q_PROPERTY(ThemesModel *desktopThemeModel READ desktopThemeModel CONSTANT) 0042 Q_PROPERTY(bool downloadingFile READ downloadingFile NOTIFY downloadingFileChanged) 0043 Q_PROPERTY(bool canEditThemes READ canEditThemes CONSTANT) 0044 0045 public: 0046 KCMDesktopTheme(QObject *parent, const KPluginMetaData &data); 0047 ~KCMDesktopTheme() override; 0048 0049 DesktopThemeSettings *desktopThemeSettings() const; 0050 ThemesModel *desktopThemeModel() const; 0051 FilterProxyModel *filteredModel() const; 0052 0053 bool downloadingFile() const; 0054 0055 bool canEditThemes() const; 0056 0057 Q_INVOKABLE void installThemeFromFile(const QUrl &url); 0058 0059 Q_INVOKABLE void applyPlasmaTheme(QQuickItem *item, const QString &themeName); 0060 0061 Q_INVOKABLE void editTheme(const QString &themeName); 0062 0063 Q_SIGNALS: 0064 void downloadingFileChanged(); 0065 0066 void showSuccessMessage(const QString &message); 0067 void showErrorMessage(const QString &message); 0068 0069 public Q_SLOTS: 0070 void load() override; 0071 void save() override; 0072 void defaults() override; 0073 0074 private: 0075 bool isSaveNeeded() const override; 0076 0077 void processPendingDeletions(); 0078 0079 void installTheme(const QString &path); 0080 0081 DesktopThemeData *m_data; 0082 0083 ThemesModel *m_model; 0084 FilterProxyModel *m_filteredModel; 0085 QHash<QString, KSvg::ImageSet *> m_themes; 0086 bool m_haveThemeExplorerInstalled; 0087 0088 std::unique_ptr<QTemporaryFile> m_tempInstallFile; 0089 QPointer<KIO::FileCopyJob> m_tempCopyJob; 0090 }; 0091 0092 Q_DECLARE_LOGGING_CATEGORY(KCM_DESKTOP_THEME)