diff --git a/ks_includes/config.py b/ks_includes/config.py index 14b9a8a3..2983a784 100644 --- a/ks_includes/config.py +++ b/ks_includes/config.py @@ -259,7 +259,7 @@ class KlipperScreenConfig: {"24htime": {"section": "main", "name": _("24 Hour Time"), "type": "binary", "value": "True"}}, {"side_macro_shortcut": { "section": "main", "name": _("Macro shortcut on sidebar"), "type": "binary", - "value": "True", "callback": screen.toggle_macro_shortcut}}, + "value": "True", "callback": screen.toggle_shortcut}}, {"font_size": { "section": "main", "name": _("Font Size"), "type": "dropdown", "value": "medium", "callback": screen.restart_ks, "options": [ diff --git a/panels/base_panel.py b/panels/base_panel.py index 01a45776..9af9bb53 100644 --- a/panels/base_panel.py +++ b/panels/base_panel.py @@ -21,10 +21,6 @@ class BasePanel(ScreenPanel): self.time_update = None self.titlebar_items = [] self.titlebar_name_type = None - self.buttons_showing = { - 'macros_shortcut': False, - 'printer_select': len(self._config.get_printers()) > 1, - } self.current_extruder = None # Action bar buttons abscale = self.bts * 1.1 @@ -32,19 +28,22 @@ class BasePanel(ScreenPanel): self.control['back'].connect("clicked", self.back) self.control['home'] = self._gtk.Button('main', scale=abscale) self.control['home'].connect("clicked", self._screen._menu_go_back, True) - - if len(self._config.get_printers()) > 1: - self.control['printer_select'] = self._gtk.Button('shuffle', scale=abscale) - self.control['printer_select'].connect("clicked", self._screen.show_printer_select) - - self.control['macros_shortcut'] = self._gtk.Button('custom-script', scale=abscale) - self.control['macros_shortcut'].connect("clicked", self.menu_item_clicked, { - "name": "Macros", - "panel": "gcode_macros" - }) - self.control['estop'] = self._gtk.Button('emergency', scale=abscale) self.control['estop'].connect("clicked", self.emergency_stop) + for control in self.control: + self.set_control_sensitive(False, control) + self.control['printer_select'] = self._gtk.Button('shuffle', scale=abscale) + self.control['printer_select'].connect("clicked", self._screen.show_printer_select) + self.control['printer_select'].set_no_show_all(True) + + self.shorcut = { + "name": "Macros", + "panel": "gcode_macros", + "icon": "custom-script", + } + self.control['shortcut'] = self._gtk.Button(self.shorcut['icon'], scale=abscale) + self.control['shortcut'].connect("clicked", self.menu_item_clicked, self.shorcut) + self.control['shortcut'].set_no_show_all(True) # Any action bar button should close the keyboard for item in self.control: @@ -62,13 +61,10 @@ class BasePanel(ScreenPanel): self.action_bar.set_size_request(self._gtk.action_bar_width, self._gtk.action_bar_height) self.action_bar.add(self.control['back']) self.action_bar.add(self.control['home']) - self.show_back(False) - self.show_home(False) - if self.buttons_showing['printer_select']: - self.action_bar.add(self.control['printer_select']) - self.show_macro_shortcut(self._config.get_main_config().getboolean('side_macro_shortcut', True)) + self.action_bar.add(self.control['printer_select']) + self.action_bar.add(self.control['shortcut']) self.action_bar.add(self.control['estop']) - self.show_estop(False) + self.show_printer_select(len(self._config.get_printers()) > 1) # Titlebar @@ -113,11 +109,12 @@ class BasePanel(ScreenPanel): try: for child in self.control['temp_box'].get_children(): self.control['temp_box'].remove(child) - if not show or self._printer.get_temp_store_devices() is None: + devices = (self._printer.get_tools() + self._printer.get_heaters()) + if not show or not devices: return img_size = self._gtk.img_scale * self.bts - for device in self._printer.get_temp_store_devices(): + for device in devices: self.labels[device] = Gtk.Label() self.labels[device].set_ellipsize(Pango.EllipsizeMode.START) @@ -142,7 +139,7 @@ class BasePanel(ScreenPanel): n += 1 # Options in the config have priority - for device in self._printer.get_temp_store_devices(): + for device in devices: # Users can fill the bar if they want if n >= nlimit + 1: break @@ -154,7 +151,7 @@ class BasePanel(ScreenPanel): break # If there is enough space fill with heater_generic - for device in self._printer.get_temp_store_devices(): + for device in self._printer.get_heaters(): if n >= nlimit: break if device.startswith("heater_generic"): @@ -189,6 +186,12 @@ class BasePanel(ScreenPanel): self.time_update = GLib.timeout_add_seconds(1, self.update_time) def add_content(self, panel): + show = 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_heaters(show) + self.set_control_sensitive(show, control='estop') + for control in ('back', 'home'): + self.set_control_sensitive(len(self._screen._cur_panels) > 1, control=control) self.current_panel = panel self.set_title(panel.title) self.content.add(panel.content) @@ -196,9 +199,7 @@ class BasePanel(ScreenPanel): def back(self, widget=None): if self.current_panel is None: return - self._screen.remove_keyboard() - if hasattr(self.current_panel, "back") \ and not self.current_panel.back() \ or not hasattr(self.current_panel, "back"): @@ -227,7 +228,7 @@ class BasePanel(ScreenPanel): if action != "notify_status_update" or self._screen.printer is None: return - devices = self._printer.get_temp_store_devices() + devices = (self._printer.get_tools() + self._printer.get_heaters()) if devices is not None: for device in devices: temp = self._printer.get_dev_stat(device, "temperature") @@ -255,37 +256,15 @@ class BasePanel(ScreenPanel): def remove(self, widget): self.content.remove(widget) - def show_back(self, show=True): - self.control['back'].set_sensitive(show) + def set_control_sensitive(self, value=True, control='shortcut'): + self.control[control].set_sensitive(value) - def show_home(self, show=True): - self.control['home'].set_sensitive(show) - - def show_macro_shortcut(self, show=True): - if show is True and self.buttons_showing['macros_shortcut'] is False: - self.action_bar.add(self.control['macros_shortcut']) - if self.buttons_showing['printer_select'] is False: - self.action_bar.reorder_child(self.control['macros_shortcut'], 2) - else: - self.action_bar.reorder_child(self.control['macros_shortcut'], 3) - self.control['macros_shortcut'].show() - self.buttons_showing['macros_shortcut'] = True - elif show is False and self.buttons_showing['macros_shortcut'] is True: - self.action_bar.remove(self.control['macros_shortcut']) - self.buttons_showing['macros_shortcut'] = False - - def toggle_macro_shorcut_sensitive(self, value=True): - self.control['macros_shortcut'].set_sensitive(value) + def show_shortcut(self, show=True): + self.control['shortcut'].set_visible(show) + self.set_control_sensitive(self._screen._cur_panels[-1] != self.shorcut['panel']) def show_printer_select(self, show=True): - if show and self.buttons_showing['printer_select'] is False: - self.action_bar.add(self.control['printer_select']) - self.action_bar.reorder_child(self.control['printer_select'], 2) - self.buttons_showing['printer_select'] = True - self.control['printer_select'].show() - elif show is False and self.buttons_showing['printer_select']: - self.action_bar.remove(self.control['printer_select']) - self.buttons_showing['printer_select'] = False + self.control['printer_select'].set_visible(show) def set_title(self, title): if not title: @@ -313,12 +292,6 @@ class BasePanel(ScreenPanel): self.time_format = confopt return True - def show_estop(self, show=True): - if show: - self.control['estop'].set_sensitive(True) - return - self.control['estop'].set_sensitive(False) - def set_ks_printer_cfg(self, printer): ScreenPanel.ks_printer_cfg = self._config.get_printer_config(printer) if self.ks_printer_cfg is not None: diff --git a/panels/gcode_macros.py b/panels/gcode_macros.py index 982611ab..52465751 100644 --- a/panels/gcode_macros.py +++ b/panels/gcode_macros.py @@ -47,10 +47,6 @@ class Panel(ScreenPanel): while len(self.menu) > 1: self.unload_menu() self.reload_macros() - self._screen.base_panel.toggle_macro_shorcut_sensitive(False) - - def deactivate(self): - self._screen.base_panel.toggle_macro_shorcut_sensitive(True) def add_gcode_macro(self, macro): # Support for hiding macros by name diff --git a/panels/job_status.py b/panels/job_status.py index 925573b9..d93550a1 100644 --- a/panels/job_status.py +++ b/panels/job_status.py @@ -349,7 +349,6 @@ class Panel(ScreenPanel): def activate(self): if self.flow_timeout is None: self.flow_timeout = GLib.timeout_add_seconds(2, self.update_flow) - self._screen.base_panel_show_all() def deactivate(self): if self.flow_timeout is not None: diff --git a/panels/main_menu.py b/panels/main_menu.py index f0360e24..067dfa1a 100644 --- a/panels/main_menu.py +++ b/panels/main_menu.py @@ -82,7 +82,6 @@ class Panel(MenuPanel): def activate(self): self.update_graph_visibility() - self._screen.base_panel_show_all() def deactivate(self): if self.graph_update is not None: @@ -265,7 +264,7 @@ class Panel(MenuPanel): self.main_menu.attach(self.labels['menu'], 1, 0, 1, 1) self.main_menu.show_all() self.numpad_visible = False - self._screen.base_panel.show_back(False) + self._screen.base_panel.set_control_sensitive(False, control='back') def process_update(self, action, data): if action != "notify_status_update": @@ -301,7 +300,7 @@ class Panel(MenuPanel): self.main_menu.attach(self.labels["keypad"], 1, 0, 1, 1) self.main_menu.show_all() self.numpad_visible = True - self._screen.base_panel.show_back(True) + self._screen.base_panel.set_control_sensitive(True, control='back') def update_graph(self): self.labels['da'].queue_draw() diff --git a/panels/splash_screen.py b/panels/splash_screen.py index 32016a24..65b88b96 100644 --- a/panels/splash_screen.py +++ b/panels/splash_screen.py @@ -91,9 +91,6 @@ class Panel(ScreenPanel): def activate(self): self.check_power_status() - self._screen.base_panel.show_macro_shortcut(False) - self._screen.base_panel.show_heaters(False) - self._screen.base_panel.show_estop(False) def check_power_status(self): if 'power' in self.labels: diff --git a/screen.py b/screen.py index c3856dcc..7c65fb14 100755 --- a/screen.py +++ b/screen.py @@ -299,8 +299,6 @@ class KlipperScreen(Gtk.Window): def attach_panel(self, panel): self.base_panel.add_content(self.panels[panel]) logging.debug(f"Current panel hierarchy: {' > '.join(self._cur_panels)}") - self.base_panel.show_back(len(self._cur_panels) > 1) - self.base_panel.show_home(len(self._cur_panels) > 1) if hasattr(self.panels[panel], "process_update"): self.process_update("notify_status_update", self.printer.data) self.process_update("notify_busy", self.printer.busy) @@ -656,7 +654,6 @@ class KlipperScreen(Gtk.Window): def state_printing(self): self.close_screensaver() - self.base_panel_show_all() for dialog in self.dialogs: self.gtk.remove_dialog(dialog) self.show_panel("job_status", _("Printing"), remove_all=True) @@ -670,7 +667,6 @@ class KlipperScreen(Gtk.Window): self.printer.state = "not ready" return self.show_panel("main_menu", None, remove_all=True, items=self._config.get_menu_items("__main")) - self.base_panel_show_all() def state_startup(self): self.printer_initializing(_("Klipper is attempting to start")) @@ -681,8 +677,8 @@ 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_macro_shortcut(self, value): - self.base_panel.show_macro_shortcut(value) + def toggle_shortcut(self, value): + self.base_panel.show_shortcut(value) def change_language(self, widget, lang): self._config.install_language(lang) @@ -915,11 +911,6 @@ class KlipperScreen(Gtk.Window): except KeyError: logging.error("Couldn't get the temperature store size") - def base_panel_show_all(self): - self.base_panel.show_macro_shortcut(self._config.get_main_config().getboolean('side_macro_shortcut', True)) - self.base_panel.show_heaters(True) - self.base_panel.show_estop(True) - def show_keyboard(self, entry=None, event=None): if self.keyboard is not None: return