From 25b89cb7e9ef189b1248dcf01066f75f603d38d2 Mon Sep 17 00:00:00 2001 From: Jordan Ruthe Date: Fri, 4 Dec 2020 14:03:14 -0500 Subject: [PATCH] menu: refactor adding items to menu so they can be dynamically added/rmeoved. --- ks_includes/printer.py | 27 ++++++++++++++++++- panels/main_menu.py | 17 ++++++++++-- panels/menu.py | 60 +++++++++++++++++++----------------------- 3 files changed, 68 insertions(+), 36 deletions(-) diff --git a/ks_includes/printer.py b/ks_includes/printer.py index 3daa6c1a..a1d049ab 100644 --- a/ks_includes/printer.py +++ b/ks_includes/printer.py @@ -85,6 +85,9 @@ class Printer: if data['device'] in self.power_devices: self.power_devices[data['device']]['status'] = data['status'] + def config_section_exists(self, section): + return section in list(self.config) + def get_config_section_list(self, search=""): return [i for i in list(self.config) if i.startswith(search)] @@ -96,6 +99,24 @@ class Printer: def get_data(self): return self.data + def get_printer_status_data(self): + data = { + "printer": { + "idle_timeout": self.get_stat("idle_timeout").copy(), + "pause_resume": self.get_stat("pause_resume").copy(), + "power_devices": { + "count": len(self.get_power_devices()) + } + } + } + + sections = ["bed_mesh","bltouch","probe"] + for section in sections: + if self.config_section_exists(section): + data["printer"][section] = self.get_config_section(section).copy() + + return data + def get_klipper_version(self): return self.klipper['version'] @@ -108,8 +129,12 @@ class Printer: return self.power_devices[device]['status'] def get_stat(self, stat, substat = None): + if stat not in self.data: + return None if substat != None: - return self.data[stat][substat] + if substat in self.data[stat]: + return self.data[stat][substat] + return None return self.data[stat] def set_dev_temps(self, dev, temp, target=None): diff --git a/panels/main_menu.py b/panels/main_menu.py index 3adee3b8..dbc5194d 100644 --- a/panels/main_menu.py +++ b/panels/main_menu.py @@ -16,7 +16,11 @@ class MainPanel(MenuPanel): def initialize(self, panel_name, items, extrudercount): print("### Making MainMenu") + + self.layout = Gtk.Layout() + self.layout.set_size(self._screen.width, self._screen.height) grid = KlippyGtk.HomogeneousGrid() + grid.set_size_request(self._screen.width, self._screen.height) # Create Extruders and bed icons eq_grid = KlippyGtk.HomogeneousGrid() @@ -36,6 +40,14 @@ class MainPanel(MenuPanel): eq_grid.attach(self.labels['heater_bed'], 0, i/2+1, width, 1) grid.attach(eq_grid, 0, 0, 1, 1) + + self.items = items + self.create_menu_items() + + self.grid = Gtk.Grid() + self.grid.set_row_homogeneous(True) + self.grid.set_column_homogeneous(True) + grid.attach(self.arrangeMenuItems(items, 2, True), 1, 0, 1, 1) self.grid = grid @@ -43,11 +55,12 @@ class MainPanel(MenuPanel): "heater_bed": 0, "extruder": 0 } + self.layout.put(grid, 0, 0) self._screen.add_subscription(panel_name) - def get(self): - return self.grid + def activate(self): + return def update_temp(self, dev, temp, target): if dev in self.labels: diff --git a/panels/menu.py b/panels/menu.py index 22bf64e4..544ec256 100644 --- a/panels/menu.py +++ b/panels/menu.py @@ -15,41 +15,34 @@ def create_panel(*args): return MenuPanel(*args) class MenuPanel(ScreenPanel): + i = 0 def initialize(self, panel_name, display_name, items): _ = self.lang.gettext - self.activate() + self.items = items + self.create_menu_items() - grid = self.arrangeMenuItems(items, 4) - grid.set_size_request(self._screen.width, self._screen.height-45) - - self.content.add(grid) - self.panel = self.layout + self.grid = Gtk.Grid() + self.grid.set_row_homogeneous(True) + self.grid.set_column_homogeneous(True) + self.content.add(self.grid) def activate(self): - self.j2_data = { - "printer": { - "power_devices": { - "count": len(self._screen.printer.get_power_devices()) - } - } - } - logger.debug("j2_data: %s" % self.j2_data) + self.j2_data = self._printer.get_printer_status_data() + self.arrangeMenuItems(self.items, 4) def arrangeMenuItems (self, items, columns, expandLast=False): - grid = Gtk.Grid() - grid.set_row_homogeneous(True) - grid.set_column_homogeneous(True) - logger.debug(items) - for item in items: - key = list(item)[0] - logger.debug(item) - if not self.evaluate_enable(item[key]['enable']): - items.remove(item) + for child in self.grid.get_children(): + self.grid.remove(child) l = len(items) i = 0 - for i in range(l): + for item in items: + key = list(item)[0] + logger.debug("Evaluating item: %s" % key) + if not self.evaluate_enable(item[key]['enable']): + continue + col = i % columns row = int(i/columns) width = 1 @@ -57,8 +50,15 @@ class MenuPanel(ScreenPanel): if expandLast == True and i+1 == l and l%2 == 1: width = 2 - key = list(items[i])[0] - item = items[i][key] + self.grid.attach(self.labels[key], col, row, width, 1) + i += 1 + + return self.grid + + def create_menu_items(self): + for i in range(len(self.items)): + key = list(self.items[i])[0] + item = self.items[i][key] b = KlippyGtk.ButtonImage( item['icon'], item['name'], "color"+str((i%4)+1) ) @@ -72,12 +72,7 @@ class MenuPanel(ScreenPanel): b.connect("clicked", self._screen._send_action, item['method'], params) else: b.connect("clicked", self._screen._go_to_submenu, key) - - grid.attach(b, col, row, width, 1) - - i += 1 - - return grid + self.labels[key] = b def evaluate_enable(self, enable): if enable == True: @@ -90,7 +85,6 @@ class MenuPanel(ScreenPanel): logger.debug("Date: %s" % self.j2_data) j2_temp = Template(enable) result = j2_temp.render(self.j2_data) - logger.debug("Result: %s" % result) if result == 'True': return True return False