refactor job_status and titlebar_items to allow multiple extruders

This commit is contained in:
alfrix 2024-01-10 13:33:49 -03:00
parent f3c0daef1b
commit 98da293cee
4 changed files with 79 additions and 77 deletions

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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()