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)