11from collections .abc import Callable
22from typing import Literal
33
4+ import structlog
45from PySide6 .QtCore import QSettings , Qt
56from PySide6 .QtGui import QColor , QPalette
67from PySide6 .QtWidgets import QApplication
78
8- from . qt_logger import logger
9+ logger = structlog . get_logger ( "theme" )
910
1011theme_update_hooks : list [Callable [[], None ]] = []
1112"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
5253 for role in list (QPalette .ColorRole )[:- 1 ]: # remove last color role (NColorRoles)
5354 for group in color_groups :
5455 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 ):
5657 pal .setColor (group , role , QColor (value ))
5758
5859 return pal
@@ -95,6 +96,8 @@ def _save_palette_to_file(file_path: str, palette: QPalette) -> None:
9596 theme .setValue (group .name , palette .color (group , role ).name ())
9697 theme .endGroup ()
9798
99+ theme .sync ()
100+
98101
99102def update_palette () -> None :
100103 """Update the application palette based on the settings.
@@ -116,33 +119,33 @@ def update_palette() -> None:
116119 settings : QSettings = driver .settings
117120
118121 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
120123 dark_theme_file : str | None = settings .value ("DarkThemeFile" , None ) # type: ignore
121124 light_theme_file : str | None = settings .value ("LightThemeFile" , None ) # type: ignore
122125 settings .endGroup ()
123126 # endregion
124127
125128 # TODO: get values of following from settings.
126129 # 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."
128131 # dark_theme_file: str | None
129132 # "Path to the dark theme file."
130133 # light_theme_file: str | None
131134 # "Path to the light theme file."
132135
133136 dark_mode : bool | Literal [- 1 ]
134- true_values = ("1" , "yes" , "true" , "on" )
135- false_values = ("0" , "no" , "false" , "off" )
136137
137- if dark_mode_value .lower () in true_values :
138+ if dark_mode_value .lower () == "true" :
138139 dark_mode = True
139- elif dark_mode_value .lower () in false_values :
140+ elif dark_mode_value .lower () == "false" :
140141 dark_mode = False
141- elif dark_mode_value == "-1 " :
142+ elif dark_mode_value == "auto " :
142143 dark_mode = - 1
143144 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+ )
146149 dark_mode = - 1
147150
148151 if dark_mode == - 1 :
0 commit comments