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
|
return macros
|
||||||
|
|
||||||
def get_heaters(self):
|
def get_heaters(self):
|
||||||
heaters = []
|
heaters = self.get_config_section_list("heater_generic ")
|
||||||
if "heater_bed" in self.devices:
|
if "heater_bed" in self.devices:
|
||||||
heaters.append("heater_bed")
|
heaters.insert(0, "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 ")))
|
|
||||||
return heaters
|
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):
|
def get_filament_sensors(self):
|
||||||
sensors = list(self.get_config_section_list("filament_switch_sensor "))
|
sensors = list(self.get_config_section_list("filament_switch_sensor "))
|
||||||
sensors.extend(iter(self.get_config_section_list("filament_motion_sensor ")))
|
sensors.extend(iter(self.get_config_section_list("filament_motion_sensor ")))
|
||||||
@ -374,7 +377,7 @@ class Printer:
|
|||||||
for device in self.tools
|
for device in self.tools
|
||||||
if not device.startswith('extruder_stepper')
|
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):
|
def get_tools(self):
|
||||||
return self.tools
|
return self.tools
|
||||||
|
@ -111,7 +111,6 @@ class BasePanel(ScreenPanel):
|
|||||||
img_size = self._gtk.img_scale * self.bts
|
img_size = self._gtk.img_scale * self.bts
|
||||||
for device in devices:
|
for device in devices:
|
||||||
self.labels[device] = Gtk.Label(ellipsize=Pango.EllipsizeMode.START)
|
self.labels[device] = Gtk.Label(ellipsize=Pango.EllipsizeMode.START)
|
||||||
|
|
||||||
self.labels[f'{device}_box'] = Gtk.Box()
|
self.labels[f'{device}_box'] = Gtk.Box()
|
||||||
icon = self.get_icon(device, img_size)
|
icon = self.get_icon(device, img_size)
|
||||||
if icon is not None:
|
if icon is not None:
|
||||||
@ -120,18 +119,22 @@ class BasePanel(ScreenPanel):
|
|||||||
|
|
||||||
# Limit the number of items according to resolution
|
# Limit the number of items according to resolution
|
||||||
nlimit = int(round(log(self._screen.width, 10) * 5 - 10.5))
|
nlimit = int(round(log(self._screen.width, 10) * 5 - 10.5))
|
||||||
|
|
||||||
n = 0
|
n = 0
|
||||||
|
if len(self._printer.get_tools()) > (nlimit - 1):
|
||||||
self.current_extruder = self._printer.get_stat("toolhead", "extruder")
|
self.current_extruder = self._printer.get_stat("toolhead", "extruder")
|
||||||
if self.current_extruder and f"{self.current_extruder}_box" in self.labels:
|
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"])
|
self.control['temp_box'].add(self.labels[f"{self.current_extruder}_box"])
|
||||||
n += 1
|
else:
|
||||||
|
self.current_extruder = False
|
||||||
for device in devices:
|
for device in devices:
|
||||||
if device == 'heater_bed':
|
if n >= nlimit:
|
||||||
self.control['temp_box'].add(self.labels['heater_bed_box'])
|
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
|
n += 1
|
||||||
continue
|
for device in devices:
|
||||||
# Users can fill the bar if they want
|
# Users can fill the bar if they want
|
||||||
if n >= nlimit + 1:
|
if n >= nlimit + 1:
|
||||||
break
|
break
|
||||||
@ -142,13 +145,6 @@ class BasePanel(ScreenPanel):
|
|||||||
n += 1
|
n += 1
|
||||||
break
|
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()
|
self.control['temp_box'].show_all()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.debug(f"Couldn't create heaters box: {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)}°")
|
self.labels[device].set_label(f"{name}{int(temp)}°")
|
||||||
|
|
||||||
with suppress(Exception):
|
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.control['temp_box'].remove(self.labels[f"{self.current_extruder}_box"])
|
||||||
self.current_extruder = data["toolhead"]["extruder"]
|
self.current_extruder = data["toolhead"]["extruder"]
|
||||||
self.control['temp_box'].pack_start(self.labels[f"{self.current_extruder}_box"], True, True, 3)
|
self.control['temp_box'].pack_start(self.labels[f"{self.current_extruder}_box"], True, True, 3)
|
||||||
|
@ -147,12 +147,7 @@ class Panel(ScreenPanel):
|
|||||||
buttons['fan'].connect("clicked", self.menu_item_clicked, {"panel": "fan", "name": _("Fan")})
|
buttons['fan'].connect("clicked", self.menu_item_clicked, {"panel": "fan", "name": _("Fan")})
|
||||||
self.buttons.update(buttons)
|
self.buttons.update(buttons)
|
||||||
|
|
||||||
self.labels['temp_grid'] = Gtk.Grid()
|
|
||||||
nlimit = 2 if self._screen.width <= 500 else 3
|
|
||||||
n = 0
|
|
||||||
self.buttons['extruder'] = {}
|
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()):
|
for i, extruder in enumerate(self._printer.get_tools()):
|
||||||
self.labels[extruder] = Gtk.Label(label="-")
|
self.labels[extruder] = Gtk.Label(label="-")
|
||||||
self.buttons['extruder'][extruder] = self._gtk.Button(f"extruder-{i}", "", None, self.bts,
|
self.buttons['extruder'][extruder] = self._gtk.Button(f"extruder-{i}", "", None, self.bts,
|
||||||
@ -160,8 +155,19 @@ class Panel(ScreenPanel):
|
|||||||
self.buttons['extruder'][extruder].set_label(self.labels[extruder].get_text())
|
self.buttons['extruder'][extruder].set_label(self.labels[extruder].get_text())
|
||||||
self.buttons['extruder'][extruder].connect("clicked", self.menu_item_clicked,
|
self.buttons['extruder'][extruder].connect("clicked", self.menu_item_clicked,
|
||||||
{"panel": "temperature", "name": _("Temperature"),
|
{"panel": "temperature", "name": _("Temperature"),
|
||||||
'extra': self.current_extruder})
|
'extra': extruder})
|
||||||
self.buttons['extruder'][extruder].set_halign(Gtk.Align.START)
|
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
|
||||||
|
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)
|
self.labels['temp_grid'].attach(self.buttons['extruder'][self.current_extruder], n, 0, 1, 1)
|
||||||
n += 1
|
n += 1
|
||||||
self.buttons['heater'] = {}
|
self.buttons['heater'] = {}
|
||||||
@ -169,19 +175,11 @@ class Panel(ScreenPanel):
|
|||||||
if n >= nlimit:
|
if n >= nlimit:
|
||||||
break
|
break
|
||||||
if dev == "heater_bed":
|
if dev == "heater_bed":
|
||||||
self.buttons['heater']['heater_bed'] = self._gtk.Button("bed", "", None, self.bts,
|
self.buttons['heater'][dev] = self._gtk.Button("bed", "", None, self.bts, Gtk.PositionType.LEFT, 1)
|
||||||
Gtk.PositionType.LEFT, 1)
|
else:
|
||||||
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.buttons['heater'][dev] = self._gtk.Button("heater", "", None, self.bts, Gtk.PositionType.LEFT, 1)
|
||||||
self.labels[dev] = Gtk.Label(label="-")
|
self.labels[dev] = Gtk.Label(label="-")
|
||||||
|
|
||||||
self.buttons['heater'][dev].set_label(self.labels[dev].get_text())
|
self.buttons['heater'][dev].set_label(self.labels[dev].get_text())
|
||||||
self.buttons['heater'][dev].connect("clicked", self.menu_item_clicked,
|
self.buttons['heater'][dev].connect("clicked", self.menu_item_clicked,
|
||||||
{"panel": "temperature", "name": _("Temperature"), "extra": dev})
|
{"panel": "temperature", "name": _("Temperature"), "extra": dev})
|
||||||
@ -194,8 +192,7 @@ class Panel(ScreenPanel):
|
|||||||
if titlebar_items is not None:
|
if titlebar_items is not None:
|
||||||
titlebar_items = [str(i.strip()) for i in titlebar_items.split(',')]
|
titlebar_items = [str(i.strip()) for i in titlebar_items.split(',')]
|
||||||
logging.info(f"Titlebar items: {titlebar_items}")
|
logging.info(f"Titlebar items: {titlebar_items}")
|
||||||
for device in self._printer.get_heaters():
|
for device in self._printer.get_temp_sensors():
|
||||||
if device.startswith("temperature_sensor"):
|
|
||||||
name = " ".join(device.split(" ")[1:])
|
name = " ".join(device.split(" ")[1:])
|
||||||
for item in titlebar_items:
|
for item in titlebar_items:
|
||||||
if name == item:
|
if name == item:
|
||||||
|
@ -273,6 +273,10 @@ class KlipperScreen(Gtk.Window):
|
|||||||
"target", "temperature", "pressure_advance", "smooth_time", "power"]
|
"target", "temperature", "pressure_advance", "smooth_time", "power"]
|
||||||
for h in self.printer.get_heaters():
|
for h in self.printer.get_heaters():
|
||||||
requested_updates['objects'][h] = ["target", "temperature", "power"]
|
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():
|
for f in self.printer.get_fans():
|
||||||
requested_updates['objects'][f] = ["speed"]
|
requested_updates['objects'][f] = ["speed"]
|
||||||
for f in self.printer.get_filament_sensors():
|
for f in self.printer.get_filament_sensors():
|
||||||
@ -958,7 +962,9 @@ class KlipperScreen(Gtk.Window):
|
|||||||
self.ws_subscribe()
|
self.ws_subscribe()
|
||||||
extra_items = (self.printer.get_tools()
|
extra_items = (self.printer.get_tools()
|
||||||
+ self.printer.get_heaters()
|
+ self.printer.get_heaters()
|
||||||
|
+ self.printer.get_temp_sensors()
|
||||||
+ self.printer.get_fans()
|
+ self.printer.get_fans()
|
||||||
|
+ self.printer.get_temp_fans()
|
||||||
+ self.printer.get_filament_sensors()
|
+ self.printer.get_filament_sensors()
|
||||||
+ self.printer.get_output_pins()
|
+ self.printer.get_output_pins()
|
||||||
+ self.printer.get_leds()
|
+ self.printer.get_leds()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user