base_panel: Initial commit
This commit is contained in:
parent
bb62064616
commit
a0d3bd6a0c
@ -10,7 +10,6 @@ from ks_includes.KlippyGcodes import KlippyGcodes
|
||||
|
||||
class ScreenPanel:
|
||||
title_spacing = 50
|
||||
control = {}
|
||||
|
||||
def __init__(self, screen, title, back=True, action_bar=True, printer_name=True):
|
||||
self._screen = screen
|
||||
@ -20,72 +19,16 @@ class ScreenPanel:
|
||||
self._printer = screen.printer
|
||||
self.labels = {}
|
||||
self._gtk = screen.gtk
|
||||
self.control = {}
|
||||
self.title = title
|
||||
|
||||
self.layout = Gtk.Layout()
|
||||
self.layout.set_size(self._screen.width, self._screen.height)
|
||||
|
||||
action_bar_width = self._gtk.get_action_bar_width() if action_bar == True else 0
|
||||
|
||||
if action_bar == True:
|
||||
self.control_grid = self._gtk.HomogeneousGrid()
|
||||
self.control_grid.set_size_request(action_bar_width - 2, self._screen.height)
|
||||
self.control_grid.get_style_context().add_class('action_bar')
|
||||
|
||||
button_scale = self._gtk.get_header_image_scale()
|
||||
logging.debug("Button scale: %s" % button_scale)
|
||||
|
||||
if back == True:
|
||||
self.control['back'] = self._gtk.ButtonImage('back', None, None, button_scale[0], button_scale[1])
|
||||
self.control['back'].connect("clicked", self._screen._menu_go_back)
|
||||
self.control_grid.attach(self.control['back'], 0, 0, 1, 1)
|
||||
|
||||
self.control['home'] = self._gtk.ButtonImage('main', None, None, button_scale[0], button_scale[1])
|
||||
self.control['home'].connect("clicked", self.menu_return, True)
|
||||
self.control_grid.attach(self.control['home'], 0, 1, 1, 1)
|
||||
else:
|
||||
for i in range(2):
|
||||
self.control['space%s' % i] = Gtk.Label("")
|
||||
self.control_grid.attach(self.control['space%s' % i], 0, i, 1, 1)
|
||||
|
||||
if len(self._config.get_printers()) > 1:
|
||||
self.control['printer_select'] = self._gtk.ButtonImage(
|
||||
'shuffle', None, None, button_scale[0], button_scale[1])
|
||||
self.control['printer_select'].connect("clicked", self._screen.show_printer_select)
|
||||
else:
|
||||
self.control['printer_select'] = Gtk.Label("")
|
||||
self.control_grid.attach(self.control['printer_select'], 0, 2, 1, 1)
|
||||
|
||||
self.control['estop'] = self._gtk.ButtonImage('emergency', None, None, button_scale[0], button_scale[1])
|
||||
self.control['estop'].connect("clicked", self.emergency_stop)
|
||||
self.control_grid.attach(self.control['estop'], 0, 3, 1, 1)
|
||||
#self.layout.put(self.control['estop'], int(self._screen.width/4*3 - button_scale[0]/2), 0)
|
||||
|
||||
try:
|
||||
env = Environment(extensions=["jinja2.ext.i18n"])
|
||||
env.install_gettext_translations(self.lang)
|
||||
j2_temp = env.from_string(title)
|
||||
title = j2_temp.render()
|
||||
except:
|
||||
logging.debug("Error parsing jinja for title: %s" % title)
|
||||
|
||||
self.title = Gtk.Label()
|
||||
self.title.set_size_request(self._screen.width - action_bar_width, self.title_spacing)
|
||||
self.title.set_hexpand(True)
|
||||
self.title.set_halign(Gtk.Align.CENTER)
|
||||
self.title.set_valign(Gtk.Align.CENTER)
|
||||
if printer_name == True:
|
||||
self.set_title("%s | %s" % (self._screen.connected_printer, title))
|
||||
else:
|
||||
self.set_title(title)
|
||||
|
||||
self.content = Gtk.Box(spacing=0)
|
||||
self.content.set_size_request(self._screen.width - action_bar_width, self._screen.height - self.title_spacing)
|
||||
|
||||
if action_bar == True:
|
||||
self.layout.put(self.control_grid, 0, 0)
|
||||
self.layout.put(self.title, action_bar_width, 0)
|
||||
self.layout.put(self.content, action_bar_width, self.title_spacing)
|
||||
|
||||
|
||||
def initialize(self, panel_name):
|
||||
# Create gtk items here
|
||||
@ -97,6 +40,9 @@ class ScreenPanel:
|
||||
def get(self):
|
||||
return self.layout
|
||||
|
||||
def get_content(self):
|
||||
return self.content
|
||||
|
||||
def get_file_image(self, filename, width=1.6, height=1.6):
|
||||
if not self._files.has_thumbnail(filename):
|
||||
return None
|
||||
@ -110,6 +56,9 @@ class ScreenPanel:
|
||||
return self._gtk.PixbufFromHttp(loc[1], None, width, height)
|
||||
return None
|
||||
|
||||
def get_title(self):
|
||||
return self.title
|
||||
|
||||
def home(self, widget):
|
||||
self._screen._ws.klippy.gcode_script(KlippyGcodes.HOME)
|
||||
|
||||
@ -129,7 +78,8 @@ class ScreenPanel:
|
||||
self._screen._menu_go_home()
|
||||
|
||||
def set_title(self, title):
|
||||
self.title.set_label(title)
|
||||
self.title = title
|
||||
#self.title.set_label(title)
|
||||
|
||||
def show_all(self):
|
||||
self._screen.show_all()
|
||||
|
121
panels/base_panel.py
Normal file
121
panels/base_panel.py
Normal file
@ -0,0 +1,121 @@
|
||||
import gi
|
||||
import logging
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, Gdk, GLib
|
||||
from jinja2 import Environment, Template
|
||||
|
||||
from ks_includes.KlippyGtk import KlippyGtk
|
||||
from ks_includes.KlippyGcodes import KlippyGcodes
|
||||
from ks_includes.screen_panel import ScreenPanel
|
||||
|
||||
class BasePanel(ScreenPanel):
|
||||
def __init__(self, screen, title, back=True, action_bar=True, printer_name=True):
|
||||
super().__init__(screen, title, back, action_bar, printer_name)
|
||||
|
||||
self.buttons_showing = {
|
||||
'back': False if back else True
|
||||
}
|
||||
|
||||
self.layout = Gtk.Layout()
|
||||
self.layout.set_size(self._screen.width, self._screen.height)
|
||||
|
||||
action_bar_width = self._gtk.get_action_bar_width() if action_bar == True else 0
|
||||
|
||||
self.control_grid = self._gtk.HomogeneousGrid()
|
||||
self.control_grid.set_size_request(action_bar_width - 2, self._screen.height)
|
||||
self.control_grid.get_style_context().add_class('action_bar')
|
||||
|
||||
button_scale = self._gtk.get_header_image_scale()
|
||||
logging.debug("Button scale: %s" % button_scale)
|
||||
|
||||
self.control['back'] = self._gtk.ButtonImage('back', None, None, button_scale[0], button_scale[1])
|
||||
self.control['back'].connect("clicked", self._screen._menu_go_back)
|
||||
self.control['home'] = self._gtk.ButtonImage('main', None, None, button_scale[0], button_scale[1])
|
||||
self.control['home'].connect("clicked", self.menu_return, True)
|
||||
|
||||
#if back == True:
|
||||
# self.control_grid.attach(self.control['back'], 0, 0, 1, 1)
|
||||
# self.control_grid.attach(self.control['home'], 0, 1, 1, 1)
|
||||
#else:
|
||||
for i in range(2):
|
||||
self.control['space%s' % i] = Gtk.Label("")
|
||||
self.control_grid.attach(self.control['space%s' % i], 0, i, 1, 1)
|
||||
|
||||
if len(self._config.get_printers()) > 1:
|
||||
self.control['printer_select'] = self._gtk.ButtonImage(
|
||||
'shuffle', None, None, button_scale[0], button_scale[1])
|
||||
self.control['printer_select'].connect("clicked", self._screen.show_printer_select)
|
||||
else:
|
||||
self.control['printer_select'] = Gtk.Label("")
|
||||
self.control_grid.attach(self.control['printer_select'], 0, 2, 1, 1)
|
||||
|
||||
self.control['estop'] = self._gtk.ButtonImage('emergency', None, None, button_scale[0], button_scale[1])
|
||||
self.control['estop'].connect("clicked", self.emergency_stop)
|
||||
self.control_grid.attach(self.control['estop'], 0, 3, 1, 1)
|
||||
|
||||
try:
|
||||
env = Environment(extensions=["jinja2.ext.i18n"])
|
||||
env.install_gettext_translations(self.lang)
|
||||
j2_temp = env.from_string(title)
|
||||
title = j2_temp.render()
|
||||
except:
|
||||
logging.debug("Error parsing jinja for title: %s" % title)
|
||||
|
||||
self.titlelbl = Gtk.Label()
|
||||
self.titlelbl.set_size_request(self._screen.width - action_bar_width, self.title_spacing)
|
||||
self.titlelbl.set_hexpand(True)
|
||||
self.titlelbl.set_halign(Gtk.Align.CENTER)
|
||||
self.titlelbl.set_valign(Gtk.Align.CENTER)
|
||||
self.set_title(title)
|
||||
|
||||
self.content = Gtk.Box(spacing=0)
|
||||
self.content.set_size_request(self._screen.width - action_bar_width, self._screen.height - self.title_spacing)
|
||||
|
||||
if action_bar == True:
|
||||
self.layout.put(self.control_grid, 0, 0)
|
||||
self.layout.put(self.titlelbl, action_bar_width, 0)
|
||||
self.layout.put(self.content, action_bar_width, self.title_spacing)
|
||||
|
||||
def initialize(self, panel_name):
|
||||
# Create gtk items here
|
||||
return
|
||||
|
||||
def add_content(self, panel):
|
||||
self.set_title(panel.get_title())
|
||||
self.content.add(panel.get_content())
|
||||
|
||||
def get(self):
|
||||
return self.layout
|
||||
|
||||
def remove(self, widget):
|
||||
self.content.remove(widget)
|
||||
|
||||
def show_back(self, show=True):
|
||||
if show == True and self.buttons_showing['back'] == False:
|
||||
self.control_grid.remove(self.control_grid.get_child_at(0,0))
|
||||
self.control_grid.attach(self.control['back'], 0, 0, 1, 1)
|
||||
self.control_grid.remove(self.control_grid.get_child_at(0,1))
|
||||
self.control_grid.attach(self.control['home'], 0, 1, 1, 1)
|
||||
self.buttons_showing['back'] = True
|
||||
elif show == False and self.buttons_showing['back'] == True:
|
||||
for i in range(0,2):
|
||||
self.control_grid.remove(self.control_grid.get_child_at(0,i))
|
||||
self.control_grid.attach(self.control['space%s' % i], 0, i, 1, 1)
|
||||
self.buttons_showing['back'] = False
|
||||
self.control_grid.show()
|
||||
|
||||
def set_title(self, title):
|
||||
try:
|
||||
env = Environment(extensions=["jinja2.ext.i18n"])
|
||||
env.install_gettext_translations(self.lang)
|
||||
j2_temp = env.from_string(title)
|
||||
title = j2_temp.render()
|
||||
except:
|
||||
logging.debug("Error parsing jinja for title: %s" % title)
|
||||
|
||||
self.titlelbl.set_label("%s | %s" % (self._screen.connected_printer, title))
|
||||
|
||||
def show_back_buttons(self):
|
||||
self.control_grid.attach(self.control['back'], 0, 0, 1, 1)
|
||||
self.control_grid.attach(self.control['home'], 0, 1, 1, 1)
|
@ -22,7 +22,7 @@ class SplashScreenPanel(ScreenPanel):
|
||||
def initialize(self, panel_name):
|
||||
_ = self.lang.gettext
|
||||
|
||||
image = self._gtk.Image("klipper.svg", None, 4, 4)
|
||||
image = self._gtk.Image("klipper.svg", None, 4, 3)
|
||||
|
||||
self.labels['text'] = Gtk.Label(_("Initializing printer..."))
|
||||
self.labels['text'].set_line_wrap(True)
|
||||
@ -42,12 +42,8 @@ class SplashScreenPanel(ScreenPanel):
|
||||
main.pack_end(self.labels['actions'], False, False, 10)
|
||||
main.pack_end(self.labels['text'], True, True, 10)
|
||||
|
||||
|
||||
box = Gtk.VBox()
|
||||
box.add(main)
|
||||
box.set_size_request(self._screen.width, self._screen.height)
|
||||
|
||||
self.layout.put(box, 0, 0)
|
||||
self.content.add(main)
|
||||
#self.layout.put(box, 0, 0)
|
||||
|
||||
def update_text(self, text):
|
||||
self.labels['text'].set_text(text)
|
||||
|
18
screen.py
18
screen.py
@ -33,6 +33,7 @@ from ks_includes.printer import Printer
|
||||
from ks_includes.wifi import WifiManager
|
||||
|
||||
from ks_includes.config import KlipperScreenConfig
|
||||
from panels.base_panel import BasePanel
|
||||
|
||||
logging.getLogger('matplotlib').setLevel(logging.WARNING)
|
||||
import numpy
|
||||
@ -119,6 +120,9 @@ class KlipperScreen(Gtk.Window):
|
||||
self.gtk = KlippyGtk(self, self.width, self.height, self.theme)
|
||||
self.init_style()
|
||||
|
||||
self.base_panel = BasePanel(self, "Base Panel", False)
|
||||
self.add(self.base_panel.get())
|
||||
|
||||
self.printer_initializing(_("Initializing"))
|
||||
|
||||
self.set_screenblanking_timeout(self._config.get_main_config_option('screen_blanking'))
|
||||
@ -301,8 +305,13 @@ class KlipperScreen(Gtk.Window):
|
||||
self._remove_current_panel(pop)
|
||||
|
||||
logging.debug("Attaching panel %s" % panel_name)
|
||||
self.base_panel.add_content(self.panels[panel_name])
|
||||
|
||||
self.add(self.panels[panel_name].get())
|
||||
logging.debug("Showing back. count: %s" % len(self._cur_panels))
|
||||
if len(self._cur_panels) == 0:
|
||||
self.base_panel.show_back(False)
|
||||
else:
|
||||
self.base_panel.show_back(True)
|
||||
self.show_all()
|
||||
|
||||
if hasattr(self.panels[panel_name],"process_update"):
|
||||
@ -424,7 +433,7 @@ class KlipperScreen(Gtk.Window):
|
||||
logging.info("No items in menu, returning.")
|
||||
return
|
||||
|
||||
self.show_panel(self._cur_panels[-1] + '_' + name, "menu", disname, 1, False, display_name=disname,
|
||||
self.show_panel(self._cur_panels[-1] + '_menu', "menu", disname, 1, False, display_name=disname,
|
||||
items=menuitems)
|
||||
|
||||
def _remove_all_panels(self):
|
||||
@ -434,11 +443,12 @@ class KlipperScreen(Gtk.Window):
|
||||
|
||||
def _remove_current_panel(self, pop=True, show=True):
|
||||
if len(self._cur_panels) > 0:
|
||||
self.remove(self.panels[self._cur_panels[-1]].get())
|
||||
self.base_panel.remove(self.panels[self._cur_panels[-1]].get_content())
|
||||
if pop == True:
|
||||
self._cur_panels.pop()
|
||||
if len(self._cur_panels) > 0:
|
||||
self.add(self.panels[self._cur_panels[-1]].get())
|
||||
self.base_panel.add_content(self.panels[self._cur_panels[-1]])
|
||||
self.base_panel.show_back(False if len(self._cur_panels) == 1 else True)
|
||||
if hasattr(self.panels[self._cur_panels[-1]], "process_update"):
|
||||
self.panels[self._cur_panels[-1]].process_update("notify_status_update",
|
||||
self.printer.get_updates())
|
||||
|
Loading…
x
Reference in New Issue
Block a user