alfrix 68c4025902 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
2024-03-09 12:19:01 -03:00

71 lines
3.1 KiB
Python

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")