2021-12-26 23:18:28 +08:00
|
|
|
/*
|
|
|
|
* Copyright (C) 2020-2022 Roy Qu (royqh1979@gmail.com)
|
|
|
|
*
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
*/
|
2021-10-15 13:49:28 +08:00
|
|
|
#ifndef THEMEMANAGER_H
|
|
|
|
#define THEMEMANAGER_H
|
2021-10-18 22:06:33 +08:00
|
|
|
#include <QPalette>
|
|
|
|
#include <QHash>
|
|
|
|
#include <QColor>
|
2022-01-04 16:50:54 +08:00
|
|
|
#include <memory>
|
2024-01-18 17:15:37 +08:00
|
|
|
#include <QObject>
|
2021-10-18 22:06:33 +08:00
|
|
|
|
2024-01-18 17:15:37 +08:00
|
|
|
class AppTheme : public QObject{
|
2021-10-18 22:06:33 +08:00
|
|
|
Q_OBJECT
|
|
|
|
public:
|
|
|
|
enum ColorRole {
|
|
|
|
/* Color for QPalette */
|
|
|
|
|
|
|
|
PaletteWindow,
|
|
|
|
PaletteWindowText,
|
|
|
|
PaletteBase,
|
|
|
|
PaletteAlternateBase,
|
|
|
|
PaletteToolTipBase,
|
|
|
|
PaletteToolTipText,
|
|
|
|
PaletteText,
|
|
|
|
PaletteButton,
|
|
|
|
PaletteButtonText,
|
|
|
|
PaletteBrightText,
|
|
|
|
PaletteHighlight,
|
|
|
|
PaletteHighlightedText,
|
|
|
|
PaletteLink,
|
|
|
|
PaletteLinkVisited,
|
|
|
|
|
|
|
|
PaletteLight,
|
|
|
|
PaletteMidlight,
|
|
|
|
PaletteDark,
|
|
|
|
PaletteMid,
|
|
|
|
PaletteShadow,
|
|
|
|
|
|
|
|
PaletteWindowDisabled,
|
|
|
|
PaletteWindowTextDisabled,
|
|
|
|
PaletteBaseDisabled,
|
|
|
|
PaletteAlternateBaseDisabled,
|
|
|
|
PaletteToolTipBaseDisabled,
|
|
|
|
PaletteToolTipTextDisabled,
|
|
|
|
PaletteTextDisabled,
|
|
|
|
PaletteButtonDisabled,
|
|
|
|
PaletteButtonTextDisabled,
|
|
|
|
PaletteBrightTextDisabled,
|
|
|
|
PaletteHighlightDisabled,
|
|
|
|
PaletteHighlightedTextDisabled,
|
|
|
|
PaletteLinkDisabled,
|
|
|
|
PaletteLinkVisitedDisabled,
|
|
|
|
|
|
|
|
PaletteLightDisabled,
|
|
|
|
PaletteMidlightDisabled,
|
|
|
|
PaletteDarkDisabled,
|
|
|
|
PaletteMidDisabled,
|
|
|
|
PaletteShadowDisabled
|
|
|
|
};
|
|
|
|
|
|
|
|
Q_ENUM(ColorRole)
|
|
|
|
|
2023-12-22 18:03:29 +08:00
|
|
|
enum class ThemeType {
|
|
|
|
JSON,
|
2024-03-28 20:23:50 +08:00
|
|
|
#ifdef ENABLE_LUA_ADDON
|
2023-12-22 18:03:29 +08:00
|
|
|
Lua,
|
2024-03-28 20:23:50 +08:00
|
|
|
#endif
|
2023-12-22 18:03:29 +08:00
|
|
|
};
|
|
|
|
|
2024-01-18 17:15:37 +08:00
|
|
|
AppTheme(const QString& filename, ThemeType type, QObject* parent=nullptr);
|
|
|
|
|
2021-10-18 22:06:33 +08:00
|
|
|
QColor color(ColorRole role) const;
|
|
|
|
QPalette palette() const;
|
|
|
|
|
2023-12-22 18:03:29 +08:00
|
|
|
const QString &style() const;
|
2021-10-18 22:06:33 +08:00
|
|
|
|
2021-11-07 22:34:19 +08:00
|
|
|
const QString &defaultColorScheme() const;
|
|
|
|
void setDefaultColorScheme(const QString &newDefaultColorScheme);
|
|
|
|
|
2022-01-28 20:05:55 +08:00
|
|
|
const QString &displayName() const;
|
|
|
|
|
|
|
|
const QString &name() const;
|
|
|
|
|
2022-02-01 21:39:31 +08:00
|
|
|
const QString &defaultIconSet() const;
|
|
|
|
void setDefaultIconSet(const QString &newDefaultIconSet);
|
|
|
|
|
2023-12-22 18:03:29 +08:00
|
|
|
static bool isSystemInDarkMode();
|
|
|
|
static QString initialStyle();
|
|
|
|
|
2024-01-18 17:15:37 +08:00
|
|
|
const QString& filename() const;
|
|
|
|
|
2021-10-18 22:06:33 +08:00
|
|
|
private:
|
|
|
|
static QPalette initialPalette();
|
|
|
|
private:
|
|
|
|
QHash<int,QColor> mColors;
|
|
|
|
QString mName;
|
2022-01-28 20:05:55 +08:00
|
|
|
QString mDisplayName;
|
2023-12-22 18:03:29 +08:00
|
|
|
QString mStyle;
|
2021-11-07 22:34:19 +08:00
|
|
|
QString mDefaultColorScheme;
|
2022-02-01 21:39:31 +08:00
|
|
|
QString mDefaultIconSet;
|
2024-01-18 17:15:37 +08:00
|
|
|
QString mFilename;
|
2021-10-18 22:06:33 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
using PAppTheme = std::shared_ptr<AppTheme>;
|
2021-10-15 13:49:28 +08:00
|
|
|
|
|
|
|
class ThemeManager : public QObject
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
public:
|
|
|
|
explicit ThemeManager(QObject *parent = nullptr);
|
2021-10-18 22:06:33 +08:00
|
|
|
PAppTheme theme(const QString& themeName);
|
2022-01-28 16:13:20 +08:00
|
|
|
bool useCustomTheme() const;
|
|
|
|
void setUseCustomTheme(bool newUseCustomTheme);
|
|
|
|
void prepareCustomeTheme();
|
2022-01-28 20:05:55 +08:00
|
|
|
QList<PAppTheme> getThemes();
|
2022-01-28 16:13:20 +08:00
|
|
|
|
|
|
|
private:
|
|
|
|
bool mUseCustomTheme;
|
2021-10-15 13:49:28 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif // THEMEMANAGER_H
|