diff --git a/ks_includes/printer.py b/ks_includes/printer.py index 17398181..b74de2ee 100644 --- a/ks_includes/printer.py +++ b/ks_includes/printer.py @@ -100,7 +100,7 @@ class Printer: def process_update(self, data): if self.data is None: return - for x in (self.get_tools() + self.get_heaters() + self.get_filament_sensors()): + for x in (self.get_temp_devices() + self.get_filament_sensors()): if x in data: for i in data[x]: self.set_dev_stat(x, i, data[x][i]) @@ -206,7 +206,7 @@ class Printer: def get_heaters(self): heaters = [] - if self.has_heated_bed(): + 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 "))) @@ -322,16 +322,20 @@ class Printer: temp[section] = self.tempstore[device][section][-results:] return temp + def get_temp_devices(self): + devices = [ + device + for device in self.tools + if not device.startswith('extruder_stepper') + ] + return devices + self.get_heaters() + def get_tools(self): return self.tools def get_tool_number(self, tool): return self.tools.index(tool) - def has_heated_bed(self): - if "heater_bed" in self.devices: - return True - def init_temp_store(self, tempstore): if self.tempstore and list(self.tempstore) != list(tempstore): logging.debug("Tempstore has changed") diff --git a/panels/base_panel.py b/panels/base_panel.py index f9be8eef..0e6f9654 100644 --- a/panels/base_panel.py +++ b/panels/base_panel.py @@ -109,7 +109,7 @@ class BasePanel(ScreenPanel): try: for child in self.control['temp_box'].get_children(): self.control['temp_box'].remove(child) - devices = (self._printer.get_tools() + self._printer.get_heaters()) + devices = self._printer.get_temp_devices() if not show or not devices: return @@ -128,18 +128,16 @@ class BasePanel(ScreenPanel): nlimit = int(round(log(self._screen.width, 10) * 5 - 10.5)) n = 0 - if self._printer.get_tools(): - 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 self._printer.has_heated_bed(): - self.control['temp_box'].add(self.labels['heater_bed_box']) + 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 - # Options in the config have priority 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 @@ -228,7 +226,7 @@ class BasePanel(ScreenPanel): if action != "notify_status_update" or self._screen.printer is None: return - devices = (self._printer.get_tools() + self._printer.get_heaters()) + devices = (self._printer.get_temp_devices()) if devices is not None: for device in devices: temp = self._printer.get_dev_stat(device, "temperature") diff --git a/panels/extrude.py b/panels/extrude.py index 67283c3d..501c13ef 100644 --- a/panels/extrude.py +++ b/panels/extrude.py @@ -59,10 +59,9 @@ class Panel(ScreenPanel): for extruder in self._printer.get_tools(): if self._printer.extrudercount > 1: self.labels[extruder] = self._gtk.Button(f"extruder-{i}", f"T{self._printer.get_tool_number(extruder)}") + self.labels[extruder].connect("clicked", self.change_extruder, extruder) else: self.labels[extruder] = self._gtk.Button("extruder", "") - if len(self._printer.get_tools()) > 1: - self.labels[extruder].connect("clicked", self.change_extruder, extruder) if extruder == self.current_extruder: self.labels[extruder].get_style_context().add_class("button_active") if i < limit: @@ -187,13 +186,14 @@ class Panel(ScreenPanel): if action != "notify_status_update": return for x in self._printer.get_tools(): - self.update_temp( - x, - self._printer.get_dev_stat(x, "temperature"), - self._printer.get_dev_stat(x, "target"), - self._printer.get_dev_stat(x, "power"), - lines=2, - ) + if x in data: + self.update_temp( + x, + self._printer.get_dev_stat(x, "temperature"), + self._printer.get_dev_stat(x, "target"), + self._printer.get_dev_stat(x, "power"), + lines=2, + ) if ("toolhead" in data and "extruder" in data["toolhead"] and data["toolhead"]["extruder"] != self.current_extruder): diff --git a/panels/job_status.py b/panels/job_status.py index 472b2613..f2f94d93 100644 --- a/panels/job_status.py +++ b/panels/job_status.py @@ -25,7 +25,7 @@ class Panel(ScreenPanel): self.f_layer_h = self.layer_h = 1 self.oheight = 0.0 self.current_extruder = None - self.fila_section = 0.0 + self.fila_section = pi * ((1.75 / 2) ** 2) self.filename_label = self.filename = self.prev_pos = self.prev_gpos = None self.can_close = False self.flow_timeout = self.animation_timeout = None @@ -118,8 +118,8 @@ class Panel(ScreenPanel): self.labels['thumbnail'] = self._gtk.Image() self.labels['info_grid'] = Gtk.Grid() self.labels['info_grid'].attach(self.labels['thumbnail'], 0, 0, 1, 1) - if self._printer.get_tools(): - self.current_extruder = self._printer.get_stat("toolhead", "extruder") + self.current_extruder = self._printer.get_stat("toolhead", "extruder") + if self.current_extruder: diameter = float(self._printer.get_config_section(self.current_extruder)['filament_diameter']) self.fila_section = pi * ((diameter / 2) ** 2) @@ -155,8 +155,8 @@ class Panel(ScreenPanel): nlimit = 2 if self._screen.width <= 500 else 3 n = 0 self.buttons['extruder'] = {} - if self._printer.get_tools(): - self.current_extruder = self._printer.get_stat("toolhead", "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, @@ -168,23 +168,22 @@ class Panel(ScreenPanel): 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 - else: - self.current_extruder = None self.buttons['heater'] = {} - if self._printer.has_heated_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 for dev in self._printer.get_heaters(): if n >= nlimit: break - if dev.startswith("heater_generic"): + 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("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()) @@ -501,24 +500,18 @@ class Panel(ScreenPanel): elif action != "notify_status_update": return - for x in self._printer.get_tools(): - if x in self.buttons['extruder']: + for x in self._printer.get_temp_devices(): + if x in data: self.update_temp( x, self._printer.get_dev_stat(x, "temperature"), self._printer.get_dev_stat(x, "target"), self._printer.get_dev_stat(x, "power"), ) - self.buttons['extruder'][x].set_label(self.labels[x].get_text()) - for x in self._printer.get_heaters(): - if x in self.buttons['heater']: - self.update_temp( - x, - self._printer.get_dev_stat(x, "temperature"), - self._printer.get_dev_stat(x, "target"), - self._printer.get_dev_stat(x, "power"), - ) - self.buttons['heater'][x].set_label(self.labels[x].get_text()) + if x in self.buttons['extruder']: + self.buttons['extruder'][x].set_label(self.labels[x].get_text()) + elif x in self.buttons['heater']: + self.buttons['heater'][x].set_label(self.labels[x].get_text()) if "display_status" in data and "message" in data["display_status"]: self.labels['lcdmessage'].set_label( diff --git a/panels/main_menu.py b/panels/main_menu.py index 643b22a1..6840c888 100644 --- a/panels/main_menu.py +++ b/panels/main_menu.py @@ -236,7 +236,7 @@ class Panel(MenuPanel): self.left_panel = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0) self.left_panel.add(scroll) - for d in (self._printer.get_tools() + self._printer.get_heaters()): + for d in self._printer.get_temp_devices(): self.add_device(d) return self.left_panel @@ -258,14 +258,14 @@ class Panel(MenuPanel): def process_update(self, action, data): if action != "notify_status_update": return - for x in (self._printer.get_tools() + self._printer.get_heaters()): - self.update_temp( - x, - self._printer.get_dev_stat(x, "temperature"), - self._printer.get_dev_stat(x, "target"), - self._printer.get_dev_stat(x, "power"), - ) - return False + for x in self._printer.get_temp_devices(): + if x in data: + self.update_temp( + x, + self._printer.get_dev_stat(x, "temperature"), + self._printer.get_dev_stat(x, "target"), + self._printer.get_dev_stat(x, "power"), + ) def show_numpad(self, widget, device): diff --git a/panels/temperature.py b/panels/temperature.py index e0cea84e..3e9678bd 100644 --- a/panels/temperature.py +++ b/panels/temperature.py @@ -30,9 +30,8 @@ class Panel(ScreenPanel): # When printing start in temp_delta mode and only select tools selection = [] if self._printer.state not in ["printing", "paused"]: - selection.extend(iter(self._printer.get_tools())) self.show_preheat = True - selection.extend(self._printer.get_heaters()) + selection.extend(self._printer.get_temp_devices()) elif extra: selection.append(extra) @@ -467,7 +466,7 @@ class Panel(ScreenPanel): popover.connect('closed', self.popover_closed) self.labels['popover'] = popover - for d in (self._printer.get_tools() + self._printer.get_heaters()): + for d in self._printer.get_temp_devices(): self.add_device(d) return self.left_panel @@ -513,13 +512,14 @@ class Panel(ScreenPanel): def process_update(self, action, data): if action != "notify_status_update": return - for x in (self._printer.get_tools() + self._printer.get_heaters()): - self.update_temp( - x, - self._printer.get_dev_stat(x, "temperature"), - self._printer.get_dev_stat(x, "target"), - self._printer.get_dev_stat(x, "power"), - ) + for x in self._printer.get_temp_devices(): + if x in data: + self.update_temp( + x, + self._printer.get_dev_stat(x, "temperature"), + self._printer.get_dev_stat(x, "target"), + self._printer.get_dev_stat(x, "power"), + ) def show_numpad(self, widget, device=None): for d in self.active_heaters: diff --git a/screen.py b/screen.py index 1c2bd5eb..265ec538 100755 --- a/screen.py +++ b/screen.py @@ -891,7 +891,7 @@ class KlipperScreen(Gtk.Window): extra_items)) if data is False: return self._init_printer("Error getting printer object data with extra items") - if len(self.printer.get_tools() + self.printer.get_heaters()) > 0: + if len(self.printer.get_temp_devices()) > 0: self.init_tempstore() self.files.initialize()