From 347e821d39e650209044e8077c3dac9ab45a22d6 Mon Sep 17 00:00:00 2001 From: Alfredo Monclus Date: Sun, 16 Feb 2025 14:00:11 -0300 Subject: [PATCH] feat: add save z to save dialog (#1545) --- config/main_menu.conf | 7 +------ panels/menu.py | 2 ++ screen.py | 47 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 6 deletions(-) diff --git a/config/main_menu.conf b/config/main_menu.conf index fbc4928e..b1330207 100644 --- a/config/main_menu.conf +++ b/config/main_menu.conf @@ -115,12 +115,7 @@ enable: {{ 'input_shaper' in printer.config_sections }} [menu __main more save] name: {{ gettext('Save Config') }} icon: complete -method: printer.gcode.script -params: {"script":"SAVE_CONFIG"} -confirm: - {{ gettext('Save configuration?') }} - - {{ gettext('Klipper will reboot') }} +method: ks_confirm_save [menu __main more settings] name: KlipperScreen diff --git a/panels/menu.py b/panels/menu.py index 97761849..8ba654da 100644 --- a/panels/menu.py +++ b/panels/menu.py @@ -67,6 +67,8 @@ class Panel(ScreenPanel): if item['panel']: b.connect("clicked", self.menu_item_clicked, item) + elif item['method'] == "ks_confirm_save": + b.connect("clicked", self._screen.confirm_save) elif item['method']: params = {} diff --git a/screen.py b/screen.py index 120970d0..8280ff66 100755 --- a/screen.py +++ b/screen.py @@ -901,6 +901,53 @@ class KlipperScreen(Gtk.Window): if self._cur_panels and hasattr(self.panels[self._cur_panels[-1]], "process_update"): self.panels[self._cur_panels[-1]].process_update(*args) + def confirm_save(self, widget): + buttons = [ + {"name": _("Save"), "response": Gtk.ResponseType.OK, "style": 'dialog-info'}, + {"name": _("Cancel"), "response": Gtk.ResponseType.CANCEL, "style": 'dialog-error'} + ] + label = Gtk.Label(label=_("Save configuration?") + "\n\n" + _("Klipper will reboot"), + hexpand=True, vexpand=True, + halign=Gtk.Align.CENTER, valign=Gtk.Align.CENTER, + wrap=True, wrap_mode=Pango.WrapMode.WORD_CHAR) + grid = Gtk.Grid() + grid.attach(label, 0, 3, 2, 1) + offset = self.printer.get_stat("gcode_move", "homing_origin") + zoffset = float(offset[2]) if offset else 0 + if zoffset != 0: + sign = "+" if zoffset > 0 else "-" + msg = f"Apply {sign}{abs(zoffset)} offset?" + zlabel = Gtk.Label(label=msg, hexpand=True, vexpand=True, wrap=True) + grid.attach(zlabel, 0, 1, 2, 1) + if "Z_OFFSET_APPLY_PROBE" in self.printer.available_commands: + apply_probe = self.gtk.Button(label=_("Save Z") + "\n" + "Probe", style="color1") + apply_probe.set_vexpand(False) + apply_probe.set_size_request(-1, self.gtk.dialog_buttons_height) + apply_probe.connect("clicked", self.save, "Z_OFFSET_APPLY_PROBE") + grid.attach(apply_probe, 0, 2, 1, 1) + if "Z_OFFSET_APPLY_ENDSTOP" in self.printer.available_commands: + apply_end = self.gtk.Button(label=_("Save Z") + "\n" + "Endstop", style="color2") + apply_end.set_vexpand(False) + apply_end.set_size_request(-1, self.gtk.dialog_buttons_height) + apply_end.connect("clicked", self.save, "Z_OFFSET_APPLY_ENDSTOP") + grid.attach(apply_end, 1, 2, 1, 1) + if self.confirm is not None: + self.gtk.remove_dialog(self.confirm) + self.confirm = self.gtk.Dialog( + "KlipperScreen", buttons, grid, self.save + ) + + def save(self, dialog, response_id): + self.gtk.remove_dialog(dialog) + if response_id == Gtk.ResponseType.OK: + self._ws.klippy.gcode_script("SAVE_CONFIG") + if response_id == "Z_OFFSET_APPLY_PROBE": + self._ws.klippy.gcode_script("Z_OFFSET_APPLY_PROBE") + self._ws.klippy.gcode_script("SAVE_CONFIG") + if response_id == "Z_OFFSET_APPLY_ENDSTOP": + self._ws.klippy.gcode_script("Z_OFFSET_APPLY_ENDSTOP") + self._ws.klippy.gcode_script("SAVE_CONFIG") + def _confirm_send_action(self, widget, text, method, params=None): buttons = [ {"name": _("Accept"), "response": Gtk.ResponseType.OK, "style": 'dialog-info'},