create the shutdown panel, add it to the action bar, remove items from system panel
shutdown maintain estop during printing add option to shudown both host and printer close #1207 simplify host and printer dialog if ks is local, do both
This commit is contained in:
parent
ee501f2594
commit
68c4025902
@ -43,6 +43,7 @@ class ScreenPanel:
|
|||||||
"printer.emergency_stop")
|
"printer.emergency_stop")
|
||||||
else:
|
else:
|
||||||
self._screen._ws.klippy.emergency_stop()
|
self._screen._ws.klippy.emergency_stop()
|
||||||
|
self._screen._ws.klippy.emergency_stop()
|
||||||
|
|
||||||
def get_file_image(self, filename, width=None, height=None, small=False):
|
def get_file_image(self, filename, width=None, height=None, small=False):
|
||||||
if not self._files.has_thumbnail(filename):
|
if not self._files.has_thumbnail(filename):
|
||||||
|
@ -27,10 +27,19 @@ class BasePanel(ScreenPanel):
|
|||||||
self.control['back'].connect("clicked", self.back)
|
self.control['back'].connect("clicked", self.back)
|
||||||
self.control['home'] = self._gtk.Button('main', scale=abscale)
|
self.control['home'] = self._gtk.Button('main', scale=abscale)
|
||||||
self.control['home'].connect("clicked", self._screen._menu_go_back, True)
|
self.control['home'].connect("clicked", self._screen._menu_go_back, True)
|
||||||
self.control['estop'] = self._gtk.Button('emergency', scale=abscale)
|
|
||||||
self.control['estop'].connect("clicked", self.emergency_stop)
|
|
||||||
for control in self.control:
|
for control in self.control:
|
||||||
self.set_control_sensitive(False, control)
|
self.set_control_sensitive(False, control)
|
||||||
|
self.control['estop'] = self._gtk.Button('emergency', scale=abscale)
|
||||||
|
self.control['estop'].connect("clicked", self.emergency_stop)
|
||||||
|
self.control['estop'].set_no_show_all(True)
|
||||||
|
self.shutdown = {
|
||||||
|
"name": None,
|
||||||
|
"panel": "shutdown",
|
||||||
|
"icon": "shutdown",
|
||||||
|
}
|
||||||
|
self.control['shutdown'] = self._gtk.Button('shutdown', scale=abscale)
|
||||||
|
self.control['shutdown'].connect("clicked", self.menu_item_clicked, self.shutdown)
|
||||||
|
self.control['shutdown'].set_no_show_all(True)
|
||||||
self.control['printer_select'] = self._gtk.Button('shuffle', scale=abscale)
|
self.control['printer_select'] = self._gtk.Button('shuffle', scale=abscale)
|
||||||
self.control['printer_select'].connect("clicked", self._screen.show_printer_select)
|
self.control['printer_select'].connect("clicked", self._screen.show_printer_select)
|
||||||
self.control['printer_select'].set_no_show_all(True)
|
self.control['printer_select'].set_no_show_all(True)
|
||||||
@ -63,6 +72,7 @@ class BasePanel(ScreenPanel):
|
|||||||
self.action_bar.add(self.control['printer_select'])
|
self.action_bar.add(self.control['printer_select'])
|
||||||
self.action_bar.add(self.control['shortcut'])
|
self.action_bar.add(self.control['shortcut'])
|
||||||
self.action_bar.add(self.control['estop'])
|
self.action_bar.add(self.control['estop'])
|
||||||
|
self.action_bar.add(self.control['shutdown'])
|
||||||
self.show_printer_select(len(self._config.get_printers()) > 1)
|
self.show_printer_select(len(self._config.get_printers()) > 1)
|
||||||
|
|
||||||
# Titlebar
|
# Titlebar
|
||||||
@ -174,10 +184,12 @@ class BasePanel(ScreenPanel):
|
|||||||
self.time_update = GLib.timeout_add_seconds(1, self.update_time)
|
self.time_update = GLib.timeout_add_seconds(1, self.update_time)
|
||||||
|
|
||||||
def add_content(self, panel):
|
def add_content(self, panel):
|
||||||
show = self._printer is not None and self._printer.state not in ('disconnected', 'startup', 'shutdown', 'error')
|
printing = self._printer and self._printer.state in {"printing", "paused"}
|
||||||
self.show_shortcut(show)
|
connected = self._printer and self._printer.state not in {'disconnected', 'startup', 'shutdown', 'error'}
|
||||||
self.show_heaters(show)
|
self.control['estop'].set_visible(printing)
|
||||||
self.set_control_sensitive(show, control='estop')
|
self.control['shutdown'].set_visible(not printing)
|
||||||
|
self.show_shortcut(connected)
|
||||||
|
self.show_heaters(connected)
|
||||||
for control in ('back', 'home'):
|
for control in ('back', 'home'):
|
||||||
self.set_control_sensitive(len(self._screen._cur_panels) > 1, control=control)
|
self.set_control_sensitive(len(self._screen._cur_panels) > 1, control=control)
|
||||||
self.current_panel = panel
|
self.current_panel = panel
|
||||||
|
70
panels/shutdown.py
Normal file
70
panels/shutdown.py
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import gi
|
||||||
|
|
||||||
|
gi.require_version("Gtk", "3.0")
|
||||||
|
from gi.repository import Gtk
|
||||||
|
from ks_includes.screen_panel import ScreenPanel
|
||||||
|
|
||||||
|
|
||||||
|
class Panel(ScreenPanel):
|
||||||
|
def __init__(self, screen, title):
|
||||||
|
super().__init__(screen, title)
|
||||||
|
|
||||||
|
estop = self._gtk.Button("emergency", _("Emergency Stop"), "color2")
|
||||||
|
estop.connect("clicked", self.emergency_stop)
|
||||||
|
|
||||||
|
poweroff = self._gtk.Button("shutdown", _("Shutdown"), "color1")
|
||||||
|
poweroff.connect("clicked", self.reboot_poweroff, "shutdown")
|
||||||
|
|
||||||
|
restart = self._gtk.Button("refresh", _("Restart"), "color3")
|
||||||
|
restart.connect("clicked", self.reboot_poweroff, "reboot")
|
||||||
|
|
||||||
|
self.main = Gtk.Grid(row_homogeneous=True, column_homogeneous=True)
|
||||||
|
if self._printer and self._printer.state not in {'disconnected', 'startup', 'shutdown', 'error'}:
|
||||||
|
self.main.attach(estop, 0, 0, 2, 1)
|
||||||
|
self.main.attach(poweroff, 0, 1, 1, 1)
|
||||||
|
self.main.attach(restart, 1, 1, 1, 1)
|
||||||
|
self.content.add(self.main)
|
||||||
|
|
||||||
|
def reboot_poweroff(self, widget, method):
|
||||||
|
label = Gtk.Label(wrap=True, hexpand=True, vexpand=True)
|
||||||
|
if method == "reboot":
|
||||||
|
label.set_label(_("Are you sure you wish to reboot the system?"))
|
||||||
|
title = _("Restart")
|
||||||
|
else:
|
||||||
|
label.set_label(_("Are you sure you wish to shutdown the system?"))
|
||||||
|
title = _("Shutdown")
|
||||||
|
buttons = []
|
||||||
|
logging.info(self._screen.apiclient.endpoint)
|
||||||
|
local = {"127.0.0.1", "localhost"}
|
||||||
|
if any(endpoint in self._screen.apiclient.endpoint for endpoint in local):
|
||||||
|
buttons.append({"name": _("Accept"), "response": Gtk.ResponseType.ACCEPT, "style": 'dialog-primary'})
|
||||||
|
else:
|
||||||
|
buttons.extend([
|
||||||
|
{"name": _("Host"), "response": Gtk.ResponseType.OK, "style": 'dialog-info'},
|
||||||
|
{"name": _("Printer"), "response": Gtk.ResponseType.APPLY, "style": 'dialog-warning'},
|
||||||
|
{"name": _("Both"), "response": Gtk.ResponseType.ACCEPT, "style": 'dialog-primary'},
|
||||||
|
])
|
||||||
|
buttons.append({"name": _("Cancel"), "response": Gtk.ResponseType.CANCEL, "style": 'dialog-error'})
|
||||||
|
self._gtk.Dialog(title, buttons, label, self.reboot_poweroff_confirm, method)
|
||||||
|
|
||||||
|
def reboot_poweroff_confirm(self, dialog, response_id, method):
|
||||||
|
self._gtk.remove_dialog(dialog)
|
||||||
|
if response_id == Gtk.ResponseType.ACCEPT:
|
||||||
|
if method == "reboot":
|
||||||
|
self._screen._ws.send_method("machine.reboot")
|
||||||
|
os.system("systemctl reboot -i")
|
||||||
|
else:
|
||||||
|
self._screen._ws.send_method("machine.shutdown")
|
||||||
|
os.system("systemctl poweroff -i")
|
||||||
|
elif response_id == Gtk.ResponseType.OK:
|
||||||
|
if method == "reboot":
|
||||||
|
os.system("systemctl reboot -i")
|
||||||
|
else:
|
||||||
|
os.system("systemctl poweroff -i")
|
||||||
|
elif response_id == Gtk.ResponseType.APPLY:
|
||||||
|
if method == "reboot":
|
||||||
|
self._screen._ws.send_method("machine.reboot")
|
||||||
|
else:
|
||||||
|
self._screen._ws.send_method("machine.shutdown")
|
@ -13,19 +13,16 @@ class Panel(ScreenPanel):
|
|||||||
self.update_status = None
|
self.update_status = None
|
||||||
self.system_info = self._screen.apiclient.send_request("machine/system_info")
|
self.system_info = self._screen.apiclient.send_request("machine/system_info")
|
||||||
|
|
||||||
self.update_all = self._gtk.Button('arrow-up', _('Full Update'), 'color1')
|
self.update_all = self._gtk.Button('arrow-up', _('Full Update'), 'color1', self.bts, Gtk.PositionType.LEFT, 1)
|
||||||
self.update_all.connect("clicked", self.show_update_info, "full")
|
self.update_all.connect("clicked", self.show_update_info, "full")
|
||||||
self.update_all.set_vexpand(False)
|
self.update_all.set_vexpand(False)
|
||||||
self.refresh = self._gtk.Button('arrow-down', _('Refresh'), 'color2')
|
self.refresh = self._gtk.Button('arrow-down', _('Refresh'), 'color3', self.bts, Gtk.PositionType.LEFT, 1)
|
||||||
self.refresh.connect("clicked", self.refresh_updates)
|
self.refresh.connect("clicked", self.refresh_updates)
|
||||||
self.refresh.set_vexpand(False)
|
self.refresh.set_vexpand(False)
|
||||||
|
|
||||||
reboot = self._gtk.Button('refresh', _('Restart'), 'color3')
|
sbox = Gtk.Box(vexpand=False)
|
||||||
reboot.connect("clicked", self.reboot_poweroff, "reboot")
|
sbox.pack_start(self.update_all, True, True, 0)
|
||||||
reboot.set_vexpand(False)
|
sbox.pack_start(self.refresh, True, True, 0)
|
||||||
shutdown = self._gtk.Button('shutdown', _('Shutdown'), 'color4')
|
|
||||||
shutdown.connect("clicked", self.reboot_poweroff, "poweroff")
|
|
||||||
shutdown.set_vexpand(False)
|
|
||||||
|
|
||||||
self.update_msg = Gtk.Label(label=_("Checking for updates, please wait..."), vexpand=True)
|
self.update_msg = Gtk.Label(label=_("Checking for updates, please wait..."), vexpand=True)
|
||||||
|
|
||||||
@ -33,13 +30,11 @@ class Panel(ScreenPanel):
|
|||||||
self.scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
|
self.scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
|
||||||
self.scroll.add(self.update_msg)
|
self.scroll.add(self.update_msg)
|
||||||
|
|
||||||
self.main_grid = Gtk.Grid(column_homogeneous=True)
|
self.main_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, vexpand=True)
|
||||||
self.main_grid.attach(self.scroll, 0, 0, 4, 2)
|
self.main_box.pack_start(sbox, False, False, 0)
|
||||||
self.main_grid.attach(self.update_all, 0, 2, 1, 1)
|
self.main_box.pack_start(self.scroll, True, True, 0)
|
||||||
self.main_grid.attach(self.refresh, 1, 2, 1, 1)
|
|
||||||
self.main_grid.attach(reboot, 2, 2, 1, 1)
|
self.content.add(self.main_box)
|
||||||
self.main_grid.attach(shutdown, 3, 2, 1, 1)
|
|
||||||
self.content.add(self.main_grid)
|
|
||||||
|
|
||||||
def activate(self):
|
def activate(self):
|
||||||
self._screen._ws.send_method('machine.update.status', callback=self.get_updates)
|
self._screen._ws.send_method('machine.update.status', callback=self.get_updates)
|
||||||
@ -56,7 +51,10 @@ class Panel(ScreenPanel):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
if prog in self.system_info['result']['system_info']['available_services']:
|
if prog in self.system_info['result']['system_info']['available_services']:
|
||||||
self.labels[f"{prog}_restart"] = self._gtk.Button("refresh", scale=.7)
|
self.labels[f"{prog}_restart"] = self._gtk.Button("refresh", _("Restart"),
|
||||||
|
"color2",
|
||||||
|
position=Gtk.PositionType.LEFT,
|
||||||
|
scale=self.bts)
|
||||||
self.labels[f"{prog}_restart"].connect("clicked", self.restart, prog)
|
self.labels[f"{prog}_restart"].connect("clicked", self.restart, prog)
|
||||||
infogrid.attach(self.labels[f"{prog}_restart"], 0, i, 1, 1)
|
infogrid.attach(self.labels[f"{prog}_restart"], 0, i, 1, 1)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@ -277,31 +275,3 @@ class Panel(ScreenPanel):
|
|||||||
self.labels[f"{p}_status"].set_label(_("Update"))
|
self.labels[f"{p}_status"].set_label(_("Update"))
|
||||||
self.labels[f"{p}_status"].get_style_context().add_class('update')
|
self.labels[f"{p}_status"].get_style_context().add_class('update')
|
||||||
self.labels[f"{p}_status"].set_sensitive(True)
|
self.labels[f"{p}_status"].set_sensitive(True)
|
||||||
|
|
||||||
def reboot_poweroff(self, widget, method):
|
|
||||||
label = Gtk.Label(wrap=True, hexpand=True, vexpand=True)
|
|
||||||
if method == "reboot":
|
|
||||||
label.set_label(_("Are you sure you wish to reboot the system?"))
|
|
||||||
title = _("Restart")
|
|
||||||
else:
|
|
||||||
label.set_label(_("Are you sure you wish to shutdown the system?"))
|
|
||||||
title = _("Shutdown")
|
|
||||||
buttons = [
|
|
||||||
{"name": _("Host"), "response": Gtk.ResponseType.OK, "style": 'dialog-info'},
|
|
||||||
{"name": _("Printer"), "response": Gtk.ResponseType.APPLY, "style": 'dialog-warning'},
|
|
||||||
{"name": _("Cancel"), "response": Gtk.ResponseType.CANCEL, "style": 'dialog-error'}
|
|
||||||
]
|
|
||||||
self._gtk.Dialog(title, buttons, label, self.reboot_poweroff_confirm, method)
|
|
||||||
|
|
||||||
def reboot_poweroff_confirm(self, dialog, response_id, method):
|
|
||||||
self._gtk.remove_dialog(dialog)
|
|
||||||
if response_id == Gtk.ResponseType.OK:
|
|
||||||
if method == "reboot":
|
|
||||||
os.system("systemctl reboot -i")
|
|
||||||
else:
|
|
||||||
os.system("systemctl poweroff -i")
|
|
||||||
elif response_id == Gtk.ResponseType.APPLY:
|
|
||||||
if method == "reboot":
|
|
||||||
self._screen._ws.send_method("machine.reboot")
|
|
||||||
else:
|
|
||||||
self._screen._ws.send_method("machine.shutdown")
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user