1
1
from collections .abc import Callable
2
2
from typing import Literal
3
3
4
+ import structlog
4
5
from PySide6 .QtCore import QSettings , Qt
5
6
from PySide6 .QtGui import QColor , QPalette
6
7
from PySide6 .QtWidgets import QApplication
7
8
8
- from . qt_logger import logger
9
+ logger = structlog . get_logger ( "theme" )
9
10
10
11
theme_update_hooks : list [Callable [[], None ]] = []
11
12
"List of callables that will be called when any theme is changed."
@@ -52,7 +53,7 @@ def _load_palette_from_file(file_path: str, default_palette: QPalette) -> QPalet
52
53
for role in list (QPalette .ColorRole )[:- 1 ]: # remove last color role (NColorRoles)
53
54
for group in color_groups :
54
55
value : str | None = theme .value (f"{ role .name } /{ group .name } " , None , str ) # type: ignore
55
- if value is not None and QColor .isValidColor (value ):
56
+ if value is not None and QColor .isValidColorName (value ):
56
57
pal .setColor (group , role , QColor (value ))
57
58
58
59
return pal
@@ -95,6 +96,8 @@ def _save_palette_to_file(file_path: str, palette: QPalette) -> None:
95
96
theme .setValue (group .name , palette .color (group , role ).name ())
96
97
theme .endGroup ()
97
98
99
+ theme .sync ()
100
+
98
101
99
102
def update_palette () -> None :
100
103
"""Update the application palette based on the settings.
@@ -116,33 +119,33 @@ def update_palette() -> None:
116
119
settings : QSettings = driver .settings
117
120
118
121
settings .beginGroup ("Appearance" )
119
- dark_mode_value : str = settings .value ("DarkMode" , "-1 " ) # type: ignore
122
+ dark_mode_value : str = settings .value ("DarkMode" , "auto " ) # type: ignore
120
123
dark_theme_file : str | None = settings .value ("DarkThemeFile" , None ) # type: ignore
121
124
light_theme_file : str | None = settings .value ("LightThemeFile" , None ) # type: ignore
122
125
settings .endGroup ()
123
126
# endregion
124
127
125
128
# TODO: get values of following from settings.
126
129
# dark_mode: bool | Literal[-1]
127
- # "True: Dark mode. False: Light mode. -1 : System mode."
130
+ # "True: Dark mode. False: Light mode. auto : System mode."
128
131
# dark_theme_file: str | None
129
132
# "Path to the dark theme file."
130
133
# light_theme_file: str | None
131
134
# "Path to the light theme file."
132
135
133
136
dark_mode : bool | Literal [- 1 ]
134
- true_values = ("1" , "yes" , "true" , "on" )
135
- false_values = ("0" , "no" , "false" , "off" )
136
137
137
- if dark_mode_value .lower () in true_values :
138
+ if dark_mode_value .lower () == "true" :
138
139
dark_mode = True
139
- elif dark_mode_value .lower () in false_values :
140
+ elif dark_mode_value .lower () == "false" :
140
141
dark_mode = False
141
- elif dark_mode_value == "-1 " :
142
+ elif dark_mode_value == "auto " :
142
143
dark_mode = - 1
143
144
else :
144
- logger .error (f"""Invalid value for DarkMode: { dark_mode_value } . Defaulting to -1.
145
- possible values: { true_values = } , { false_values = } , system=-1""" )
145
+ logger .warning (
146
+ f"Invalid value for DarkMode: { dark_mode_value } . Defaulting to auto."
147
+ + 'possible values: "true", "false", "auto".'
148
+ )
146
149
dark_mode = - 1
147
150
148
151
if dark_mode == - 1 :
0 commit comments