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