CreatBotKlipperScreen/panels/splash_screen.py
alfrix d3281379ee gtk: change scaling of images
This reduces the amount of magic numbers used, some images will scale to bigger sizes, most of the icons and images in vertical mode will be bigger, thumbnails should be bigger in both modes.
2022-10-26 22:36:52 -03:00

145 lines
6.0 KiB
Python

import gi
import logging
import os
gi.require_version("Gtk", "3.0")
from gi.repository import Gdk, Gtk, Pango
from ks_includes.screen_panel import ScreenPanel
def create_panel(*args):
return SplashScreenPanel(*args)
class SplashScreenPanel(ScreenPanel):
box = None
def __init__(self, screen, title, back=True):
super().__init__(screen, title, back)
def initialize(self, panel_name):
image = self._gtk.Image("klipper", self._screen.width / 5, -1)
self.labels['text'] = Gtk.Label(_("Initializing printer..."))
self.labels['text'].set_line_wrap(True)
self.labels['text'].set_line_wrap_mode(Pango.WrapMode.WORD_CHAR)
self.labels['text'].set_halign(Gtk.Align.CENTER)
self.labels['text'].set_valign(Gtk.Align.CENTER)
self.labels['menu'] = self._gtk.ButtonImage("settings", _("Menu"), "color4")
self.labels['menu'].connect("clicked", self._screen._go_to_submenu, "")
self.labels['restart'] = self._gtk.ButtonImage("refresh", _("Klipper Restart"), "color1")
self.labels['restart'].connect("clicked", self.restart)
self.labels['firmware_restart'] = self._gtk.ButtonImage("refresh", _("Firmware Restart"), "color2")
self.labels['firmware_restart'].connect("clicked", self.firmware_restart)
self.labels['restart_system'] = self._gtk.ButtonImage("refresh", _("System Restart"), "color1")
self.labels['restart_system'].connect("clicked", self.restart_system)
self.labels['shutdown'] = self._gtk.ButtonImage("shutdown", _('System Shutdown'), "color2")
self.labels['shutdown'].connect("clicked", self.shutdown)
self.labels['actions'] = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
self.labels['actions'].set_hexpand(True)
self.labels['actions'].set_vexpand(False)
self.labels['actions'].set_halign(Gtk.Align.CENTER)
self.labels['actions'].set_homogeneous(True)
self.labels['actions'].set_size_request(self._screen.base_panel.content.get_allocation().width, 0)
scroll = Gtk.ScrolledWindow()
scroll.set_property("overlay-scrolling", False)
scroll.set_hexpand(True)
scroll.set_vexpand(True)
scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
scroll.add_events(Gdk.EventMask.TOUCH_MASK)
scroll.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
scroll.add(self.labels['text'])
info = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=0)
info.pack_start(image, False, True, 8)
info.pack_end(scroll, True, True, 8)
main = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0)
main.pack_start(info, True, True, 8)
main.pack_end(self.labels['actions'], False, False, 0)
self.show_restart_buttons()
self.content.add(main)
def update_text(self, text):
self.labels['text'].set_markup(f"{text}")
self.show_restart_buttons()
def clear_action_bar(self):
for child in self.labels['actions'].get_children():
self.labels['actions'].remove(child)
def show_restart_buttons(self):
self.clear_action_bar()
printer = self._screen.connected_printer
if printer is not None and not self._screen.shutdown:
printer_cfg = self._config.get_printer_config(printer)
if printer_cfg is not None:
power_devices = printer_cfg.get("power_devices", "")
power_devices = [str(i.strip()) for i in power_devices.split(',')]
logging.info(f"Associated power devices: {power_devices}")
self.add_power_button(self._screen.search_power_devices(power_devices))
if self._screen.printer is not None and self._screen.printer.state != "disconnected":
self.labels['actions'].add(self.labels['restart'])
self.labels['actions'].add(self.labels['firmware_restart'])
else:
self.labels['actions'].add(self.labels['restart_system'])
self.labels['actions'].add(self.labels['shutdown'])
self.labels['actions'].add(self.labels['menu'])
self.labels['actions'].show_all()
def add_power_button(self, powerdevs):
if powerdevs is not None:
self.labels['power'] = self._gtk.ButtonImage("shutdown", _("Power On Printer"), "color3")
self.labels['power'].connect("clicked", self._screen.power_on, powerdevs)
self.check_power_status()
self.labels['actions'].add(self.labels['power'])
def activate(self):
self.check_power_status()
def check_power_status(self):
if 'power' in self.labels:
devices = self._screen.printer.get_power_devices()
if devices is not None:
for device in devices:
if self._screen.printer.get_power_device_status(device) == "off":
self.labels['power'].set_sensitive(True)
break
elif self._screen.printer.get_power_device_status(device) == "on":
self.labels['power'].set_sensitive(False)
def firmware_restart(self, widget):
self._screen._ws.klippy.restart_firmware()
def restart(self, widget):
self._screen._ws.klippy.restart()
def shutdown(self, widget):
if self._screen._ws.is_connected():
self._screen._confirm_send_action(widget,
_("Are you sure you wish to shutdown the system?"),
"machine.shutdown")
else:
logging.info("OS Shutdown")
os.system("systemctl poweroff")
def restart_system(self, widget):
if self._screen._ws.is_connected():
self._screen._confirm_send_action(widget,
_("Are you sure you wish to reboot the system?"),
"machine.reboot")
else:
logging.info("OS Reboot")
os.system("systemctl reboot")