job_status: refactor
This commit is contained in:
parent
c630178f0c
commit
b5cf73054a
@ -1,7 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import time
|
|
||||||
import contextlib
|
import contextlib
|
||||||
|
|
||||||
import gi
|
import gi
|
||||||
@ -20,34 +19,31 @@ def create_panel(*args):
|
|||||||
class JobStatusPanel(ScreenPanel):
|
class JobStatusPanel(ScreenPanel):
|
||||||
def __init__(self, screen, title):
|
def __init__(self, screen, title):
|
||||||
super().__init__(screen, title)
|
super().__init__(screen, title)
|
||||||
self.extrusion_button = None
|
|
||||||
self.elapsed_button = None
|
|
||||||
self.left_button = None
|
|
||||||
self.fan_button = None
|
|
||||||
self.speed_button = None
|
|
||||||
self.z_button = None
|
|
||||||
self.heater_button = None
|
|
||||||
self.extruder_button = None
|
|
||||||
self.grid = self._gtk.HomogeneousGrid()
|
self.grid = self._gtk.HomogeneousGrid()
|
||||||
self.grid.set_row_homogeneous(False)
|
self.grid.set_row_homogeneous(False)
|
||||||
self.pos_z = 0
|
z = self._printer.get_stat("gcode_move", "gcode_position")
|
||||||
self.extrusion = 100
|
self.pos_z = float(z[2]) if z else 0
|
||||||
self.speed = 100
|
factor = self._printer.get_stat("gcode_move", "extrude_factor")
|
||||||
self.speed_factor = 1
|
self.extrusion = round(float(factor) * 100) if factor else 100
|
||||||
self.req_speed = 0
|
factor = self._printer.get_stat("gcode_move", "speed_factor")
|
||||||
|
self.speed_factor = float(factor) if factor else 1
|
||||||
|
self.speed = round(self.speed_factor * 100)
|
||||||
|
req = self._printer.get_stat("gcode_move", "speed")
|
||||||
|
self.req_speed = round(float(req) / 60 * self.speed_factor) if req else 0
|
||||||
self.f_layer_h = self.layer_h = 1
|
self.f_layer_h = self.layer_h = 1
|
||||||
self.oheight = 0
|
self.oheight = 0
|
||||||
self.current_extruder = None
|
self.current_extruder = None
|
||||||
self.fila_section = 0
|
self.fila_section = 0
|
||||||
self.buttons = {}
|
self.buttons = {}
|
||||||
self.filename_label = self.filename = self.prev_pos = self.prev_gpos = None
|
self.filename_label = self.filename = self.prev_pos = self.prev_gpos = None
|
||||||
self.close_timeout = self.vel_timeout = self.animation_timeout = None
|
self.can_close = False
|
||||||
|
self.flow_timeout = self.animation_timeout = None
|
||||||
self.file_metadata = self.fans = {}
|
self.file_metadata = self.fans = {}
|
||||||
self.state = "standby"
|
self.state = "standby"
|
||||||
self.timeleft_type = "auto"
|
self.timeleft_type = "auto"
|
||||||
self.progress = self.zoffset = self.flowrate = self.vel = 0
|
self.progress = self.zoffset = self.flowrate = self.vel = 0
|
||||||
self.main_status_displayed = True
|
self.main_status_displayed = True
|
||||||
self.velstore = self.flowstore = []
|
self.flowstore = []
|
||||||
|
|
||||||
data = ['pos_x', 'pos_y', 'pos_z', 'time_left', 'duration', 'slicer_time', 'file_time',
|
data = ['pos_x', 'pos_y', 'pos_z', 'time_left', 'duration', 'slicer_time', 'file_time',
|
||||||
'filament_time', 'est_time', 'speed_factor', 'req_speed', 'max_accel', 'extrude_factor', 'zoffset',
|
'filament_time', 'est_time', 'speed_factor', 'req_speed', 'max_accel', 'extrude_factor', 'zoffset',
|
||||||
@ -138,7 +134,7 @@ class JobStatusPanel(ScreenPanel):
|
|||||||
self.grid.attach(fi_box, 1, 0, 3, 1)
|
self.grid.attach(fi_box, 1, 0, 3, 1)
|
||||||
self.grid.attach(self.labels['info_grid'], 0, 1, 4, 2)
|
self.grid.attach(self.labels['info_grid'], 0, 1, 4, 2)
|
||||||
self.grid.attach(self.buttons['button_grid'], 0, 3, 4, 1)
|
self.grid.attach(self.buttons['button_grid'], 0, 3, 4, 1)
|
||||||
|
self.create_status_grid()
|
||||||
self.content.add(self.grid)
|
self.content.add(self.grid)
|
||||||
|
|
||||||
def create_status_grid(self, widget=None):
|
def create_status_grid(self, widget=None):
|
||||||
@ -147,42 +143,42 @@ class JobStatusPanel(ScreenPanel):
|
|||||||
self.labels['temp_grid'] = Gtk.Grid()
|
self.labels['temp_grid'] = Gtk.Grid()
|
||||||
nlimit = 2 if self._screen.width <= 480 else 3
|
nlimit = 2 if self._screen.width <= 480 else 3
|
||||||
n = 0
|
n = 0
|
||||||
self.extruder_button = {}
|
self.buttons['extruder'] = {}
|
||||||
if self._screen.printer.get_tools():
|
if self._screen.printer.get_tools():
|
||||||
for i, extruder in enumerate(self._printer.get_tools()):
|
for i, extruder in enumerate(self._printer.get_tools()):
|
||||||
self.labels[extruder] = Gtk.Label("-")
|
self.labels[extruder] = Gtk.Label("-")
|
||||||
self.extruder_button[extruder] = self._gtk.Button(f"extruder-{i}", "", None, self.bts,
|
self.buttons['extruder'][extruder] = self._gtk.Button(f"extruder-{i}", "", None, self.bts,
|
||||||
Gtk.PositionType.LEFT)
|
Gtk.PositionType.LEFT)
|
||||||
self.extruder_button[extruder].set_label(self.labels[extruder].get_text())
|
self.buttons['extruder'][extruder].set_label(self.labels[extruder].get_text())
|
||||||
self.extruder_button[extruder].connect("clicked", self.menu_item_clicked, "temperature",
|
self.buttons['extruder'][extruder].connect("clicked", self.menu_item_clicked, "temperature",
|
||||||
{"panel": "temperature", "name": _("Temperature")})
|
{"panel": "temperature", "name": _("Temperature")})
|
||||||
self.extruder_button[extruder].set_halign(Gtk.Align.START)
|
self.buttons['extruder'][extruder].set_halign(Gtk.Align.START)
|
||||||
self.current_extruder = self._printer.get_stat("toolhead", "extruder")
|
self.current_extruder = self._printer.get_stat("toolhead", "extruder")
|
||||||
self.labels['temp_grid'].attach(self.extruder_button[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
|
||||||
else:
|
else:
|
||||||
self.current_extruder = None
|
self.current_extruder = None
|
||||||
self.heater_button = {}
|
self.buttons['heater'] = {}
|
||||||
if self._printer.has_heated_bed():
|
if self._printer.has_heated_bed():
|
||||||
self.heater_button['heater_bed'] = self._gtk.Button("bed", "", None, self.bts, Gtk.PositionType.LEFT)
|
self.buttons['heater']['heater_bed'] = self._gtk.Button("bed", "", None, self.bts, Gtk.PositionType.LEFT)
|
||||||
self.labels['heater_bed'] = Gtk.Label("-")
|
self.labels['heater_bed'] = Gtk.Label("-")
|
||||||
self.heater_button['heater_bed'].set_label(self.labels['heater_bed'].get_text())
|
self.buttons['heater']['heater_bed'].set_label(self.labels['heater_bed'].get_text())
|
||||||
self.heater_button['heater_bed'].connect("clicked", self.menu_item_clicked, "temperature",
|
self.buttons['heater']['heater_bed'].connect("clicked", self.menu_item_clicked, "temperature",
|
||||||
{"panel": "temperature", "name": _("Temperature")})
|
{"panel": "temperature", "name": _("Temperature")})
|
||||||
self.heater_button['heater_bed'].set_halign(Gtk.Align.START)
|
self.buttons['heater']['heater_bed'].set_halign(Gtk.Align.START)
|
||||||
self.labels['temp_grid'].attach(self.heater_button['heater_bed'], n, 0, 1, 1)
|
self.labels['temp_grid'].attach(self.buttons['heater']['heater_bed'], n, 0, 1, 1)
|
||||||
n += 1
|
n += 1
|
||||||
for device in self._screen.printer.get_heaters():
|
for dev in self._screen.printer.get_heaters():
|
||||||
if n >= nlimit:
|
if n >= nlimit:
|
||||||
break
|
break
|
||||||
if device.startswith("heater_generic"):
|
if dev.startswith("heater_generic"):
|
||||||
self.heater_button[device] = 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[device] = Gtk.Label("-")
|
self.labels[dev] = Gtk.Label("-")
|
||||||
self.heater_button[device].set_label(self.labels[device].get_text())
|
self.buttons['heater'][dev].set_label(self.labels[dev].get_text())
|
||||||
self.heater_button[device].connect("clicked", self.menu_item_clicked, "temperature",
|
self.buttons['heater'][dev].connect("clicked", self.menu_item_clicked, "temperature",
|
||||||
{"panel": "temperature", "name": _("Temperature")})
|
{"panel": "temperature", "name": _("Temperature")})
|
||||||
self.heater_button[device].set_halign(Gtk.Align.START)
|
self.buttons['heater'][dev].set_halign(Gtk.Align.START)
|
||||||
self.labels['temp_grid'].attach(self.heater_button[device], n, 0, 1, 1)
|
self.labels['temp_grid'].attach(self.buttons['heater'][dev], n, 0, 1, 1)
|
||||||
n += 1
|
n += 1
|
||||||
extra_item = not self._show_heater_power
|
extra_item = not self._show_heater_power
|
||||||
if self.ks_printer_cfg is not None:
|
if self.ks_printer_cfg is not None:
|
||||||
@ -200,61 +196,62 @@ class JobStatusPanel(ScreenPanel):
|
|||||||
nlimit += 1
|
nlimit += 1
|
||||||
if n >= nlimit:
|
if n >= nlimit:
|
||||||
break
|
break
|
||||||
self.heater_button[device] = self._gtk.Button("heat-up", "", None, self.bts,
|
self.buttons['heater'][device] = self._gtk.Button("heat-up", "", None, self.bts,
|
||||||
Gtk.PositionType.LEFT, 1)
|
Gtk.PositionType.LEFT, 1)
|
||||||
self.labels[device] = Gtk.Label("-")
|
self.labels[device] = Gtk.Label("-")
|
||||||
self.heater_button[device].set_label(self.labels[device].get_text())
|
self.buttons['heater'][device].set_label(self.labels[device].get_text())
|
||||||
self.heater_button[device].connect("clicked", self.menu_item_clicked, "temperature",
|
self.buttons['heater'][device].connect("clicked", self.menu_item_clicked, "temperature",
|
||||||
{"panel": "temperature", "name": _("Temperature")})
|
{"panel": "temperature",
|
||||||
self.heater_button[device].set_halign(Gtk.Align.START)
|
"name": _("Temperature")})
|
||||||
self.labels['temp_grid'].attach(self.heater_button[device], n, 0, 1, 1)
|
self.buttons['heater'][device].set_halign(Gtk.Align.START)
|
||||||
|
self.labels['temp_grid'].attach(self.buttons['heater'][device], n, 0, 1, 1)
|
||||||
n += 1
|
n += 1
|
||||||
break
|
break
|
||||||
|
|
||||||
self.z_button = self._gtk.Button("home-z", "", None, self.bts, Gtk.PositionType.LEFT, 1)
|
self.buttons['z'] = self._gtk.Button("home-z", "", None, self.bts, Gtk.PositionType.LEFT, 1)
|
||||||
self.z_button.set_label(self.labels['pos_z'].get_text())
|
self.buttons['z'].set_label(self.labels['pos_z'].get_text())
|
||||||
self.z_button.connect("clicked", self.create_move_grid)
|
self.buttons['z'].connect("clicked", self.create_move_grid)
|
||||||
self.z_button.set_halign(Gtk.Align.START)
|
self.buttons['z'].set_halign(Gtk.Align.START)
|
||||||
|
|
||||||
self.speed_button = self._gtk.Button("speed+", "", None, self.bts, Gtk.PositionType.LEFT, 1)
|
self.buttons['speed'] = self._gtk.Button("speed+", "", None, self.bts, Gtk.PositionType.LEFT, 1)
|
||||||
self.speed_button.set_label(self.labels['speed_factor'].get_text())
|
self.buttons['speed'].set_label(self.labels['speed_factor'].get_text())
|
||||||
self.speed_button.connect("clicked", self.create_move_grid)
|
self.buttons['speed'].connect("clicked", self.create_move_grid)
|
||||||
self.speed_button.set_halign(Gtk.Align.START)
|
self.buttons['speed'].set_halign(Gtk.Align.START)
|
||||||
|
|
||||||
self.extrusion_button = self._gtk.Button("extrude", "", None, self.bts, Gtk.PositionType.LEFT, 1)
|
self.buttons['extrusion'] = self._gtk.Button("extrude", "", None, self.bts, Gtk.PositionType.LEFT, 1)
|
||||||
self.extrusion_button.set_label(self.labels['extrude_factor'].get_text())
|
self.buttons['extrusion'].set_label(self.labels['extrude_factor'].get_text())
|
||||||
self.extrusion_button.connect("clicked", self.create_extrusion_grid)
|
self.buttons['extrusion'].connect("clicked", self.create_extrusion_grid)
|
||||||
self.extrusion_button.set_halign(Gtk.Align.START)
|
self.buttons['extrusion'].set_halign(Gtk.Align.START)
|
||||||
|
|
||||||
self.fan_button = self._gtk.Button("fan", "", None, self.bts, Gtk.PositionType.LEFT, 1)
|
self.buttons['fan'] = self._gtk.Button("fan", "", None, self.bts, Gtk.PositionType.LEFT, 1)
|
||||||
self.fan_button.set_label(self.labels['fan'].get_text())
|
self.buttons['fan'].set_label(self.labels['fan'].get_text())
|
||||||
self.fan_button.connect("clicked", self.menu_item_clicked, "fan", {"panel": "fan", "name": _("Fan")})
|
self.buttons['fan'].connect("clicked", self.menu_item_clicked, "fan", {"panel": "fan", "name": _("Fan")})
|
||||||
self.fan_button.set_halign(Gtk.Align.START)
|
self.buttons['fan'].set_halign(Gtk.Align.START)
|
||||||
|
|
||||||
elapsed_label = self.labels['elapsed'].get_text() + " " + self.labels['duration'].get_text()
|
elapsed_label = self.labels['elapsed'].get_text() + " " + self.labels['duration'].get_text()
|
||||||
self.elapsed_button = self._gtk.Button("clock", elapsed_label, None, self.bts, Gtk.PositionType.LEFT, 1)
|
self.buttons['elapsed'] = self._gtk.Button("clock", elapsed_label, None, self.bts, Gtk.PositionType.LEFT, 1)
|
||||||
self.elapsed_button.connect("clicked", self.create_time_grid)
|
self.buttons['elapsed'].connect("clicked", self.create_time_grid)
|
||||||
self.elapsed_button.set_halign(Gtk.Align.START)
|
self.buttons['elapsed'].set_halign(Gtk.Align.START)
|
||||||
|
|
||||||
remaining_label = self.labels['left'].get_text() + " " + self.labels['time_left'].get_text()
|
remaining_label = self.labels['left'].get_text() + " " + self.labels['time_left'].get_text()
|
||||||
self.left_button = self._gtk.Button("hourglass", remaining_label, None, self.bts, Gtk.PositionType.LEFT, 1)
|
self.buttons['left'] = self._gtk.Button("hourglass", remaining_label, None, self.bts, Gtk.PositionType.LEFT, 1)
|
||||||
self.left_button.connect("clicked", self.create_time_grid)
|
self.buttons['left'].connect("clicked", self.create_time_grid)
|
||||||
self.left_button.set_halign(Gtk.Align.START)
|
self.buttons['left'].set_halign(Gtk.Align.START)
|
||||||
|
|
||||||
szfe = Gtk.Grid()
|
szfe = Gtk.Grid()
|
||||||
szfe.attach(self.speed_button, 0, 0, 1, 1)
|
szfe.attach(self.buttons['speed'], 0, 0, 1, 1)
|
||||||
szfe.attach(self.z_button, 1, 0, 1, 1)
|
szfe.attach(self.buttons['z'], 1, 0, 1, 1)
|
||||||
if self._screen.printer.get_tools():
|
if self._screen.printer.get_tools():
|
||||||
szfe.attach(self.extrusion_button, 0, 1, 1, 1)
|
szfe.attach(self.buttons['extrusion'], 0, 1, 1, 1)
|
||||||
if self._screen.printer.get_fans():
|
if self._screen.printer.get_fans():
|
||||||
szfe.attach(self.fan_button, 1, 1, 1, 1)
|
szfe.attach(self.buttons['fan'], 1, 1, 1, 1)
|
||||||
|
|
||||||
info = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
info = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||||||
info.get_style_context().add_class("printing-info")
|
info.get_style_context().add_class("printing-info")
|
||||||
info.add(self.labels['temp_grid'])
|
info.add(self.labels['temp_grid'])
|
||||||
info.add(szfe)
|
info.add(szfe)
|
||||||
info.add(self.elapsed_button)
|
info.add(self.buttons['elapsed'])
|
||||||
info.add(self.left_button)
|
info.add(self.buttons['left'])
|
||||||
self.switch_info(info)
|
self.switch_info(info)
|
||||||
|
|
||||||
def create_extrusion_grid(self, widget=None):
|
def create_extrusion_grid(self, widget=None):
|
||||||
@ -324,10 +321,10 @@ class JobStatusPanel(ScreenPanel):
|
|||||||
info.attach(goback, 0, 0, 1, 6)
|
info.attach(goback, 0, 0, 1, 6)
|
||||||
info.attach(self.labels['elapsed'], 1, 0, 1, 1)
|
info.attach(self.labels['elapsed'], 1, 0, 1, 1)
|
||||||
info.attach(self.labels['duration'], 2, 0, 1, 1)
|
info.attach(self.labels['duration'], 2, 0, 1, 1)
|
||||||
info.attach(self.labels['total'], 1, 1, 1, 1)
|
info.attach(self.labels['left'], 1, 1, 1, 1)
|
||||||
info.attach(self.labels['est_time'], 2, 1, 1, 1)
|
info.attach(self.labels['time_left'], 2, 1, 1, 1)
|
||||||
info.attach(self.labels['left'], 1, 2, 1, 1)
|
info.attach(self.labels['total'], 1, 2, 1, 1)
|
||||||
info.attach(self.labels['time_left'], 2, 2, 1, 1)
|
info.attach(self.labels['est_time'], 2, 2, 1, 1)
|
||||||
info.attach(self.labels['slicer'], 1, 3, 1, 1)
|
info.attach(self.labels['slicer'], 1, 3, 1, 1)
|
||||||
info.attach(self.labels['slicer_time'], 2, 3, 1, 1)
|
info.attach(self.labels['slicer_time'], 2, 3, 1, 1)
|
||||||
info.attach(self.labels['file_tlbl'], 1, 4, 1, 1)
|
info.attach(self.labels['file_tlbl'], 1, 4, 1, 1)
|
||||||
@ -362,15 +359,14 @@ class JobStatusPanel(ScreenPanel):
|
|||||||
def activate(self):
|
def activate(self):
|
||||||
ps = self._printer.get_stat("print_stats")
|
ps = self._printer.get_stat("print_stats")
|
||||||
self.set_state(ps['state'])
|
self.set_state(ps['state'])
|
||||||
self.create_status_grid()
|
if self.flow_timeout is None:
|
||||||
if self.vel_timeout is None:
|
self.flow_timeout = GLib.timeout_add_seconds(1, self.update_flow)
|
||||||
self.vel_timeout = GLib.timeout_add_seconds(1, self.update_velocity)
|
|
||||||
self._screen.base_panel_show_all()
|
self._screen.base_panel_show_all()
|
||||||
|
|
||||||
def deactivate(self):
|
def deactivate(self):
|
||||||
if self.vel_timeout is not None:
|
if self.flow_timeout is not None:
|
||||||
GLib.source_remove(self.vel_timeout)
|
GLib.source_remove(self.flow_timeout)
|
||||||
self.vel_timeout = None
|
self.flow_timeout = None
|
||||||
|
|
||||||
def create_buttons(self):
|
def create_buttons(self):
|
||||||
|
|
||||||
@ -402,11 +398,11 @@ class JobStatusPanel(ScreenPanel):
|
|||||||
if device == "probe":
|
if device == "probe":
|
||||||
probe = self._printer.get_probe()
|
probe = self._printer.get_probe()
|
||||||
saved_z_offset = probe['z_offset'] if probe else "?"
|
saved_z_offset = probe['z_offset'] if probe else "?"
|
||||||
label.set_text(_("Apply %s%.2f offset to Probe?") % (sign, abs(self.zoffset))
|
label.set_label(_("Apply %s%.2f offset to Probe?") % (sign, abs(self.zoffset))
|
||||||
+ "\n\n"
|
+ "\n\n"
|
||||||
+ _("Saved offset: %s") % saved_z_offset)
|
+ _("Saved offset: %s") % saved_z_offset)
|
||||||
elif device == "endstop":
|
elif device == "endstop":
|
||||||
label.set_text(_("Apply %.2f offset to Endstop?") % (sign, abs(self.zoffset)))
|
label.set_label(_("Apply %.2f offset to Endstop?") % (sign, abs(self.zoffset)))
|
||||||
label.set_hexpand(True)
|
label.set_hexpand(True)
|
||||||
label.set_halign(Gtk.Align.CENTER)
|
label.set_halign(Gtk.Align.CENTER)
|
||||||
label.set_vexpand(True)
|
label.set_vexpand(True)
|
||||||
@ -480,18 +476,10 @@ class JobStatusPanel(ScreenPanel):
|
|||||||
self.enable_button(*args)
|
self.enable_button(*args)
|
||||||
|
|
||||||
def close_panel(self, widget=None):
|
def close_panel(self, widget=None):
|
||||||
logging.debug("Closing job_status panel")
|
if self.can_close:
|
||||||
self.remove_close_timeout()
|
logging.debug("Closing job_status panel")
|
||||||
self.state_check()
|
|
||||||
if self.state not in ["printing", "paused", "cancelling"]:
|
|
||||||
self._screen.printer_ready()
|
self._screen.printer_ready()
|
||||||
self._printer.change_state("ready")
|
self._printer.change_state("ready")
|
||||||
return False
|
|
||||||
|
|
||||||
def remove_close_timeout(self):
|
|
||||||
if self.close_timeout is not None:
|
|
||||||
GLib.source_remove(self.close_timeout)
|
|
||||||
self.close_timeout = None
|
|
||||||
|
|
||||||
def enable_button(self, *args):
|
def enable_button(self, *args):
|
||||||
for arg in args:
|
for arg in args:
|
||||||
@ -507,7 +495,6 @@ class JobStatusPanel(ScreenPanel):
|
|||||||
self._files.remove_file_callback(self._callback_metadata)
|
self._files.remove_file_callback(self._callback_metadata)
|
||||||
|
|
||||||
def new_print(self):
|
def new_print(self):
|
||||||
self.remove_close_timeout()
|
|
||||||
self._screen.close_screensaver()
|
self._screen.close_screensaver()
|
||||||
self.state_check()
|
self.state_check()
|
||||||
|
|
||||||
@ -525,22 +512,23 @@ class JobStatusPanel(ScreenPanel):
|
|||||||
|
|
||||||
if self.main_status_displayed:
|
if self.main_status_displayed:
|
||||||
for x in self._printer.get_tools():
|
for x in self._printer.get_tools():
|
||||||
self.update_temp(
|
if x in self.buttons['extruder']:
|
||||||
x,
|
|
||||||
self._printer.get_dev_stat(x, "temperature"),
|
|
||||||
self._printer.get_dev_stat(x, "target"),
|
|
||||||
self._printer.get_dev_stat(x, "power"),
|
|
||||||
)
|
|
||||||
self.extruder_button[x].set_label(self.labels[x].get_text())
|
|
||||||
for x in self._printer.get_heaters():
|
|
||||||
if x in self.labels:
|
|
||||||
self.update_temp(
|
self.update_temp(
|
||||||
x,
|
x,
|
||||||
self._printer.get_dev_stat(x, "temperature"),
|
self._printer.get_dev_stat(x, "temperature"),
|
||||||
self._printer.get_dev_stat(x, "target"),
|
self._printer.get_dev_stat(x, "target"),
|
||||||
self._printer.get_dev_stat(x, "power"),
|
self._printer.get_dev_stat(x, "power"),
|
||||||
)
|
)
|
||||||
self.heater_button[x].set_label(self.labels[x].get_text())
|
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())
|
||||||
|
|
||||||
self.update_message()
|
self.update_message()
|
||||||
|
|
||||||
@ -549,76 +537,50 @@ class JobStatusPanel(ScreenPanel):
|
|||||||
self.labels['temp_grid'].remove_column(0)
|
self.labels['temp_grid'].remove_column(0)
|
||||||
self.labels['temp_grid'].insert_column(0)
|
self.labels['temp_grid'].insert_column(0)
|
||||||
self.current_extruder = data["toolhead"]["extruder"]
|
self.current_extruder = data["toolhead"]["extruder"]
|
||||||
self.labels['temp_grid'].attach(self.extruder_button[self.current_extruder], 0, 0, 1, 1)
|
self.labels['temp_grid'].attach(self.buttons['extruder'][self.current_extruder], 0, 0, 1, 1)
|
||||||
self._screen.show_all()
|
self._screen.show_all()
|
||||||
with contextlib.suppress(KeyError):
|
with contextlib.suppress(KeyError):
|
||||||
self.labels['max_accel'].set_text(f"{data['toolhead']['max_accel']:.0f} mm/s²")
|
self.labels['max_accel'].set_label(f"{data['toolhead']['max_accel']:.0f} mm/s²")
|
||||||
with contextlib.suppress(KeyError):
|
with contextlib.suppress(KeyError):
|
||||||
self.labels['advance'].set_text(f"{data['extruder']['pressure_advance']:.2f}")
|
self.labels['advance'].set_label(f"{data['extruder']['pressure_advance']:.2f}")
|
||||||
|
|
||||||
if "gcode_move" in data:
|
if "gcode_move" in data:
|
||||||
with contextlib.suppress(KeyError):
|
with contextlib.suppress(KeyError):
|
||||||
self.labels['pos_x'].set_text(f"X: {data['gcode_move']['gcode_position'][0]:6.2f}")
|
self.labels['pos_x'].set_label(f"X: {data['gcode_move']['gcode_position'][0]:6.2f}")
|
||||||
self.labels['pos_y'].set_text(f"Y: {data['gcode_move']['gcode_position'][1]:6.2f}")
|
self.labels['pos_y'].set_label(f"Y: {data['gcode_move']['gcode_position'][1]:6.2f}")
|
||||||
self.labels['pos_z'].set_text(f"Z: {data['gcode_move']['gcode_position'][2]:6.2f}")
|
self.labels['pos_z'].set_label(f"Z: {data['gcode_move']['gcode_position'][2]:6.2f}")
|
||||||
self.pos_z = data["gcode_move"]["gcode_position"][2]
|
self.pos_z = data["gcode_move"]["gcode_position"][2]
|
||||||
if self.main_status_displayed:
|
if self.main_status_displayed:
|
||||||
self.z_button.set_label(self.labels['pos_z'].get_text())
|
self.buttons['z'].set_label(self.labels['pos_z'].get_text())
|
||||||
now = time.time()
|
|
||||||
pos = data["gcode_move"]["gcode_position"]
|
|
||||||
if self.prev_gpos is not None:
|
|
||||||
interval = now - self.prev_gpos[1]
|
|
||||||
# Calculate Velocity
|
|
||||||
vel = sqrt(sum([
|
|
||||||
(pos[0] - self.prev_gpos[0][0]) ** 2,
|
|
||||||
(pos[1] - self.prev_gpos[0][1]) ** 2,
|
|
||||||
(pos[2] - self.prev_gpos[0][2]) ** 2]
|
|
||||||
)) / interval
|
|
||||||
self.velstore.append(vel)
|
|
||||||
self.prev_gpos = [pos, now]
|
|
||||||
with contextlib.suppress(KeyError):
|
with contextlib.suppress(KeyError):
|
||||||
self.extrusion = int(round(data["gcode_move"]["extrude_factor"] * 100))
|
self.extrusion = round(float(data["gcode_move"]["extrude_factor"]) * 100)
|
||||||
self.labels['extrude_factor'].set_text(f"{self.extrusion:3}%")
|
self.labels['extrude_factor'].set_label(f"{self.extrusion:3}%")
|
||||||
if self.main_status_displayed:
|
|
||||||
self.extrusion_button.set_label(f"{self.extrusion:3}%")
|
|
||||||
with contextlib.suppress(KeyError):
|
with contextlib.suppress(KeyError):
|
||||||
self.speed = int(round(data["gcode_move"]["speed_factor"] * 100))
|
self.speed = round(float(data["gcode_move"]["speed_factor"]) * 100)
|
||||||
self.speed_factor = float(data["gcode_move"]["speed_factor"])
|
self.speed_factor = float(data["gcode_move"]["speed_factor"])
|
||||||
self.labels['speed_factor'].set_text(f"{self.speed:3}%")
|
self.labels['speed_factor'].set_label(f"{self.speed:3}%")
|
||||||
with contextlib.suppress(KeyError):
|
with contextlib.suppress(KeyError):
|
||||||
self.req_speed = int(round(data["gcode_move"]["speed"] / 60 * self.speed_factor))
|
self.req_speed = round(float(data["gcode_move"]["speed"]) / 60 * self.speed_factor)
|
||||||
|
if self.main_status_displayed:
|
||||||
|
self.buttons['speed'].set_label(f"{self.speed}% {self.vel:.0f}/{self.req_speed:.0f} mm/s")
|
||||||
with contextlib.suppress(KeyError):
|
with contextlib.suppress(KeyError):
|
||||||
self.zoffset = data["gcode_move"]["homing_origin"][2]
|
self.zoffset = data["gcode_move"]["homing_origin"][2]
|
||||||
self.labels['zoffset'].set_text(f"{self.zoffset:.2f}")
|
self.labels['zoffset'].set_label(f"{self.zoffset:.2f}")
|
||||||
if "motion_report" in data:
|
if "motion_report" in data:
|
||||||
with contextlib.suppress(KeyError):
|
with contextlib.suppress(KeyError):
|
||||||
pos = data["motion_report"]["live_position"]
|
self.vel = float(data["motion_report"]["live_velocity"])
|
||||||
now = time.time()
|
self.labels['req_speed'].set_label(f"{self.speed}% {self.vel:.0f}/{self.req_speed:.0f} mm/s")
|
||||||
if self.prev_pos is not None:
|
if self.main_status_displayed:
|
||||||
interval = (now - self.prev_pos[1])
|
self.buttons['speed'].set_label(f"{self.speed}% {self.vel:.0f}/{self.req_speed:.0f} mm/s")
|
||||||
# Calculate Flowrate
|
|
||||||
evelocity = (pos[3] - self.prev_pos[0][3]) / interval
|
|
||||||
self.flowstore.append(self.fila_section * evelocity)
|
|
||||||
# Calculate Velocity
|
|
||||||
vel = sqrt(sum([
|
|
||||||
(pos[0] - self.prev_pos[0][0]) ** 2,
|
|
||||||
(pos[1] - self.prev_pos[0][1]) ** 2,
|
|
||||||
(pos[2] - self.prev_pos[0][2]) ** 2]
|
|
||||||
)) / interval
|
|
||||||
self.velstore.append(vel)
|
|
||||||
self.prev_pos = [pos, now]
|
|
||||||
with contextlib.suppress(KeyError):
|
|
||||||
self.velstore.append(float(data["motion_report"]["live_velocity"]))
|
|
||||||
with contextlib.suppress(KeyError):
|
with contextlib.suppress(KeyError):
|
||||||
self.flowstore.append(self.fila_section * float(data["motion_report"]["live_extruder_velocity"]))
|
self.flowstore.append(self.fila_section * float(data["motion_report"]["live_extruder_velocity"]))
|
||||||
|
|
||||||
fan_label = ""
|
fan_label = ""
|
||||||
for fan in self.fans:
|
for fan in self.fans:
|
||||||
with contextlib.suppress(KeyError):
|
with contextlib.suppress(KeyError):
|
||||||
self.fans[fan]['speed'] = f"{self._screen.printer.get_fan_speed(fan) * 100:3.0f}%"
|
self.fans[fan]['speed'] = f"{self._screen.printer.get_fan_speed(fan) * 100:3.0f}%"
|
||||||
fan_label += f" {self.fans[fan]['name']}{self.fans[fan]['speed']}"
|
fan_label += f" {self.fans[fan]['name']}{self.fans[fan]['speed']}"
|
||||||
if fan_label:
|
if fan_label:
|
||||||
self.labels['fan'].set_text(fan_label[:12])
|
self.labels['fan'].set_label(fan_label[:12])
|
||||||
|
|
||||||
self.state_check()
|
self.state_check()
|
||||||
if self.state not in ["printing", "paused"]:
|
if self.state not in ["printing", "paused"]:
|
||||||
@ -645,32 +607,26 @@ class JobStatusPanel(ScreenPanel):
|
|||||||
else:
|
else:
|
||||||
duration = ps['print_duration']
|
duration = ps['print_duration']
|
||||||
if 'filament_used' in ps:
|
if 'filament_used' in ps:
|
||||||
self.labels['filament_used'].set_text(f"{float(ps['filament_used']) / 1000:.1f} m")
|
self.labels['filament_used'].set_label(f"{float(ps['filament_used']) / 1000:.1f} m")
|
||||||
self.update_time_left(duration, ps['filament_used'])
|
self.update_time_left(duration, ps['filament_used'])
|
||||||
else:
|
else:
|
||||||
self.update_time_left(duration)
|
self.update_time_left(duration)
|
||||||
|
|
||||||
if self.main_status_displayed:
|
if self.main_status_displayed:
|
||||||
self.fan_button.set_label(self.labels['fan'].get_text())
|
self.buttons['fan'].set_label(self.labels['fan'].get_text())
|
||||||
elapsed_label = f"{self.labels['elapsed'].get_text()} {self.labels['duration'].get_text()}"
|
elapsed_label = f"{self.labels['elapsed'].get_text()} {self.labels['duration'].get_text()}"
|
||||||
self.elapsed_button.set_label(elapsed_label)
|
self.buttons['elapsed'].set_label(elapsed_label)
|
||||||
remaining_label = f"{self.labels['left'].get_text()} {self.labels['time_left'].get_text()}"
|
remaining_label = f"{self.labels['left'].get_text()} {self.labels['time_left'].get_text()}"
|
||||||
self.left_button.set_label(remaining_label)
|
self.buttons['left'].set_label(remaining_label)
|
||||||
|
|
||||||
def update_velocity(self):
|
def update_flow(self):
|
||||||
if not self.velstore:
|
|
||||||
self.velstore.append(0)
|
|
||||||
if not self.flowstore:
|
if not self.flowstore:
|
||||||
self.flowstore.append(0)
|
self.flowstore.append(0)
|
||||||
self.flowrate = median(self.flowstore)
|
self.flowrate = median(self.flowstore)
|
||||||
self.vel = median(self.velstore)
|
|
||||||
self.velstore = []
|
|
||||||
self.flowstore = []
|
self.flowstore = []
|
||||||
self.labels['flowrate'].set_label(f"{self.flowrate:.1f} mm³/s")
|
self.labels['flowrate'].set_label(f"{self.flowrate:.1f} mm³/s")
|
||||||
self.labels['req_speed'].set_text(f"{self.vel:.0f}/{self.req_speed:.0f} mm/s")
|
|
||||||
if self.main_status_displayed:
|
if self.main_status_displayed:
|
||||||
self.speed_button.set_label(f"{self.speed:3.0f}% {self.vel:5.0f} mm/s")
|
self.buttons['extrusion'].set_label(f"{self.extrusion:3}% {self.flowrate:5.1f} mm³/s")
|
||||||
self.extrusion_button.set_label(f"{self.extrusion:3}% {self.flowrate:5.1f} mm³/s")
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def update_time_left(self, duration=0, fila_used=0):
|
def update_time_left(self, duration=0, fila_used=0):
|
||||||
@ -685,16 +641,16 @@ class JobStatusPanel(ScreenPanel):
|
|||||||
# speed_factor compensation based on empirical testing
|
# speed_factor compensation based on empirical testing
|
||||||
spdcomp = sqrt(self.speed_factor)
|
spdcomp = sqrt(self.speed_factor)
|
||||||
slicer_time = (self.file_metadata['estimated_time'] * usrcomp) / spdcomp
|
slicer_time = (self.file_metadata['estimated_time'] * usrcomp) / spdcomp
|
||||||
self.update_text("slicer_time", self.format_time(slicer_time))
|
self.labels["slicer_time"].set_label(self.format_time(slicer_time))
|
||||||
|
|
||||||
with contextlib.suppress(Exception):
|
with contextlib.suppress(Exception):
|
||||||
if self.file_metadata['filament_total'] > fila_used:
|
if self.file_metadata['filament_total'] > fila_used:
|
||||||
filament_time = duration / (fila_used / self.file_metadata['filament_total'])
|
filament_time = duration / (fila_used / self.file_metadata['filament_total'])
|
||||||
self.update_text("filament_time", self.format_time(filament_time))
|
self.labels["filament_time"].set_label(self.format_time(filament_time))
|
||||||
|
|
||||||
with contextlib.suppress(ZeroDivisionError):
|
with contextlib.suppress(ZeroDivisionError):
|
||||||
file_time = duration / self.progress
|
file_time = duration / self.progress
|
||||||
self.update_text("file_time", self.format_time(file_time))
|
self.labels["file_time"].set_label(self.format_time(file_time))
|
||||||
|
|
||||||
if timeleft_type == "file":
|
if timeleft_type == "file":
|
||||||
total_duration = file_time
|
total_duration = file_time
|
||||||
@ -714,10 +670,10 @@ class JobStatusPanel(ScreenPanel):
|
|||||||
total_duration = (filament_time + file_time) / 2
|
total_duration = (filament_time + file_time) / 2
|
||||||
else:
|
else:
|
||||||
total_duration = file_time
|
total_duration = file_time
|
||||||
self.update_text("duration", self.format_time(duration))
|
self.labels["duration"].set_label(self.format_time(duration))
|
||||||
self.update_text("est_time", self.format_time(total_duration))
|
self.labels["est_time"].set_label(self.format_time(total_duration))
|
||||||
if total_duration is not None:
|
if total_duration is not None:
|
||||||
self.update_text("time_left", self.format_time(total_duration - duration))
|
self.labels["time_left"].set_label(self.format_time(total_duration - duration))
|
||||||
|
|
||||||
def state_check(self):
|
def state_check(self):
|
||||||
ps = self._printer.get_stat("print_stats")
|
ps = self._printer.get_stat("print_stats")
|
||||||
@ -734,42 +690,39 @@ class JobStatusPanel(ScreenPanel):
|
|||||||
self.progress = 1
|
self.progress = 1
|
||||||
self.update_progress()
|
self.update_progress()
|
||||||
self.set_state("complete")
|
self.set_state("complete")
|
||||||
return self._add_timeout("job_complete_timeout")
|
return self._add_timeout(self._config.get_main_config().getint("job_complete_timeout", 0))
|
||||||
elif ps['state'] == "error":
|
elif ps['state'] == "error":
|
||||||
self.set_state("error")
|
self.set_state("error")
|
||||||
self.labels['status'].set_text(_("Error"))
|
self.labels['status'].set_label(_("Error"))
|
||||||
self._screen.show_popup_message(ps['message'])
|
self._screen.show_popup_message(ps['message'])
|
||||||
return self._add_timeout("job_error_timeout")
|
return self._add_timeout(self._config.get_main_config().getint("job_error_timeout", 0))
|
||||||
elif ps['state'] == "cancelled":
|
elif ps['state'] == "cancelled":
|
||||||
self.set_state("cancelled")
|
self.set_state("cancelled")
|
||||||
return self._add_timeout("job_cancelled_timeout")
|
return self._add_timeout(self._config.get_main_config().getint("job_cancelled_timeout", 0))
|
||||||
elif ps['state'] == "paused":
|
elif ps['state'] == "paused":
|
||||||
self.set_state("paused")
|
self.set_state("paused")
|
||||||
elif ps['state'] == "standby":
|
elif ps['state'] == "standby":
|
||||||
self.set_state("standby")
|
self.set_state("standby")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _add_timeout(self, job_timeout):
|
def _add_timeout(self, timeout):
|
||||||
self._screen.close_screensaver()
|
self._screen.close_screensaver()
|
||||||
self.remove_close_timeout()
|
|
||||||
timeout = self._config.get_main_config().getint(job_timeout, 0)
|
|
||||||
if timeout != 0:
|
if timeout != 0:
|
||||||
self.close_timeout = GLib.timeout_add_seconds(timeout, self.close_panel)
|
GLib.timeout_add_seconds(timeout, self.close_panel)
|
||||||
return False
|
|
||||||
|
|
||||||
def set_state(self, state):
|
def set_state(self, state):
|
||||||
if self.state != state:
|
if self.state != state:
|
||||||
logging.debug(f"Changing job_status state from '{self.state}' to '{state}'")
|
logging.debug(f"Changing job_status state from '{self.state}' to '{state}'")
|
||||||
if state == "paused":
|
if state == "paused":
|
||||||
self.update_text("status", _("Paused"))
|
self.labels["status"].set_label(_("Paused"))
|
||||||
elif state == "printing":
|
elif state == "printing":
|
||||||
self.update_text("status", _("Printing"))
|
self.labels["status"].set_label(_("Printing"))
|
||||||
elif state == "cancelling":
|
elif state == "cancelling":
|
||||||
self.update_text("status", _("Cancelling"))
|
self.labels["status"].set_label(_("Cancelling"))
|
||||||
elif state == "cancelled" or (state == "standby" and self.state == "cancelling"):
|
elif state == "cancelled" or (state == "standby" and self.state == "cancelling"):
|
||||||
self.update_text("status", _("Cancelled"))
|
self.labels["status"].set_label(_("Cancelled"))
|
||||||
elif state == "complete":
|
elif state == "complete":
|
||||||
self.update_text("status", _("Complete"))
|
self.labels["status"].set_label(_("Complete"))
|
||||||
self.state = state
|
self.state = state
|
||||||
self.show_buttons_for_state()
|
self.show_buttons_for_state()
|
||||||
|
|
||||||
@ -782,12 +735,14 @@ class JobStatusPanel(ScreenPanel):
|
|||||||
self.buttons['button_grid'].attach(self.buttons['fine_tune'], 2, 0, 1, 1)
|
self.buttons['button_grid'].attach(self.buttons['fine_tune'], 2, 0, 1, 1)
|
||||||
self.buttons['button_grid'].attach(self.buttons['control'], 3, 0, 1, 1)
|
self.buttons['button_grid'].attach(self.buttons['control'], 3, 0, 1, 1)
|
||||||
self.enable_button("pause", "cancel")
|
self.enable_button("pause", "cancel")
|
||||||
|
self.can_close = False
|
||||||
elif self.state == "paused":
|
elif self.state == "paused":
|
||||||
self.buttons['button_grid'].attach(self.buttons['resume'], 0, 0, 1, 1)
|
self.buttons['button_grid'].attach(self.buttons['resume'], 0, 0, 1, 1)
|
||||||
self.buttons['button_grid'].attach(self.buttons['cancel'], 1, 0, 1, 1)
|
self.buttons['button_grid'].attach(self.buttons['cancel'], 1, 0, 1, 1)
|
||||||
self.buttons['button_grid'].attach(self.buttons['fine_tune'], 2, 0, 1, 1)
|
self.buttons['button_grid'].attach(self.buttons['fine_tune'], 2, 0, 1, 1)
|
||||||
self.buttons['button_grid'].attach(self.buttons['control'], 3, 0, 1, 1)
|
self.buttons['button_grid'].attach(self.buttons['control'], 3, 0, 1, 1)
|
||||||
self.enable_button("resume", "cancel")
|
self.enable_button("resume", "cancel")
|
||||||
|
self.can_close = False
|
||||||
else:
|
else:
|
||||||
offset = self._screen.printer.get_stat("gcode_move", "homing_origin")
|
offset = self._screen.printer.get_stat("gcode_move", "homing_origin")
|
||||||
self.zoffset = float(offset[2]) if offset else 0
|
self.zoffset = float(offset[2]) if offset else 0
|
||||||
@ -810,6 +765,7 @@ class JobStatusPanel(ScreenPanel):
|
|||||||
self.buttons['button_grid'].attach(self.buttons['restart'], 2, 0, 1, 1)
|
self.buttons['button_grid'].attach(self.buttons['restart'], 2, 0, 1, 1)
|
||||||
if self.state != "cancelling":
|
if self.state != "cancelling":
|
||||||
self.buttons['button_grid'].attach(self.buttons['menu'], 3, 0, 1, 1)
|
self.buttons['button_grid'].attach(self.buttons['menu'], 3, 0, 1, 1)
|
||||||
|
self.can_close = True
|
||||||
self.show_all()
|
self.show_all()
|
||||||
|
|
||||||
def show_file_thumbnail(self):
|
def show_file_thumbnail(self):
|
||||||
@ -826,7 +782,7 @@ class JobStatusPanel(ScreenPanel):
|
|||||||
|
|
||||||
def update_filename(self):
|
def update_filename(self):
|
||||||
self.filename = self._printer.get_stat('print_stats', 'filename')
|
self.filename = self._printer.get_stat('print_stats', 'filename')
|
||||||
self.update_text("file", os.path.splitext(self.filename)[0])
|
self.labels["file"].set_label(os.path.splitext(self.filename)[0])
|
||||||
self.filename_label = {
|
self.filename_label = {
|
||||||
"complete": self.labels['file'].get_label(),
|
"complete": self.labels['file'].get_label(),
|
||||||
"current": self.labels['file'].get_label(),
|
"current": self.labels['file'].get_label(),
|
||||||
@ -854,7 +810,7 @@ class JobStatusPanel(ScreenPanel):
|
|||||||
self.file_metadata = self._files.get_file_info(self.filename)
|
self.file_metadata = self._files.get_file_info(self.filename)
|
||||||
logging.info(f"Update Metadata. File: {self.filename} Size: {self.file_metadata['size']}")
|
logging.info(f"Update Metadata. File: {self.filename} Size: {self.file_metadata['size']}")
|
||||||
if "estimated_time" in self.file_metadata and self.timeleft_type == "slicer":
|
if "estimated_time" in self.file_metadata and self.timeleft_type == "slicer":
|
||||||
self.update_text("est_time", self.format_time(self.file_metadata['estimated_time']))
|
self.labels["est_time"].set_label(self.format_time(self.file_metadata['estimated_time']))
|
||||||
self.show_file_thumbnail()
|
self.show_file_thumbnail()
|
||||||
if "object_height" in self.file_metadata:
|
if "object_height" in self.file_metadata:
|
||||||
self.oheight = float(self.file_metadata['object_height'])
|
self.oheight = float(self.file_metadata['object_height'])
|
||||||
@ -867,7 +823,7 @@ class JobStatusPanel(ScreenPanel):
|
|||||||
self.f_layer_h = self.layer_h
|
self.f_layer_h = self.layer_h
|
||||||
self.labels['total_layers'].set_label(f"{((self.oheight - self.f_layer_h) / self.layer_h) + 1:.0f}")
|
self.labels['total_layers'].set_label(f"{((self.oheight - self.f_layer_h) / self.layer_h) + 1:.0f}")
|
||||||
if "filament_total" in self.file_metadata:
|
if "filament_total" in self.file_metadata:
|
||||||
self.labels['filament_total'].set_text(f"{float(self.file_metadata['filament_total']) / 1000:.1f} m")
|
self.labels['filament_total'].set_label(f"{float(self.file_metadata['filament_total']) / 1000:.1f} m")
|
||||||
else:
|
else:
|
||||||
self.file_metadata = {}
|
self.file_metadata = {}
|
||||||
logging.debug("Cannot find file metadata. Listening for updated metadata")
|
logging.debug("Cannot find file metadata. Listening for updated metadata")
|
||||||
@ -889,15 +845,11 @@ class JobStatusPanel(ScreenPanel):
|
|||||||
self.labels['darea'].queue_draw()
|
self.labels['darea'].queue_draw()
|
||||||
self.update_progress()
|
self.update_progress()
|
||||||
|
|
||||||
def update_text(self, label, text):
|
|
||||||
if label in self.labels:
|
|
||||||
self.labels[label].set_text(text)
|
|
||||||
|
|
||||||
def update_progress(self):
|
def update_progress(self):
|
||||||
self.labels['progress_text'].set_text(f"{self.progress * 100:.0f}%")
|
self.labels['progress_text'].set_label(f"{self.progress * 100:.0f}%")
|
||||||
|
|
||||||
def update_message(self):
|
def update_message(self):
|
||||||
msg = self._printer.get_stat("display_status", "message")
|
msg = self._printer.get_stat("display_status", "message")
|
||||||
if msg is None:
|
if msg is None:
|
||||||
msg = " "
|
msg = " "
|
||||||
self.labels['lcdmessage'].set_text(f"{msg}")
|
self.labels['lcdmessage'].set_label(f"{msg}")
|
||||||
|
@ -741,8 +741,10 @@ class KlipperScreen(Gtk.Window):
|
|||||||
script
|
script
|
||||||
)
|
)
|
||||||
self.base_panel.process_update(action, data)
|
self.base_panel.process_update(action, data)
|
||||||
if self._cur_panels and self._cur_panels[-1] in self.subscriptions:
|
for x in self.subscriptions:
|
||||||
self.panels[self._cur_panels[-1]].process_update(action, data)
|
self.panels[x].process_update(action, data)
|
||||||
|
if "job_status" in self._cur_panels:
|
||||||
|
self.panels["job_status"].process_update(action, data)
|
||||||
|
|
||||||
def _confirm_send_action(self, widget, text, method, params=None):
|
def _confirm_send_action(self, widget, text, method, params=None):
|
||||||
buttons = [
|
buttons = [
|
||||||
|
Loading…
x
Reference in New Issue
Block a user