From 3bc39225458b32fcd43b8a5b76dbb6797723a86c Mon Sep 17 00:00:00 2001 From: Werner Llácer Date: Mon, 1 Aug 2022 09:44:26 +0200 Subject: Enhacements to list_manager: (#1346) * Enhacements to list_manager: method filter_option. To filter options based on selected entry attrib. last_choice. Which is the last action executed before exiting the loop * last_choice is now a calculated attribute, therefore readonly * Added last_choice to selection_menu * bug at selection_menu handling. Translations can be a problem --- archinstall/lib/menu/list_manager.py | 13 ++++++++++++- archinstall/lib/menu/selection_menu.py | 9 +++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/archinstall/lib/menu/list_manager.py b/archinstall/lib/menu/list_manager.py index e7a9c2ac..ae3a6eb5 100644 --- a/archinstall/lib/menu/list_manager.py +++ b/archinstall/lib/menu/list_manager.py @@ -44,6 +44,12 @@ class ListManager: self._base_actions = base_actions self._sub_menu_actions = sub_menu_actions + self._last_choice = None + + @property + def last_choice(self): + return self._last_choice + def run(self): while True: # this will return a dictionary with the key as the menu entry to be displayed @@ -73,6 +79,7 @@ class ListManager: selected_entry = data_formatted[choice.value] self._run_actions_on_entry(selected_entry) + self._last_choice = choice if choice.value == self._cancel_action: return self._original_data # return the original list else: @@ -97,7 +104,7 @@ class ListManager: return options, header def _run_actions_on_entry(self, entry: Any): - options = self._sub_menu_actions + [self._cancel_action] + options = self.filter_options(entry,self._sub_menu_actions) + [self._cancel_action] display_value = self.selected_action_display(entry) prompt = _("Select an action for '{}'").format(display_value) @@ -129,3 +136,7 @@ class ListManager: # this function is called when a base action or # a specific action for an entry is triggered raise NotImplementedError('Please implement me in the child class') + + def filter_options(self, selection :Any, options :List[str]) -> List[str]: + # filter which actions to show for an specific selection + return options diff --git a/archinstall/lib/menu/selection_menu.py b/archinstall/lib/menu/selection_menu.py index 8dd6fcce..c6ac5852 100644 --- a/archinstall/lib/menu/selection_menu.py +++ b/archinstall/lib/menu/selection_menu.py @@ -188,6 +188,11 @@ class GeneralMenu: self._menu_options: Dict[str, Selector] = {} self._setup_selection_menu_options() self.preview_size = preview_size + self._last_choice = None + + @property + def last_choice(self): + return self._last_choice def __enter__(self, *args :Any, **kwargs :Any) -> GeneralMenu: self.is_context_mgr = True @@ -325,6 +330,10 @@ class GeneralMenu: if not self._process_selection(value): break + # we get the last action key + actions = {str(v.description):k for k,v in self._menu_options.items()} + self._last_choice = actions[selection.value.strip()] + if not self.is_context_mgr: self.__exit__() -- cgit v1.2.3-54-g00ecf