File indexing completed on 2024-05-12 05:13:33

0001 /*
0002   SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org>
0003 
0004   SPDX-License-Identifier: LGPL-2.1-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include "grantleetheme.h"
0010 #include "grantleetheme_export.h"
0011 #include <QMap>
0012 #include <QObject>
0013 
0014 #include <memory>
0015 
0016 class QActionGroup;
0017 class KActionCollection;
0018 class KToggleAction;
0019 class KActionMenu;
0020 
0021 namespace GrantleeTheme
0022 {
0023 class ThemeManagerPrivate;
0024 
0025 /**
0026  * @brief The ThemeManager class
0027  * @author Laurent montel <montel@kde.org>
0028  */
0029 class GRANTLEETHEME_EXPORT ThemeManager : public QObject
0030 {
0031     Q_OBJECT
0032 public:
0033     explicit ThemeManager(const QString &themeType,
0034                           const QString &defaultDesktopFileName,
0035                           KActionCollection *actionCollection = nullptr,
0036                           const QString &path = QString(),
0037                           const QString &configFileName = QString(),
0038                           QObject *parent = nullptr);
0039     ~ThemeManager() override;
0040 
0041     [[nodiscard]] QMap<QString, GrantleeTheme::Theme> themes() const;
0042 
0043     void setActionGroup(QActionGroup *actionGroup);
0044 
0045     [[nodiscard]] KToggleAction *actionForTheme();
0046 
0047     void setThemeMenu(KActionMenu *menu);
0048 
0049     [[nodiscard]] QStringList displayExtraVariables(const QString &themename) const;
0050 
0051     [[nodiscard]] GrantleeTheme::Theme theme(const QString &themeName);
0052 
0053     [[nodiscard]] QString configuredThemeName() const;
0054     [[nodiscard]] static QString configuredThemeName(const QString &themeType);
0055 
0056     [[nodiscard]] static QString pathFromThemes(const QString &path, const QString &themeName, const QString &defaultDesktopFilename);
0057     [[nodiscard]] static GrantleeTheme::Theme loadTheme(const QString &themePath, const QString &dirName, const QString &defaultDesktopFilename);
0058 
0059 Q_SIGNALS:
0060     void themesChanged();
0061     void grantleeThemeSelected();
0062     void updateThemes();
0063 
0064 private:
0065     friend class ThemeManagerPrivate;
0066     std::unique_ptr<ThemeManagerPrivate> const d;
0067     Q_PRIVATE_SLOT(d, void directoryChanged())
0068 };
0069 }