Warning, file /plasma/plasma-workspace/kcms/desktoptheme/kcm.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

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 <KQuickAddons/ManagedConfigModule>
0014 
0015 #include "desktopthemesettings.h"
0016 #include "themesmodel.h"
0017 
0018 class QTemporaryFile;
0019 
0020 namespace Plasma
0021 {
0022 class Theme;
0023 }
0024 
0025 namespace KIO
0026 {
0027 class FileCopyJob;
0028 }
0029 
0030 class QQuickItem;
0031 class DesktopThemeData;
0032 class FilterProxyModel;
0033 
0034 class KCMDesktopTheme : public KQuickAddons::ManagedConfigModule
0035 {
0036     Q_OBJECT
0037 
0038     Q_PROPERTY(DesktopThemeSettings *desktopThemeSettings READ desktopThemeSettings CONSTANT)
0039     Q_PROPERTY(FilterProxyModel *filteredModel READ filteredModel CONSTANT)
0040     Q_PROPERTY(ThemesModel *desktopThemeModel READ desktopThemeModel CONSTANT)
0041     Q_PROPERTY(bool downloadingFile READ downloadingFile NOTIFY downloadingFileChanged)
0042     Q_PROPERTY(bool canEditThemes READ canEditThemes CONSTANT)
0043 
0044 public:
0045     KCMDesktopTheme(QObject *parent, const KPluginMetaData &data, const QVariantList &args);
0046     ~KCMDesktopTheme() override;
0047 
0048     DesktopThemeSettings *desktopThemeSettings() const;
0049     ThemesModel *desktopThemeModel() const;
0050     FilterProxyModel *filteredModel() const;
0051 
0052     bool downloadingFile() const;
0053 
0054     bool canEditThemes() const;
0055 
0056     Q_INVOKABLE void installThemeFromFile(const QUrl &url);
0057 
0058     Q_INVOKABLE void applyPlasmaTheme(QQuickItem *item, const QString &themeName);
0059 
0060     Q_INVOKABLE void editTheme(const QString &themeName);
0061 
0062 Q_SIGNALS:
0063     void downloadingFileChanged();
0064 
0065     void showSuccessMessage(const QString &message);
0066     void showErrorMessage(const QString &message);
0067 
0068 public Q_SLOTS:
0069     void load() override;
0070     void save() override;
0071     void defaults() override;
0072 
0073 private:
0074     bool isSaveNeeded() const override;
0075 
0076     void processPendingDeletions();
0077 
0078     void installTheme(const QString &path);
0079 
0080     DesktopThemeData *m_data;
0081 
0082     ThemesModel *m_model;
0083     FilterProxyModel *m_filteredModel;
0084     QHash<QString, Plasma::Theme *> m_themes;
0085     bool m_haveThemeExplorerInstalled;
0086 
0087     std::unique_ptr<QTemporaryFile> m_tempInstallFile;
0088     QPointer<KIO::FileCopyJob> m_tempCopyJob;
0089 };
0090 
0091 Q_DECLARE_LOGGING_CATEGORY(KCM_DESKTOP_THEME)