Open-Typer
Open source typewriting tutor program
Loading...
Searching...
No Matches
ThemeEngine.h
1/*
2 * ThemeEngine.h
3 * This file is part of Open-Typer
4 *
5 * Copyright (C) 2022-2023 - adazem009
6 * Copyright (C) 2022 - Roker2
7 *
8 * Open-Typer is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * Open-Typer is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with Open-Typer. If not, see <http://www.gnu.org/licenses/>.
20 */
21
22#ifndef THEMEENGINE_H
23#define THEMEENGINE_H
24
25#include <QObject>
26#include <QFont>
27#include <QFontDatabase>
28#include <QColor>
29#include <QFile>
30#include "global/ISettings.h"
31#include "../IThemeEngine.h"
32
34class Q_DECL_EXPORT ThemeEngine : public IThemeEngine
35{
36 Q_OBJECT
37 INJECT(ISettings, settings)
38 Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged)
39 Q_PROPERTY(QString fontFamily READ fontFamily WRITE setFontFamily NOTIFY fontFamilyChanged)
40 Q_PROPERTY(int fontSize READ fontSize WRITE setFontSize NOTIFY fontSizeChanged)
41 Q_PROPERTY(QColor exerciseTextColor READ exerciseTextColor WRITE setExerciseTextColor NOTIFY exerciseTextColorChanged)
42 Q_PROPERTY(QColor inputTextColor READ inputTextColor WRITE setInputTextColor NOTIFY inputTextColorChanged)
43 Q_PROPERTY(QColor bgColor READ bgColor WRITE setBgColor NOTIFY bgColorChanged)
44 Q_PROPERTY(QColor paperColor READ paperColor WRITE setPaperColor NOTIFY paperColorChanged)
45 Q_PROPERTY(QColor panelColor READ panelColor WRITE setPanelColor NOTIFY panelColorChanged)
46 Q_PROPERTY(AccentColor accentColor READ accentColor WRITE setAccentColor NOTIFY accentColorChanged)
47 Q_PROPERTY(QColor currentAccentColor READ currentAccentColor NOTIFY currentAccentColorChanged)
48 Q_PROPERTY(QColor borderColor READ borderColor NOTIFY borderColorChanged)
49 Q_PROPERTY(QColor foregroundColor READ foregroundColor NOTIFY foregroundColorChanged)
50 Q_PROPERTY(Theme theme READ theme WRITE setTheme NOTIFY themeChanged)
51 public:
53 static std::shared_ptr<ThemeEngine> instance();
54 void init();
55
56 // Font
57 QFont font(void) override;
58 void setFont(QFont newFont) override;
59 QString fontFamily(void) override;
60 void setFontFamily(QString family) override;
61 int fontSize(void) override;
62 void setFontSize(int size) override;
63 Q_INVOKABLE void increaseFontSize(int delta) override;
64 Q_INVOKABLE int maxFontSize(void) override;
65 // Exercise text color
66 Q_INVOKABLE bool customExerciseTextColor(void) override;
67 QColor exerciseTextColor(void) override;
68 void setExerciseTextColor(QColor color) override;
69 Q_INVOKABLE void resetExerciseTextColor(void) override;
70 Q_INVOKABLE QColor defaultExerciseTextColor(void) override;
71 Q_INVOKABLE QColor defaultExerciseTextColor(bool dark) override;
72 Q_INVOKABLE QColor defaultExerciseTextColor(QColor accent) override;
73 Q_INVOKABLE QColor defaultExerciseTextColor(QColor accent, bool dark) override;
74 // Input text color
75 Q_INVOKABLE bool customInputTextColor(void) override;
76 QColor inputTextColor(void) override;
77 void setInputTextColor(QColor color) override;
78 Q_INVOKABLE void resetInputTextColor(void) override;
79 Q_INVOKABLE QColor defaultInputTextColor(bool dark = false) override;
80 // Background color
81 Q_INVOKABLE bool customBgColor(void) override;
82 QColor bgColor(void) override;
83 void setBgColor(QColor color) override;
84 Q_INVOKABLE void resetBgColor(void) override;
85 Q_INVOKABLE QColor defaultBgColor(bool dark = false) override;
86 // Paper color
87 Q_INVOKABLE bool customPaperColor(void) override;
88 QColor paperColor(void) override;
89 void setPaperColor(QColor color) override;
90 Q_INVOKABLE void resetPaperColor(void) override;
91 Q_INVOKABLE QColor defaultPaperColor(bool dark = false) override;
92 // Panel color
93 Q_INVOKABLE bool customPanelColor(void) override;
94 QColor panelColor(void) override;
95 void setPanelColor(QColor color) override;
96 Q_INVOKABLE void resetPanelColor(void) override;
97 Q_INVOKABLE QColor defaultPanelColor(bool dark = false) override;
98 // Accent color
99 AccentColor accentColor(void) override;
100 void setAccentColor(AccentColor color) override;
101 Q_INVOKABLE QColor getAccentColor(AccentColor colorId) override;
102 QColor currentAccentColor(void) override;
103 // Theme
104 Theme theme(void) const override;
105 void setTheme(ThemeEngine::Theme newTheme) override;
106 Q_INVOKABLE void updateTheme(void) override;
107 Q_INVOKABLE void setDefaultTheme(void) override;
108 // Border color
109 QColor borderColor() const override;
110 // Foreground color
111 QColor foregroundColor() const override;
112
113 private:
114 static std::shared_ptr<ThemeEngine> m_instance;
115 void updateStyleSheet();
116 void applyStyleSheetFromFile(const QString &stylePath);
117};
118
119#endif // THEMEENGINE_H
Definition ISettings.h:31
Definition IThemeEngine.h:28
The ThemeEngine class provides theme functions.
Definition ThemeEngine.h:35