From 73b54f7aba7495cb9e6db625709fa133410bdc47 Mon Sep 17 00:00:00 2001 From: Jordan Date: Tue, 18 May 2021 22:05:55 -0400 Subject: [PATCH] base_panel: Include back/home button --- panels/base_panel.py | 14 +++++++++++++- panels/bed_mesh.py | 10 +++------- panels/network.py | 25 ++++++++++++++++++++++--- panels/print.py | 8 +++----- panels/settings.py | 8 +++----- screen.py | 10 ++++++---- 6 files changed, 50 insertions(+), 25 deletions(-) diff --git a/panels/base_panel.py b/panels/base_panel.py index 664bea1c..3ac51675 100644 --- a/panels/base_panel.py +++ b/panels/base_panel.py @@ -12,6 +12,7 @@ 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.current_panel = None self.buttons_showing = { 'back': False if back else True @@ -30,7 +31,7 @@ class BasePanel(ScreenPanel): 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['back'].connect("clicked", self.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) @@ -82,9 +83,20 @@ class BasePanel(ScreenPanel): return def add_content(self, panel): + self.current_panel = panel self.set_title(panel.get_title()) self.content.add(panel.get_content()) + def back(self, widget): + if self.current_panel == None: + return + + if hasattr(self.current_panel, "back"): + if not self.current_panel.back(): + self._screen._menu_go_back() + else: + self._screen._menu_go_back() + def get(self): return self.layout diff --git a/panels/bed_mesh.py b/panels/bed_mesh.py index aaeff024..b0161b79 100644 --- a/panels/bed_mesh.py +++ b/panels/bed_mesh.py @@ -55,8 +55,6 @@ class BedMeshPanel(ScreenPanel): self.load_meshes() self.labels['main_box'] = box - self.control['back'].disconnect_by_func(self._screen._menu_go_back) - self.control['back'].connect("clicked", self.back) self.content.add(self.labels['main_box']) self._screen.add_subscription(panel_name) @@ -185,13 +183,11 @@ class BedMeshPanel(ScreenPanel): self.labels['profiles'].attach(self.profiles[profile]['row'], 0, pos, 1, 1) self.labels['profiles'].show_all() - #Gdk.threads_add_idle(GLib.PRIORITY_LOW, self.create_graph, profile) - - def back(self, widget): + def back(self): if self.show_create == True: self.remove_create() - else: - self._screen._menu_go_back() + return True + return False def create_profile(self, widget): name = self.labels['profile_name'].get_text() diff --git a/panels/network.py b/panels/network.py index 5a92bf0e..3d7c6017 100644 --- a/panels/network.py +++ b/panels/network.py @@ -19,6 +19,8 @@ class NetworkPanel(ScreenPanel): def initialize(self, menu): _ = self.lang.gettext + self.show_add = False + grid = self._gtk.HomogeneousGrid() grid.set_hexpand(True) @@ -205,7 +207,7 @@ class NetworkPanel(ScreenPanel): psk = self.labels['network_psk'].get_text() result = self._screen.wifi.add_network(ssid, psk) - self.close_add_network(widget, ssid) + self.close_add_network() if connect == True: if result == True: @@ -213,6 +215,12 @@ class NetworkPanel(ScreenPanel): else: self._screen.show_popup_message("Error adding network %s" % ssid) + def back(self): + if self.show_add == True: + self.close_add_network() + return True + return False + def check_missing_networks(self): networks = self._screen.wifi.get_networks() for net in list(self.networks): @@ -223,11 +231,18 @@ class NetworkPanel(ScreenPanel): self.add_network(net) self.labels['networklist'].show_all() - def close_add_network(self, widget, ssid): + def close_add_network(self): + if self.show_add == False: + return + for child in self.content.get_children(): self.content.remove(child) self.content.add(self.labels['main_box']) self.content.show() + for i in ['add_network','network_psk']: + if i in self.labels: + del self.labels[i] + self.show_add = False def close_dialog(self, widget, response_id): widget.destroy() @@ -317,6 +332,9 @@ class NetworkPanel(ScreenPanel): self.content.show_all() def show_add_network(self, widget, ssid): + if self.show_add == True: + return + _ = self.lang.gettext for child in self.content.get_children(): self.content.remove(child) @@ -352,9 +370,10 @@ class NetworkPanel(ScreenPanel): self.show_create = True self.labels['network_psk'].set_text('') self.content.add(self.labels['add_network']) - self.content.show() self._screen.show_keyboard() self.labels['network_psk'].grab_focus_without_selecting() + self.content.show_all() + self.show_add = True def update_all_networks(self): for network in list(self.networks): diff --git a/panels/print.py b/panels/print.py index 058d762a..c4577e0f 100644 --- a/panels/print.py +++ b/panels/print.py @@ -82,8 +82,6 @@ class PrintPanel(ScreenPanel): scroll.add(self.dir_panels['gcodes']) self.scroll = scroll - self.control['back'].disconnect_by_func(self._screen._menu_go_back) - self.control['back'].connect("clicked", self.back) self.content.add(box) self._screen.files.add_file_callback(self._callback) @@ -248,11 +246,11 @@ class PrintPanel(ScreenPanel): if show == True: self.dir_panels[directory].show_all() - def back(self, widget): + def back(self): if len(self.cur_directory.split('/')) > 1: self.change_dir(None, '/'.join(self.cur_directory.split('/')[:-1])) - else: - self._screen._menu_go_back() + return True + return False def change_dir(self, widget, directory): if directory not in self.dir_panels: diff --git a/panels/settings.py b/panels/settings.py index 4c8aad4c..6cef758a 100644 --- a/panels/settings.py +++ b/panels/settings.py @@ -67,19 +67,17 @@ class SettingsPanel(ScreenPanel): } self.add_option("printers", self.printers, pname, self.printers[pname]) - self.control['back'].disconnect_by_func(self._screen._menu_go_back) - self.control['back'].connect("clicked", self.back) self.content.add(self.labels['main_box']) def activate(self): while len(self.menu) > 1: self.unload_menu() - def back(self, widget): + def back(self): if len(self.menu) > 1: self.unload_menu() - else: - self._screen._menu_go_back() + return True + return False def create_box(self, name, insert=None): # Create a scroll window for the macros diff --git a/screen.py b/screen.py index 8327373c..eb5fbbd0 100644 --- a/screen.py +++ b/screen.py @@ -122,6 +122,8 @@ class KlipperScreen(Gtk.Window): self.base_panel = BasePanel(self, "Base Panel", False) self.add(self.base_panel.get()) + self.show_all() + self.base_panel.activate() self.printer_initializing(_("Initializing")) @@ -433,7 +435,7 @@ class KlipperScreen(Gtk.Window): logging.info("No items in menu, returning.") return - self.show_panel(self._cur_panels[-1] + '_menu', "menu", disname, 1, False, display_name=disname, + self.show_panel(self._cur_panels[-1] + '_' + name, "menu", disname, 1, False, display_name=disname, items=menuitems) def _remove_all_panels(self): @@ -737,14 +739,14 @@ class KlipperScreen(Gtk.Window): #for i in ['back','estop','home']: # if i in cur_panel.control: # cur_panel.control[i].set_sensitive(False) - cur_panel.get().put(box, action_bar_width, self.height - 200) + self.base_panel.get().put(box, action_bar_width, self.height - 200) self.show_all() keyboard.add_id(xid) keyboard.show() self.keyboard = { "box": box, - "panel": cur_panel.get(), + #"panel": cur_panel.get(), "process": p, "socket": keyboard } @@ -753,7 +755,7 @@ class KlipperScreen(Gtk.Window): if self.keyboard is None: return - self.keyboard['panel'].remove(self.keyboard['box']) + self.base_panel.get().remove(self.keyboard['box']) os.kill(self.keyboard['process'].pid, signal.SIGTERM) self.keyboard = None