Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
Zeanon committed Feb 20, 2025
2 parents 8dedd97 + e71fe75 commit 1935854
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 15 deletions.
7 changes: 1 addition & 6 deletions config/main_menu.conf
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
16 changes: 12 additions & 4 deletions ks_includes/widgets/heatergraph.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,10 +74,10 @@ def get_max_num(self, data_points=0):
if self.store[device]['show']:
temp = self.printer.get_temp_store(device, "temperatures", data_points)
if isinstance(temp, list):
mnum.append(max(temp))
mnum.append(max([v for v in temp if v is not None]))
target = self.printer.get_temp_store(device, "targets", data_points)
if isinstance(target, list):
mnum.append(max(target))
mnum.append(max([v for v in target if v is not None]))
else:
for device in self.printer.get_temp_devices():
mnum.append(float(self.printer.get_config_section(device)["max_temp"]))
Expand Down Expand Up @@ -135,8 +135,16 @@ def graph_data(ctx: cairoContext, data, gsize, hscale, swidth, rgb, dashed=False
ctx.set_dash([1, 0])
d_len = len(data) - 1

start_x = gsize[1][0]
end_x = gsize[0][0]

for i, d in enumerate(data):
if d is None:
continue

p_x = i * swidth + gsize[0][0] if i != d_len else gsize[1][0] - 1
start_x = min(start_x, p_x)
end_x = max(end_x, p_x)
if dashed: # d between 0 and 1
p_y = gsize[1][1] - (d * (gsize[1][1] - gsize[0][1]))
else:
Expand All @@ -146,8 +154,8 @@ def graph_data(ctx: cairoContext, data, gsize, hscale, swidth, rgb, dashed=False
ctx.line_to(p_x, p_y)
if fill:
ctx.stroke_preserve()
ctx.line_to(gsize[1][0] - 1, gsize[1][1] - 1)
ctx.line_to(gsize[0][0] + 1, gsize[1][1] - 1)
ctx.line_to(end_x - 1, gsize[1][1] - 1)
ctx.line_to(start_x + 1, gsize[1][1] - 1)
ctx.fill()
else:
ctx.stroke()
Expand Down
2 changes: 2 additions & 0 deletions panels/menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ def create_menu_items(self):

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 = {}

Expand Down
56 changes: 52 additions & 4 deletions screen.py
Original file line number Diff line number Diff line change
Expand Up @@ -663,6 +663,8 @@ def set_dpms(self, use_dpms):
if self.check_dpms_timeout is not None:
GLib.source_remove(self.check_dpms_timeout)
self.check_dpms_timeout = None
os.system(f"xset -display {self.display_number} dpms 0 0 0")
os.system(f"xset -display {self.display_number} -dpms")
self.use_dpms = use_dpms
self._config.set("main", "use_dpms", use_dpms)
self._config.save_user_config_options()
Expand All @@ -674,10 +676,6 @@ def set_dpms(self, use_dpms):

def set_dpms_timeout(self):
try:
subprocess.run(
f"xset -display {self.display_number} s off",
shell=True, check=True
)
subprocess.run(
f"xset -display {self.display_number} dpms 0 {self.blanking_time} 0",
shell=True, check=True
Expand All @@ -695,6 +693,9 @@ def set_screenblanking_printing_timeout(self, time):
self.set_screenblanking_timeout(time)

def set_screenblanking_timeout(self, time):
# disable screensaver we have our own
os.system(f"xset -display {self.display_number} s off")
os.system(f"xset -display {self.display_number} s noblank")
if time == "off":
self.blanking_time = 0
else:
Expand Down Expand Up @@ -920,6 +921,53 @@ def process_update(self, *args):
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'},
Expand Down
2 changes: 1 addition & 1 deletion scripts/KlipperScreen-install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ install_graphical_backend()
echo_text ""
echo_text "Choose graphical backend"
echo_ok "Default is Xserver"
echo_text "Wayland is EXPERIMENTAL needs kms/drm drivers doesn't support DPMS and may need autologin"
echo_text "Wayland is EXPERIMENTAL, needs kms/drm drivers, and doesn't support DPMS"
echo_text ""
echo "Press enter for default (Xserver)"
read -r -e -p "Backend Xserver or Wayland (cage)? [X/w]" BACKEND
Expand Down
2 changes: 2 additions & 0 deletions scripts/KlipperScreen.service
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ ExecStart="KS_DIR/scripts/KlipperScreen-start.sh"
# 'who'. This is needed since we replace (a)getty.
UtmpIdentifier=tty7
UtmpMode=user
# Create a PAM session to run pam-systemd, which creates /var/run/$UID
PAMName=%u
# A virtual terminal is needed.
TTYPath=/dev/tty7
TTYReset=yes
Expand Down

0 comments on commit 1935854

Please sign in to comment.