forked from CreatBot/CreatBotKlipperScreen
Change panel layout. Add title and move back button
This commit is contained in:
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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)]
|
||||
|
@@ -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:
|
||||
|
@@ -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]:
|
||||
|
Reference in New Issue
Block a user