Change panel layout. Add title and move back button

This commit is contained in:
Jordan Ruthe
2020-12-02 14:35:28 -05:00
parent 6d71022dbf
commit 08a7057668
25 changed files with 283 additions and 188 deletions

View File

@@ -7,6 +7,7 @@ bed = 90
extruder = 220
[menu __main]
name: Main Menu
[menu __main homing]
name: Homing
@@ -122,6 +123,9 @@ confirm:
Klipper will reboot
[menu __print]
name: Print Control
[menu __print temperature]
name: Temperature
icon: heat-up

View File

@@ -165,10 +165,12 @@ class KlippyGtk:
return b
@staticmethod
def HomogeneousGrid():
def HomogeneousGrid(width=None, height=None):
g = Gtk.Grid()
g.set_row_homogeneous(True)
g.set_column_homogeneous(True)
if width != None and height != None:
g.set_size_request(width, height)
return g
@staticmethod

View File

@@ -56,6 +56,14 @@ class KlipperScreenConfig:
return menu_items
def get_menu_name(self, menu="__main", subsection=""):
name = ("menu %s %s" % (menu, subsection)) if subsection != "" else ("menu %s" % menu)
logger.debug("Menu name: %s" % name)
if name not in self.config:
return False
return self.config[name].get('name')
def get_preheat_options(self):
index = "preheat "
items = [i[len(index):] for i in self.config.sections() if i.startswith(index)]

View File

@@ -85,8 +85,8 @@ class Printer:
if data['device'] in self.power_devices:
self.power_devices[data['device']]['status'] = data['status']
def get_config_section_list(self):
return list(self.config)
def get_config_section_list(self, search=""):
return [i for i in list(self.config) if i.startswith(search)]
def get_config_section(self, section):
if section not in self.config:

View File

@@ -1,18 +1,50 @@
import gi
import logging
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk, GLib
from ks_includes.KlippyGtk import KlippyGtk
from ks_includes.KlippyGcodes import KlippyGcodes
logger = logging.getLogger("KlipperScreen.ScreenPanel")
class ScreenPanel:
def __init__(self, screen):
title_spacing = 50
def __init__(self, screen, title, back=True):
self._screen = screen
self.lang = self._screen.lang
self._printer = screen.printer
self.labels = {}
self.layout = Gtk.Layout()
self.layout.set_size(self._screen.width, self._screen.height)
if back == True:
b = KlippyGtk.ButtonImage('back', None, None, 40, 40)
b.connect("clicked", self._screen._menu_go_back)
self.layout.put(b, 0, 0)
h = KlippyGtk.ButtonImage('home', None, None, 40, 40)
h.connect("clicked", self.menu_return, True)
self.layout.put(h, self._screen.width - 55, 0)
e = KlippyGtk.ButtonImage('emergency', None, None, 40, 40)
e.connect("clicked", self.emergency_stop)
self.layout.put(e, int(self._screen.width/4*3) - 20, 0)
self.title = Gtk.Label()
self.title.set_size_request(self._screen.width, self.title_spacing)
self.title.set_hexpand(True)
self.title.set_halign(Gtk.Align.CENTER)
self.title.set_valign(Gtk.Align.CENTER)
self.set_title(title)
self.layout.put(self.title, 0, 0)
self.content = Gtk.Box(spacing=0)
self.content.set_size_request(self._screen.width, self._screen.height - self.title_spacing)
self.layout.put(self.content, 0, self.title_spacing)
def initialize(self, panel_name):
# Create gtk items here
@@ -22,8 +54,7 @@ class ScreenPanel:
self._screen._ws.klippy.emergency_stop()
def get(self):
# Return gtk item
return self.panel
return self.layout
def home(self, widget):
self._screen._ws.klippy.gcode_script(KlippyGcodes.HOME)
@@ -31,9 +62,20 @@ class ScreenPanel:
def menu_item_clicked(self, widget, panel, item):
print("### Creating panel "+ item['panel'])
if "items" in item:
self._screen.show_panel(self._screen._cur_panels[-1] + '_' + item['name'], item['panel'], 1, False, items=item['items'])
self._screen.show_panel(self._screen._cur_panels[-1] + '_' + item['name'], item['panel'], item['name'],
1, False, items=item['items'])
return
self._screen.show_panel(self._screen._cur_panels[-1] + '_' + item['name'], item['panel'], 1, False)
self._screen.show_panel(self._screen._cur_panels[-1] + '_' + item['name'], item['panel'], item['name'],
1, False)
def menu_return(self, widget, home=False):
if home == False:
self._screen._menu_go_back()
return
self._screen._menu_go_home()
def set_title(self, title):
self.title.set_label(title)
def update_image_text(self, label, text):
if label in self.labels and 'l' in self.labels[label]: