1 | /* |
2 | This file is part of the KDE project |
3 | SPDX-FileCopyrightText: 2013 Martin Gräßlin <mgraesslin@kde.org> |
4 | |
5 | SPDX-License-Identifier: LGPL-2.0-or-later |
6 | */ |
7 | |
8 | #ifndef KCOLORSCHEMEMANAGER_H |
9 | #define KCOLORSCHEMEMANAGER_H |
10 | |
11 | #include <kcolorscheme_export.h> |
12 | |
13 | #include <QObject> |
14 | #include <memory> |
15 | |
16 | class QAbstractItemModel; |
17 | class QGuiApplication; |
18 | class QModelIndex; |
19 | class QIcon; |
20 | |
21 | class ; |
22 | class KColorSchemeManagerPrivate; |
23 | |
24 | /*! |
25 | * \class KColorSchemeManager |
26 | * \inmodule KColorScheme |
27 | * |
28 | * \brief A small helper to get access to all available color schemes and activating a scheme in the |
29 | * QApplication. |
30 | * |
31 | * This is useful for applications which want to provide a selection of custom color |
32 | * schemes to their user. For example it is very common for photo and painting applications to use |
33 | * a dark color scheme even if the default is a light scheme. Since version 5.67 it also allows |
34 | * going back to following the system color scheme. |
35 | * |
36 | * The model() member function provides access to the KColorSchemeModel that the KColorSchemeManager uses |
37 | * which holds all the available color schemes. A possible usage looks like the following: |
38 | * |
39 | * \code |
40 | * KColorSchemeManager *schemes = new KColorSchemeManager(this); |
41 | * QListView *view = new QListView(this); |
42 | * view->setModel(schemes->model()); |
43 | * connect(view, &QListView::activated, schemes, &KColorSchemeManager::activateScheme); |
44 | * \endcode |
45 | * |
46 | * A convenience function that creates a KActionMenu that contains and activates color schemes exists |
47 | * in KColorSchemeMenu::createMenu |
48 | * |
49 | * By default KColorSchemeManager remembers the activated color scheme and restores it on the next |
50 | * start of the application. Use setAutosaveChanges() to change this behavior. |
51 | * |
52 | * \sa KColorSchemeMenu::createMenu, KColorSchemeModel |
53 | * |
54 | * \since 5.0 |
55 | */ |
56 | class KCOLORSCHEME_EXPORT KColorSchemeManager : public QObject |
57 | { |
58 | Q_OBJECT |
59 | public: |
60 | #if KCOLORSCHEME_ENABLE_DEPRECATED_SINCE(6, 6) |
61 | KCOLORSCHEME_DEPRECATED_VERSION(6, 6, "Use KColorSchemeManager::instance()" ) |
62 | explicit KColorSchemeManager(QObject *parent = nullptr); |
63 | #endif |
64 | |
65 | ~KColorSchemeManager() override; |
66 | |
67 | /*! |
68 | * A QAbstractItemModel of all available color schemes. |
69 | * |
70 | * The model provides the name of the scheme in Qt::DisplayRole, a preview |
71 | * in Qt::DelegateRole and the full path to the scheme file in Qt::UserRole. The system theme |
72 | * has an empty Qt::UserRole. |
73 | * |
74 | * Returns Model of all available color schemes. |
75 | * \sa KColorSchemeModel |
76 | */ |
77 | QAbstractItemModel *model() const; |
78 | |
79 | /*! |
80 | * Returns the model index for the scheme with the given \param id. If no such |
81 | * scheme exists an invalid index is returned. If you pass an empty string the index |
82 | * returned is equivalent to going back to following the system scheme. |
83 | * \sa model |
84 | * |
85 | * \since 6.6 |
86 | */ |
87 | QModelIndex indexForSchemeId(const QString &id) const; |
88 | |
89 | /*! |
90 | * Returns the model index for the scheme with the given \param name. If no such |
91 | * scheme exists an invalid index is returned. If you pass an empty |
92 | * string the index that is equivalent to going back to following the system scheme is returned |
93 | * for versions 5.67 and newer. |
94 | * \sa model |
95 | */ |
96 | QModelIndex indexForScheme(const QString &name) const; |
97 | |
98 | /*! |
99 | * Saves the color scheme to config file. The scheme is saved by default whenever it's changed. |
100 | * Use this method when autosaving is turned off, see setAutosaveChanges(). |
101 | * |
102 | * \since 5.89 |
103 | */ |
104 | void saveSchemeToConfigFile(const QString &schemeName) const; |
105 | /*! |
106 | * Sets color scheme autosaving. Default value is \c true. |
107 | * If this is set to \c false, the scheme is not going to be remembered when the |
108 | * application is restarted. |
109 | * |
110 | * \param autosaveChanges Enables/Disables autosaving of the color scheme. |
111 | * \since 5.89 |
112 | */ |
113 | void setAutosaveChanges(bool autosaveChanges); |
114 | |
115 | /*! |
116 | * Returns the id of the currently active scheme or an empty string if the default |
117 | * scheme is active. |
118 | * |
119 | * \since 5.107 |
120 | */ |
121 | QString activeSchemeId() const; |
122 | |
123 | /*! |
124 | * Returns the name of the currently active scheme or an empty string if the default |
125 | * scheme is active. |
126 | * |
127 | * \since 6.6 |
128 | */ |
129 | QString activeSchemeName() const; |
130 | |
131 | /*! |
132 | * Returns the manager for the current application instance. |
133 | * If no instance is existing, it will be constructed. |
134 | * Must be called after construction of the gui application instance. |
135 | * |
136 | * Returns color scheme manager for the current application instance |
137 | * |
138 | * \since 6.6 |
139 | */ |
140 | static KColorSchemeManager *instance(); |
141 | |
142 | public Q_SLOTS: |
143 | /*! |
144 | * \brief Activates the KColorScheme identified by the provided \param index. |
145 | * |
146 | * Installs the KColorScheme as the QApplication's QPalette. |
147 | * |
148 | * \param index The index for the KColorScheme to activate. |
149 | * The index must reference the QAbstractItemModel provided by model(). Since |
150 | * version 5.67 passing an invalid index activates the system scheme. |
151 | * \sa model() |
152 | */ |
153 | void activateScheme(const QModelIndex &index); |
154 | |
155 | private: |
156 | class KCOLORSCHEME_NO_EXPORT GuardApplicationConstructor |
157 | { |
158 | }; |
159 | KCOLORSCHEME_NO_EXPORT explicit KColorSchemeManager(GuardApplicationConstructor, QGuiApplication *app); |
160 | KCOLORSCHEME_NO_EXPORT void init(); |
161 | |
162 | std::unique_ptr<KColorSchemeManagerPrivate> const d; |
163 | }; |
164 | |
165 | #endif |
166 | |