From e1ea41f147be2a356d5777e65cce37337cd51555 Mon Sep 17 00:00:00 2001 From: alfrix Date: Tue, 15 Nov 2022 21:23:24 -0300 Subject: [PATCH] screen: refactor panel removal --- screen.py | 56 +++++++++++++++++++++---------------------------------- 1 file changed, 21 insertions(+), 35 deletions(-) diff --git a/screen.py b/screen.py index 9ec69a8d..f28d6c44 100644 --- a/screen.py +++ b/screen.py @@ -304,30 +304,26 @@ class KlipperScreen(Gtk.Window): raise Exception(msg) from e def show_panel(self, panel_name, panel_type, title, remove=None, pop=True, **kwargs): - if panel_name not in self.panels: - try: - self.panels[panel_name] = self._load_panel(panel_type, self, title) - self.panels[panel_name].initialize(panel_name, **kwargs) - except Exception as e: - if panel_name in self.panels: - del self.panels[panel_name] - logging.exception(f"Unable to load panel {panel_type}") - self.show_error_modal(f"Unable to load panel {panel_type}", f"{e}") - return - - if hasattr(self.panels[panel_name], "process_update"): - self.panels[panel_name].process_update("notify_status_update", self.printer.get_data()) - try: if remove == 2: self._remove_all_panels() elif remove == 1: self._remove_current_panel(pop) + if panel_name not in self.panels: + try: + self.panels[panel_name] = self._load_panel(panel_type, self, title) + self.panels[panel_name].initialize(panel_name, **kwargs) + except Exception as e: + if panel_name in self.panels: + del self.panels[panel_name] + logging.exception(f"Unable to load panel {panel_type}") + self.show_error_modal(f"Unable to load panel {panel_type}", f"{e}") + return + logging.debug(f"Attaching panel {panel_name}") self.base_panel.add_content(self.panels[panel_name]) - logging.debug(f"Showing back. count: {len(self._cur_panels)}") self.base_panel.show_back(len(self._cur_panels) > 0) self.show_all() @@ -341,7 +337,7 @@ class KlipperScreen(Gtk.Window): logging.exception(f"Error attaching panel:\n{e}") self._cur_panels.append(panel_name) - logging.debug(f"Current panel hierarchy: {self._cur_panels}") + logging.debug(f"Current panel hierarchy: {' > '.join(self._cur_panels)}") def show_popup_message(self, message, level=3): self.close_screensaver() @@ -538,9 +534,15 @@ class KlipperScreen(Gtk.Window): "menu", disname, 1, False, display_name=disname, items=menuitems) def _remove_all_panels(self): - while len(self._cur_panels) > 0: - self._remove_current_panel() - self.show_all() + self.subscriptions = [] + self._cur_panels = [] + for _ in self.base_panel.content.get_children(): + self.base_panel.content.remove(_) + for panel in list(self.panels): + if panel not in ["printer_select", "splash_screen"]: + del self.panels[panel] + for dialog in self.dialogs: + dialog.destroy() def _remove_current_panel(self, pop=True): if len(self._cur_panels) <= 0: @@ -712,12 +714,6 @@ class KlipperScreen(Gtk.Window): logging.debug("### Going to disconnected") self.close_screensaver() self.printer_initializing(_("Klipper has disconnected")) - self.subscriptions = [] - for panel in list(self.panels): - if panel not in ["printer_select", "splash_screen"]: - del self.panels[panel] - for dialog in self.dialogs: - dialog.destroy() self.init_printer() def state_error(self): @@ -735,12 +731,6 @@ class KlipperScreen(Gtk.Window): self.printer_initializing("" + _("Klipper has encountered an error.") + "" + "\n\n" + msg) - for panel in list(self.panels): - if panel not in ["printer_select", "splash_screen"]: - del self.panels[panel] - for dialog in self.dialogs: - dialog.destroy() - def state_paused(self): if "job_status" not in self._cur_panels: self.printer_printing() @@ -780,10 +770,6 @@ class KlipperScreen(Gtk.Window): def reload_panels(self, *args): self._remove_all_panels() - for panel in list(self.panels): - del self.panels[panel] - for dialog in self.dialogs: - dialog.destroy() self.printer.change_state(self.printer.state) def _websocket_callback(self, action, data):