parent
d22416f401
commit
52fdb5d5ba
@ -31,52 +31,63 @@ class Panel(ScreenPanel):
|
|||||||
self.add_pin(pin)
|
self.add_pin(pin)
|
||||||
|
|
||||||
def add_pin(self, pin):
|
def add_pin(self, pin):
|
||||||
|
|
||||||
logging.info(f"Adding pin: {pin}")
|
logging.info(f"Adding pin: {pin}")
|
||||||
|
|
||||||
name = Gtk.Label(
|
name = Gtk.Label(
|
||||||
hexpand=True, vexpand=True, halign=Gtk.Align.START, valign=Gtk.Align.CENTER,
|
hexpand=True, vexpand=True, halign=Gtk.Align.START, valign=Gtk.Align.CENTER,
|
||||||
wrap=True, wrap_mode=Pango.WrapMode.WORD_CHAR)
|
wrap=True, wrap_mode=Pango.WrapMode.WORD_CHAR)
|
||||||
name.set_markup(f'\n<big><b>{" ".join(pin.split(" ")[1:])}</b></big>\n')
|
name.set_markup(f'\n<big><b>{" ".join(pin.split(" ")[1:])}</b></big>\n')
|
||||||
scale = Gtk.Scale.new_with_range(Gtk.Orientation.HORIZONTAL, min=0, max=100, step=1)
|
|
||||||
scale.set_value(self.check_pin_value(pin))
|
|
||||||
scale.set_digits(0)
|
|
||||||
scale.set_hexpand(True)
|
|
||||||
scale.set_has_origin(True)
|
|
||||||
scale.get_style_context().add_class("fan_slider")
|
|
||||||
scale.connect("button-release-event", self.set_output_pin, pin)
|
|
||||||
|
|
||||||
min_btn = self._gtk.Button("cancel", None, "color1", 1)
|
self.devices[pin] = {}
|
||||||
min_btn.set_hexpand(False)
|
section = self._printer.get_config_section(pin)
|
||||||
min_btn.connect("clicked", self.update_pin_value, pin, 0)
|
if section.get('pwm') or section.get('hardware_pwm'):
|
||||||
|
scale = Gtk.Scale.new_with_range(Gtk.Orientation.HORIZONTAL, min=0, max=100, step=1)
|
||||||
|
scale.set_value(self.check_pin_value(pin))
|
||||||
|
scale.set_digits(0)
|
||||||
|
scale.set_hexpand(True)
|
||||||
|
scale.set_has_origin(True)
|
||||||
|
scale.get_style_context().add_class("fan_slider")
|
||||||
|
self.devices[pin]['scale'] = scale
|
||||||
|
scale.connect("button-release-event", self.set_output_pin, pin)
|
||||||
|
|
||||||
pin_col = Gtk.Box(spacing=5)
|
min_btn = self._gtk.Button("cancel", None, "color1", 1)
|
||||||
pin_col.add(min_btn)
|
min_btn.set_hexpand(False)
|
||||||
pin_col.add(scale)
|
min_btn.connect("clicked", self.update_pin_value, pin, 0)
|
||||||
|
pin_col = Gtk.Box(spacing=5)
|
||||||
pin_row = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
pin_col.add(min_btn)
|
||||||
pin_row.add(name)
|
pin_col.add(scale)
|
||||||
pin_row.add(pin_col)
|
self.devices[pin]["row"] = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||||||
|
self.devices[pin]["row"].add(name)
|
||||||
self.devices[pin] = {
|
self.devices[pin]["row"].add(pin_col)
|
||||||
"row": pin_row,
|
else:
|
||||||
"scale": scale,
|
self.devices[pin]['switch'] = Gtk.Switch()
|
||||||
}
|
self.devices[pin]['switch'].connect("notify::active", self.set_output_pin, pin)
|
||||||
|
self.devices[pin]["row"] = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
|
||||||
devices = sorted(self.devices)
|
self.devices[pin]["row"].add(name)
|
||||||
pos = devices.index(pin)
|
self.devices[pin]["row"].add(self.devices[pin]['switch'])
|
||||||
|
|
||||||
|
pos = sorted(self.devices).index(pin)
|
||||||
self.labels['devices'].insert_row(pos)
|
self.labels['devices'].insert_row(pos)
|
||||||
self.labels['devices'].attach(self.devices[pin]['row'], 0, pos, 1, 1)
|
self.labels['devices'].attach(self.devices[pin]['row'], 0, pos, 1, 1)
|
||||||
self.labels['devices'].show_all()
|
self.labels['devices'].show_all()
|
||||||
|
|
||||||
def set_output_pin(self, widget, event, pin):
|
def set_output_pin(self, widget, event, pin):
|
||||||
self._screen._ws.klippy.gcode_script(f'SET_PIN PIN={" ".join(pin.split(" ")[1:])} '
|
if isinstance(widget, Gtk.Switch):
|
||||||
f'VALUE={self.devices[pin]["scale"].get_value() / 100}')
|
widget.set_sensitive(False)
|
||||||
# Check the speed in case it wasn't applied
|
if 'scale' in self.devices[pin]:
|
||||||
GLib.timeout_add_seconds(1, self.check_pin_value, pin)
|
value = self.devices[pin]["scale"].get_value() / 100
|
||||||
|
elif 'switch' in self.devices[pin]:
|
||||||
|
value = 1 if self.devices[pin]['switch'].get_active() else 0
|
||||||
|
else:
|
||||||
|
logging.error(f'unknown value for {widget} {event} {pin}')
|
||||||
|
return
|
||||||
|
self._screen._ws.klippy.gcode_script(f'SET_PIN PIN={" ".join(pin.split(" ")[1:])} VALUE={value}')
|
||||||
|
GLib.timeout_add_seconds(1, self.check_pin_value, pin, widget)
|
||||||
|
|
||||||
def check_pin_value(self, pin):
|
def check_pin_value(self, pin, widget):
|
||||||
self.update_pin_value(None, pin, self._printer.get_pin_value(pin))
|
self.update_pin_value(None, pin, self._printer.get_pin_value(pin))
|
||||||
|
if isinstance(widget, Gtk.Switch):
|
||||||
|
widget.set_sensitive(True)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def process_update(self, action, data):
|
def process_update(self, action, data):
|
||||||
@ -90,10 +101,11 @@ class Panel(ScreenPanel):
|
|||||||
def update_pin_value(self, widget, pin, value):
|
def update_pin_value(self, widget, pin, value):
|
||||||
if pin not in self.devices:
|
if pin not in self.devices:
|
||||||
return
|
return
|
||||||
|
if 'scale' in self.devices[pin]:
|
||||||
self.devices[pin]['scale'].disconnect_by_func(self.set_output_pin)
|
self.devices[pin]['scale'].disconnect_by_func(self.set_output_pin)
|
||||||
self.devices[pin]['scale'].set_value(round(float(value) * 100))
|
self.devices[pin]['scale'].set_value(round(float(value) * 100))
|
||||||
self.devices[pin]['scale'].connect("button-release-event", self.set_output_pin, pin)
|
self.devices[pin]['scale'].connect("button-release-event", self.set_output_pin, pin)
|
||||||
|
elif 'switch' in self.devices[pin]:
|
||||||
|
self.devices[pin]['switch'].set_active(value == 1)
|
||||||
if widget is not None:
|
if widget is not None:
|
||||||
self.set_output_pin(None, None, pin)
|
self.set_output_pin(widget, None, pin)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user