refactor job_status and titlebar_items to allow multiple extruders
This commit is contained in:
parent
f3c0daef1b
commit
98da293cee
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user