From 98da293ceeeb63b374c67e8518ecbaabbb21fcbd Mon Sep 17 00:00:00 2001 From: alfrix Date: Wed, 10 Jan 2024 13:33:49 -0300 Subject: [PATCH] refactor job_status and titlebar_items to allow multiple extruders --- ks_includes/printer.py | 15 +++--- panels/base_panel.py | 34 ++++++-------- panels/job_status.py | 101 ++++++++++++++++++++--------------------- screen.py | 6 +++ 4 files changed, 79 insertions(+), 77 deletions(-) diff --git a/ks_includes/printer.py b/ks_includes/printer.py index 03d6e6e9..41b65cbb 100644 --- a/ks_includes/printer.py +++ b/ks_includes/printer.py @@ -223,14 +223,17 @@ class Printer: return macros def get_heaters(self): - heaters = [] + heaters = self.get_config_section_list("heater_generic ") if "heater_bed" in self.devices: - heaters.append("heater_bed") - heaters.extend(iter(self.get_config_section_list("heater_generic "))) - heaters.extend(iter(self.get_config_section_list("temperature_sensor "))) - heaters.extend(iter(self.get_config_section_list("temperature_fan "))) + heaters.insert(0, "heater_bed") return heaters + def get_temp_fans(self): + return self.get_config_section_list("temperature_fan") + + def get_temp_sensors(self): + return self.get_config_section_list("temperature_sensor") + def get_filament_sensors(self): sensors = list(self.get_config_section_list("filament_switch_sensor ")) sensors.extend(iter(self.get_config_section_list("filament_motion_sensor "))) @@ -374,7 +377,7 @@ class Printer: for device in self.tools if not device.startswith('extruder_stepper') ] - return devices + self.get_heaters() + return devices + self.get_heaters() + self.get_temp_sensors() + self.get_temp_fans() def get_tools(self): return self.tools diff --git a/panels/base_panel.py b/panels/base_panel.py index f3d01c3f..49a155f8 100644 --- a/panels/base_panel.py +++ b/panels/base_panel.py @@ -111,7 +111,6 @@ class BasePanel(ScreenPanel): img_size = self._gtk.img_scale * self.bts for device in devices: self.labels[device] = Gtk.Label(ellipsize=Pango.EllipsizeMode.START) - self.labels[f'{device}_box'] = Gtk.Box() icon = self.get_icon(device, img_size) if icon is not None: @@ -120,18 +119,22 @@ class BasePanel(ScreenPanel): # Limit the number of items according to resolution nlimit = int(round(log(self._screen.width, 10) * 5 - 10.5)) - n = 0 - self.current_extruder = self._printer.get_stat("toolhead", "extruder") - if self.current_extruder and f"{self.current_extruder}_box" in self.labels: - self.control['temp_box'].add(self.labels[f"{self.current_extruder}_box"]) - n += 1 - + if len(self._printer.get_tools()) > (nlimit - 1): + self.current_extruder = self._printer.get_stat("toolhead", "extruder") + if self.current_extruder and f"{self.current_extruder}_box" in self.labels: + self.control['temp_box'].add(self.labels[f"{self.current_extruder}_box"]) + else: + self.current_extruder = False + for device in devices: + if n >= nlimit: + break + if device.startswith("extruder") and self.current_extruder is False: + self.control['temp_box'].add(self.labels[f"{device}_box"]) + elif device.startswith("heater"): + self.control['temp_box'].add(self.labels[f"{device}_box"]) + n += 1 for device in devices: - if device == 'heater_bed': - self.control['temp_box'].add(self.labels['heater_bed_box']) - n += 1 - continue # Users can fill the bar if they want if n >= nlimit + 1: break @@ -142,13 +145,6 @@ class BasePanel(ScreenPanel): n += 1 break - # If there is enough space fill with heater_generic - for device in self._printer.get_heaters(): - if n >= nlimit: - break - if device.startswith("heater_generic"): - self.control['temp_box'].add(self.labels[f"{device}_box"]) - n += 1 self.control['temp_box'].show_all() except Exception as e: logging.debug(f"Couldn't create heaters box: {e}") @@ -236,7 +232,7 @@ class BasePanel(ScreenPanel): self.labels[device].set_label(f"{name}{int(temp)}°") with suppress(Exception): - if data["toolhead"]["extruder"] != self.current_extruder: + if self.current_extruder is not False and data["toolhead"]["extruder"] != self.current_extruder: self.control['temp_box'].remove(self.labels[f"{self.current_extruder}_box"]) self.current_extruder = data["toolhead"]["extruder"] self.control['temp_box'].pack_start(self.labels[f"{self.current_extruder}_box"], True, True, 3) diff --git a/panels/job_status.py b/panels/job_status.py index 6d519f38..cf344f72 100644 --- a/panels/job_status.py +++ b/panels/job_status.py @@ -147,74 +147,71 @@ class Panel(ScreenPanel): buttons['fan'].connect("clicked", self.menu_item_clicked, {"panel": "fan", "name": _("Fan")}) self.buttons.update(buttons) + self.buttons['extruder'] = {} + for i, extruder in enumerate(self._printer.get_tools()): + self.labels[extruder] = Gtk.Label(label="-") + self.buttons['extruder'][extruder] = self._gtk.Button(f"extruder-{i}", "", None, self.bts, + Gtk.PositionType.LEFT, 1) + self.buttons['extruder'][extruder].set_label(self.labels[extruder].get_text()) + self.buttons['extruder'][extruder].connect("clicked", self.menu_item_clicked, + {"panel": "temperature", "name": _("Temperature"), + 'extra': extruder}) + self.buttons['extruder'][extruder].set_halign(Gtk.Align.START) + self.labels['temp_grid'] = Gtk.Grid() nlimit = 2 if self._screen.width <= 500 else 3 n = 0 - self.buttons['extruder'] = {} - self.current_extruder = self._printer.get_stat("toolhead", "extruder") - if self.current_extruder: - for i, extruder in enumerate(self._printer.get_tools()): - self.labels[extruder] = Gtk.Label(label="-") - self.buttons['extruder'][extruder] = self._gtk.Button(f"extruder-{i}", "", None, self.bts, - Gtk.PositionType.LEFT, 1) - self.buttons['extruder'][extruder].set_label(self.labels[extruder].get_text()) - self.buttons['extruder'][extruder].connect("clicked", self.menu_item_clicked, - {"panel": "temperature", "name": _("Temperature"), - 'extra': self.current_extruder}) - self.buttons['extruder'][extruder].set_halign(Gtk.Align.START) - self.labels['temp_grid'].attach(self.buttons['extruder'][self.current_extruder], n, 0, 1, 1) - n += 1 + if nlimit > 2 and len(self._printer.get_tools()) == 2: + for extruder in self.buttons['extruder']: + self.labels['temp_grid'].attach(self.buttons['extruder'][extruder], n, 0, 1, 1) + n += 1 + else: + self.current_extruder = self._printer.get_stat("toolhead", "extruder") + if self.current_extruder: + self.labels['temp_grid'].attach(self.buttons['extruder'][self.current_extruder], n, 0, 1, 1) + n += 1 self.buttons['heater'] = {} for dev in self._printer.get_heaters(): if n >= nlimit: break if dev == "heater_bed": - self.buttons['heater']['heater_bed'] = self._gtk.Button("bed", "", None, self.bts, - Gtk.PositionType.LEFT, 1) - self.labels['heater_bed'] = Gtk.Label(label="-") - self.buttons['heater']['heater_bed'].set_label(self.labels['heater_bed'].get_text()) - self.buttons['heater']['heater_bed'].connect("clicked", self.menu_item_clicked, - {"panel": "temperature", "name": _("Temperature"), - 'extra': 'heater_bed'}) - self.buttons['heater']['heater_bed'].set_halign(Gtk.Align.START) - self.labels['temp_grid'].attach(self.buttons['heater']['heater_bed'], n, 0, 1, 1) - n += 1 - elif dev.startswith("heater_generic"): + self.buttons['heater'][dev] = self._gtk.Button("bed", "", None, self.bts, Gtk.PositionType.LEFT, 1) + else: self.buttons['heater'][dev] = self._gtk.Button("heater", "", None, self.bts, Gtk.PositionType.LEFT, 1) - self.labels[dev] = Gtk.Label(label="-") - self.buttons['heater'][dev].set_label(self.labels[dev].get_text()) - self.buttons['heater'][dev].connect("clicked", self.menu_item_clicked, - {"panel": "temperature", "name": _("Temperature"), "extra": dev}) - self.buttons['heater'][dev].set_halign(Gtk.Align.START) - self.labels['temp_grid'].attach(self.buttons['heater'][dev], n, 0, 1, 1) - n += 1 + self.labels[dev] = Gtk.Label(label="-") + + self.buttons['heater'][dev].set_label(self.labels[dev].get_text()) + self.buttons['heater'][dev].connect("clicked", self.menu_item_clicked, + {"panel": "temperature", "name": _("Temperature"), "extra": dev}) + self.buttons['heater'][dev].set_halign(Gtk.Align.START) + self.labels['temp_grid'].attach(self.buttons['heater'][dev], n, 0, 1, 1) + n += 1 extra_item = not self._show_heater_power if self.ks_printer_cfg is not None: titlebar_items = self.ks_printer_cfg.get("titlebar_items", "") if titlebar_items is not None: titlebar_items = [str(i.strip()) for i in titlebar_items.split(',')] logging.info(f"Titlebar items: {titlebar_items}") - for device in self._printer.get_heaters(): - if device.startswith("temperature_sensor"): - name = " ".join(device.split(" ")[1:]) - for item in titlebar_items: - if name == item: - if extra_item: - extra_item = False - nlimit += 1 - if n >= nlimit: - break - self.buttons['heater'][device] = self._gtk.Button("heat-up", "", None, self.bts, - Gtk.PositionType.LEFT, 1) - self.labels[device] = Gtk.Label(label="-") - self.buttons['heater'][device].set_label(self.labels[device].get_text()) - self.buttons['heater'][device].connect("clicked", self.menu_item_clicked, - {"panel": "temperature", - "name": _("Temperature")}) - self.buttons['heater'][device].set_halign(Gtk.Align.START) - self.labels['temp_grid'].attach(self.buttons['heater'][device], n, 0, 1, 1) - n += 1 + for device in self._printer.get_temp_sensors(): + name = " ".join(device.split(" ")[1:]) + for item in titlebar_items: + if name == item: + if extra_item: + extra_item = False + nlimit += 1 + if n >= nlimit: break + self.buttons['heater'][device] = self._gtk.Button("heat-up", "", None, self.bts, + Gtk.PositionType.LEFT, 1) + self.labels[device] = Gtk.Label(label="-") + self.buttons['heater'][device].set_label(self.labels[device].get_text()) + self.buttons['heater'][device].connect("clicked", self.menu_item_clicked, + {"panel": "temperature", + "name": _("Temperature")}) + self.buttons['heater'][device].set_halign(Gtk.Align.START) + self.labels['temp_grid'].attach(self.buttons['heater'][device], n, 0, 1, 1) + n += 1 + break szfe = Gtk.Grid(column_homogeneous=True) szfe.attach(self.buttons['speed'], 0, 0, 3, 1) diff --git a/screen.py b/screen.py index a66c96a5..12cf5d9c 100755 --- a/screen.py +++ b/screen.py @@ -273,6 +273,10 @@ class KlipperScreen(Gtk.Window): "target", "temperature", "pressure_advance", "smooth_time", "power"] for h in self.printer.get_heaters(): requested_updates['objects'][h] = ["target", "temperature", "power"] + for t in self.printer.get_temp_sensors(): + requested_updates['objects'][t] = ["temperature"] + for f in self.printer.get_temp_fans(): + requested_updates['objects'][f] = ["target", "temperature"] for f in self.printer.get_fans(): requested_updates['objects'][f] = ["speed"] for f in self.printer.get_filament_sensors(): @@ -958,7 +962,9 @@ class KlipperScreen(Gtk.Window): self.ws_subscribe() extra_items = (self.printer.get_tools() + self.printer.get_heaters() + + self.printer.get_temp_sensors() + self.printer.get_fans() + + self.printer.get_temp_fans() + self.printer.get_filament_sensors() + self.printer.get_output_pins() + self.printer.get_leds()