From e01b6e5f2646f9edd624be6ff2d9593081115929 Mon Sep 17 00:00:00 2001 From: alfrix Date: Thu, 31 Aug 2023 22:01:14 -0300 Subject: [PATCH] macros: hide the panel if there are no elegible macros --- ks_includes/printer.py | 10 +++++++++- panels/base_panel.py | 7 ++++++- panels/extrude.py | 2 +- panels/gcode_macros.py | 5 ----- screen.py | 11 +++++++++-- 5 files changed, 25 insertions(+), 10 deletions(-) diff --git a/ks_includes/printer.py b/ks_includes/printer.py index 605f40af..90d8d179 100644 --- a/ks_includes/printer.py +++ b/ks_includes/printer.py @@ -201,7 +201,15 @@ class Printer: return output_pins def get_gcode_macros(self): - return self.get_config_section_list("gcode_macro ") + macros = [] + for macro in self.get_config_section_list("gcode_macro "): + macro = macro[12:].strip() + if macro.startswith("_") or macro.upper() in ('LOAD_FILAMENT', 'UNLOAD_FILAMENT'): + continue + if self.get_macro(macro) and "rename_existing" in self.get_macro(macro): + continue + macros.append(macro) + return macros def get_heaters(self): heaters = [] diff --git a/panels/base_panel.py b/panels/base_panel.py index 601d9459..e97294b5 100644 --- a/panels/base_panel.py +++ b/panels/base_panel.py @@ -185,7 +185,7 @@ class BasePanel(ScreenPanel): def add_content(self, panel): show = self._printer is not None and self._printer.state not in ('disconnected', 'startup', 'shutdown', 'error') - self.show_shortcut(show and self._config.get_main_config().getboolean('side_macro_shortcut', True)) + self.show_shortcut(show) self.show_heaters(show) self.set_control_sensitive(show, control='estop') for control in ('back', 'home'): @@ -258,6 +258,11 @@ class BasePanel(ScreenPanel): self.control[control].set_sensitive(value) def show_shortcut(self, show=True): + show = ( + show + and self._config.get_main_config().getboolean('side_macro_shortcut', True) + and self._printer.get_printer_status_data()["printer"]["gcode_macros"]["count"] > 0 + ) self.control['shortcut'].set_visible(show) self.set_control_sensitive(self._screen._cur_panels[-1] != self.shorcut['panel']) diff --git a/panels/extrude.py b/panels/extrude.py index 501c13ef..4badd530 100644 --- a/panels/extrude.py +++ b/panels/extrude.py @@ -13,7 +13,7 @@ class Panel(ScreenPanel): def __init__(self, screen, title): super().__init__(screen, title) self.current_extruder = self._printer.get_stat("toolhead", "extruder") - macros = self._printer.get_gcode_macros() + macros = self._printer.get_config_section_list("gcode_macro ") self.load_filament = any("LOAD_FILAMENT" in macro.upper() for macro in macros) self.unload_filament = any("UNLOAD_FILAMENT" in macro.upper() for macro in macros) diff --git a/panels/gcode_macros.py b/panels/gcode_macros.py index f37a6708..5f7c7b7f 100644 --- a/panels/gcode_macros.py +++ b/panels/gcode_macros.py @@ -130,11 +130,6 @@ class Panel(ScreenPanel): def load_gcode_macros(self): for macro in self._printer.get_gcode_macros(): - macro = macro[12:].strip() - # Support for hiding macros by _ - if macro.startswith("_") or macro.upper() in ('LOAD_FILAMENT', 'UNLOAD_FILAMENT'): - logging.info(f"Skipping macro {macro}") - continue self.options[macro] = { "name": macro, "section": f"displayed_macros {self._screen.connected_printer}", diff --git a/screen.py b/screen.py index f59ac89c..ebf3b643 100755 --- a/screen.py +++ b/screen.py @@ -685,8 +685,15 @@ class KlipperScreen(Gtk.Window): msg = msg if "ready" not in msg else "" self.printer_initializing(_("Klipper has shutdown") + "\n\n" + msg, remove=True) - def toggle_shortcut(self, value): - self.base_panel.show_shortcut(value) + def toggle_shortcut(self, show): + if show and not self.printer.get_printer_status_data()["printer"]["gcode_macros"]["count"] > 0: + self.show_popup_message( + _("No elegible macros:") + "\n" + + _("macros with a name starting with '_' are hidden") + "\n" + + _("macros that use 'rename_existing' are hidden") + "\n" + + _("LOAD_FILAMENT/UNLOAD_FILAMENT are hidden and shold be used from extrude") + "\n" + ) + self.base_panel.show_shortcut(show) def change_language(self, widget, lang): self._config.install_language(lang)