screen: theme doesn't need a restart anymore

This commit is contained in:
Alfredo Monclus 2024-06-02 18:03:05 -03:00
parent a37cb967a1
commit 5abfb6f226
3 changed files with 24 additions and 3 deletions

View File

@ -161,6 +161,7 @@ class KlippyGtk:
if label is not None: if label is not None:
b.set_label(label.replace("\n", " ")) b.set_label(label.replace("\n", " "))
if image_name is not None: if image_name is not None:
b.set_name(image_name)
if scale is None: if scale is None:
scale = self.button_image_scale scale = self.button_image_scale
if label is None: if label is None:

View File

@ -12,7 +12,7 @@ from ks_includes.screen_panel import ScreenPanel
class BasePanel(ScreenPanel): class BasePanel(ScreenPanel):
def __init__(self, screen, title): def __init__(self, screen, title=None):
super().__init__(screen, title) super().__init__(screen, title)
self.current_panel = None self.current_panel = None
self.time_min = -1 self.time_min = -1
@ -111,6 +111,16 @@ class BasePanel(ScreenPanel):
self.update_time() self.update_time()
def reload_icons(self):
button: Gtk.Button
for button in self.action_bar.get_children():
img = button.get_image()
name = button.get_name()
pixbuf = img.get_pixbuf()
width = pixbuf.get_width()
height = pixbuf.get_height()
button.set_image(self._gtk.Image(name, width, height))
def show_heaters(self, show=True): def show_heaters(self, show=True):
try: try:
for child in self.control['temp_box'].get_children(): for child in self.control['temp_box'].get_children():

View File

@ -139,9 +139,9 @@ class KlipperScreen(Gtk.Window):
self.gtk = KlippyGtk(self) self.gtk = KlippyGtk(self)
self.base_css = "" self.base_css = ""
self.load_base_styles() self.load_base_styles()
self.change_theme(self.theme)
self.set_icon_from_file(os.path.join(klipperscreendir, "styles", "icon.svg")) self.set_icon_from_file(os.path.join(klipperscreendir, "styles", "icon.svg"))
self.base_panel = BasePanel(self, title="Base Panel") self.base_panel = BasePanel(self)
self.change_theme(self.theme)
self.add(self.base_panel.main_grid) self.add(self.base_panel.main_grid)
self.show_all() self.show_all()
min_ver = (3, 8) min_ver = (3, 8)
@ -329,6 +329,10 @@ class KlipperScreen(Gtk.Window):
logging.exception(f"Error attaching panel:\n{e}\n\n{traceback.format_exc()}") logging.exception(f"Error attaching panel:\n{e}\n\n{traceback.format_exc()}")
def attach_panel(self, panel): def attach_panel(self, panel):
if panel in self.panels_reinit:
# this happens when the first panel needs a reinit
self.reload_panels()
return
self.base_panel.add_content(self.panels[panel]) self.base_panel.add_content(self.panels[panel])
logging.debug(f"Current panel hierarchy: {' > '.join(self._cur_panels)}") logging.debug(f"Current panel hierarchy: {' > '.join(self._cur_panels)}")
while len(self.panels[panel].menu) > 1: while len(self.panels[panel].menu) > 1:
@ -501,6 +505,7 @@ class KlipperScreen(Gtk.Window):
screen = Gdk.Screen.get_default() screen = Gdk.Screen.get_default()
if self.style_provider: if self.style_provider:
Gtk.StyleContext.remove_provider_for_screen(screen, self.style_provider) Gtk.StyleContext.remove_provider_for_screen(screen, self.style_provider)
self.style_provider = Gtk.CssProvider()
self.style_provider.load_from_data(css_data.encode()) self.style_provider.load_from_data(css_data.encode())
Gtk.StyleContext.add_provider_for_screen( Gtk.StyleContext.add_provider_for_screen(
screen, screen,
@ -516,6 +521,11 @@ class KlipperScreen(Gtk.Window):
self.style_options.update(theme_options) self.style_options.update(theme_options)
self.gtk.color_list = self.style_options['graph_colors'] self.gtk.color_list = self.style_options['graph_colors']
self.update_style_provider(theme_css) self.update_style_provider(theme_css)
self.reload_icon_theme()
def reload_icon_theme(self):
self.panels_reinit = list(self.panels)
self.base_panel.reload_icons()
def _go_to_submenu(self, widget, name): def _go_to_submenu(self, widget, name):
logging.info(f"#### Go to submenu {name}") logging.info(f"#### Go to submenu {name}")