refactor temp updates for devices fix extruder_stepper icon error

This commit is contained in:
alfrix 2023-08-22 18:41:36 -03:00
parent df6a4ea4da
commit f3c2736f9f
7 changed files with 71 additions and 76 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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