panels: simplificate panel sub-menu system

This commit is contained in:
alfrix
2024-05-12 15:53:45 -03:00
parent dc61787960
commit 1afc67b354
6 changed files with 13 additions and 29 deletions

View File

@@ -15,7 +15,7 @@ class ScreenPanel:
ks_printer_cfg = None ks_printer_cfg = None
def __init__(self, screen, title, **kwargs): def __init__(self, screen, title, **kwargs):
self.menu = None self.menu = []
ScreenPanel._screen = screen ScreenPanel._screen = screen
ScreenPanel._config = screen._config ScreenPanel._config = screen._config
ScreenPanel._files = screen.files ScreenPanel._files = screen.files
@@ -74,22 +74,29 @@ class ScreenPanel:
self.content.remove(child) self.content.remove(child)
self.menu.append(f'{name}_menu') self.menu.append(f'{name}_menu')
logging.debug(f"self.menu: {self.menu}")
self.content.add(self.labels[self.menu[-1]]) self.content.add(self.labels[self.menu[-1]])
self.content.show_all() self.content.show_all()
if title: if title:
self._screen.base_panel.set_title(f"{self.title} | {title}") self._screen.base_panel.set_title(f"{self.title} | {title}")
def unload_menu(self, widget=None): def unload_menu(self, widget=None):
logging.debug(f"self.menu: {self.menu}")
if len(self.menu) <= 1 or self.menu[-2] not in self.labels: if len(self.menu) <= 1 or self.menu[-2] not in self.labels:
return return
self._screen.base_panel.set_title(self._screen.panels[self._screen._cur_panels[-1]].title) self._screen.base_panel.set_title(self._screen.panels[self._screen._cur_panels[-1]].title)
self.menu.pop() self.menu.pop()
logging.debug(f"self.menu: {self.menu}")
for child in self.content.get_children(): for child in self.content.get_children():
self.content.remove(child) self.content.remove(child)
self.content.add(self.labels[self.menu[-1]]) self.content.add(self.labels[self.menu[-1]])
self.content.show_all() self.content.show_all()
def back(self):
if len(self.menu) > 1:
self.unload_menu()
return True
return False
def on_dropdown_change(self, combo, section, option, callback=None): def on_dropdown_change(self, combo, section, option, callback=None):
tree_iter = combo.get_active_iter() tree_iter = combo.get_active_iter()
if tree_iter is not None: if tree_iter is not None:

View File

@@ -162,12 +162,6 @@ class Panel(ScreenPanel):
self.labels['extrude_menu'] = grid self.labels['extrude_menu'] = grid
self.content.add(self.labels['extrude_menu']) self.content.add(self.labels['extrude_menu'])
def back(self):
if len(self.menu) > 1:
self.unload_menu()
return True
return False
def enable_buttons(self, enable): def enable_buttons(self, enable):
for button in self.buttons: for button in self.buttons:
if button in ("temperature", "spoolman"): if button in ("temperature", "spoolman"):

View File

@@ -42,8 +42,6 @@ class Panel(ScreenPanel):
self.labels['options_menu'].add(self.labels['options']) self.labels['options_menu'].add(self.labels['options'])
def activate(self): def activate(self):
while len(self.menu) > 1:
self.unload_menu()
self.reload_macros() self.reload_macros()
def add_gcode_macro(self, macro): def add_gcode_macro(self, macro):

View File

@@ -24,7 +24,7 @@ class Panel(ScreenPanel):
self.distance = self.distances[-2] self.distance = self.distances[-2]
self.settings = {} self.settings = {}
self.menu = ["move_menu"] self.menu.append("move_menu")
self.buttons = { self.buttons = {
"x+": self._gtk.Button("arrow-right", "X+", "color1"), "x+": self._gtk.Button("arrow-right", "X+", "color1"),
"x-": self._gtk.Button("arrow-left", "X-", "color1"), "x-": self._gtk.Button("arrow-left", "X-", "color1"),
@@ -200,14 +200,13 @@ class Panel(ScreenPanel):
) )
def reinit_panels(self, value): def reinit_panels(self, value):
logging.info(self._screen.panels)
self._screen.panels_reinit.append("bed_level") self._screen.panels_reinit.append("bed_level")
self._screen.panels_reinit.append("bed_mesh") self._screen.panels_reinit.append("bed_mesh")
def reinit_move(self, widget): def reinit_move(self, widget):
self._screen.panels_reinit.append("move") self._screen.panels_reinit.append("move")
self._screen.panels_reinit.append("zcalibrate") self._screen.panels_reinit.append("zcalibrate")
self._screen._menu_go_back(home=True) self.menu.clear()
def process_update(self, action, data): def process_update(self, action, data):
if action != "notify_status_update": if action != "notify_status_update":
@@ -263,12 +262,6 @@ class Panel(ScreenPanel):
if self._printer.get_stat("gcode_move", "absolute_coordinates"): if self._printer.get_stat("gcode_move", "absolute_coordinates"):
self._screen._ws.klippy.gcode_script("G90") self._screen._ws.klippy.gcode_script("G90")
def back(self):
if len(self.menu) > 1:
self.unload_menu()
return True
return False
def home(self, widget): def home(self, widget):
if "delta" in self._printer.get_config_section("printer")["kinematics"]: if "delta" in self._printer.get_config_section("printer")["kinematics"]:
self._screen._send_action(widget, "printer.gcode.script", {"script": "G28"}) self._screen._send_action(widget, "printer.gcode.script", {"script": "G28"})

View File

@@ -54,13 +54,3 @@ class Panel(ScreenPanel):
self.add_option("printers", self.printers, pname, self.printers[pname]) self.add_option("printers", self.printers, pname, self.printers[pname])
self.content.add(self.labels['settings_menu']) self.content.add(self.labels['settings_menu'])
def activate(self):
while len(self.menu) > 1:
self.unload_menu()
def back(self):
if len(self.menu) > 1:
self.unload_menu()
return True
return False

View File

@@ -323,6 +323,8 @@ class KlipperScreen(Gtk.Window):
def attach_panel(self, panel): def attach_panel(self, panel):
self.base_panel.add_content(self.panels[panel]) self.base_panel.add_content(self.panels[panel])
logging.debug(f"Current panel hierarchy: {' > '.join(self._cur_panels)}") logging.debug(f"Current panel hierarchy: {' > '.join(self._cur_panels)}")
while len(self.panels[panel].menu) > 1:
self.panels[panel].unload_menu()
if hasattr(self.panels[panel], "process_update"): if hasattr(self.panels[panel], "process_update"):
self.process_update("notify_status_update", self.printer.data) self.process_update("notify_status_update", self.printer.data)
if hasattr(self.panels[panel], "activate"): if hasattr(self.panels[panel], "activate"):