Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/archinstall/lib/menu/selection_menu.py
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2022-09-30 17:25:43 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2022-09-30 17:25:43 +0200
commit6408c9dce00aa70ad3c6614d2d793dba9a99aff6 (patch)
treebff1889dfebde0c74e30e9de427a2c122513684b /archinstall/lib/menu/selection_menu.py
parentfaf925de1882be722d2994d697a802918282e509 (diff)
parent53a2797af6ac0832bf7dd00dfe96b8ea1867db2e (diff)
merged from upstream for ISO 2022-10
Diffstat (limited to 'archinstall/lib/menu/selection_menu.py')
-rw-r--r--archinstall/lib/menu/selection_menu.py55
1 files changed, 29 insertions, 26 deletions
diff --git a/archinstall/lib/menu/selection_menu.py b/archinstall/lib/menu/selection_menu.py
index 57e290f1..8a08812c 100644
--- a/archinstall/lib/menu/selection_menu.py
+++ b/archinstall/lib/menu/selection_menu.py
@@ -8,22 +8,15 @@ from typing import Callable, Any, List, Iterator, Tuple, Optional, Dict, TYPE_CH
from .menu import Menu, MenuSelectionType
from ..locale_helpers import set_keyboard_language
from ..output import log
-from ..translation import Translation
+from ..translationhandler import TranslationHandler, Language
from ..hsm.fido import get_fido2_devices
+from ..user_interaction.general_conf import select_archinstall_language
+
if TYPE_CHECKING:
_: Any
-def select_archinstall_language(preset_value: str) -> Optional[Any]:
- """
- copied from user_interaction/general_conf.py as a temporary measure
- """
- languages = Translation.get_available_lang()
- language = Menu(_('Archinstall language'), languages, preset_values=preset_value).run()
- return language.value
-
-
class Selector:
def __init__(
self,
@@ -190,13 +183,18 @@ class GeneralMenu:
"""
self._enabled_order :List[str] = []
- self._translation = Translation.load_nationalization()
+ self._translation_handler = TranslationHandler()
self.is_context_mgr = False
self._data_store = data_store if data_store is not None else {}
self.auto_cursor = auto_cursor
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
@@ -217,9 +215,13 @@ class GeneralMenu:
self.exit_callback()
+ @property
+ def translation_handler(self) -> TranslationHandler:
+ return self._translation_handler
+
def _setup_selection_menu_options(self):
""" Define the menu options.
- Menu options can be defined here in a subclass or done per progam calling self.set_option()
+ Menu options can be defined here in a subclass or done per program calling self.set_option()
"""
return
@@ -227,7 +229,7 @@ class GeneralMenu:
""" will be called before each action in the menu """
return
- def post_callback(self, selector_name :str, value :Any):
+ def post_callback(self, selection_name: str = None, value: Any = None):
""" will be called after each action in the menu """
return True
@@ -327,12 +329,16 @@ class GeneralMenu:
break
cursor_pos += 1
- value = value.strip()
+ value = value.strip()
- # if this calls returns false, we exit the menu
- # we allow for an callback for special processing on realeasing control
- if not self._process_selection(value):
- break
+ # if this calls returns false, we exit the menu
+ # we allow for an callback for special processing on realeasing control
+ 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__()
@@ -347,7 +353,7 @@ class GeneralMenu:
return self.exec_option(config_name, selector)
def exec_option(self, config_name :str, p_selector :Selector = None) -> bool:
- """ processes the exection of a given menu entry
+ """ processes the execution of a given menu entry
- pre process callback
- selection function
- post process callback
@@ -461,13 +467,10 @@ class GeneralMenu:
mandatory_waiting += 1
return mandatory_fields, mandatory_waiting
- def _select_archinstall_language(self, preset_value: str) -> str:
- language = select_archinstall_language(preset_value)
- if language is not None:
- self._translation.activate(language)
- return language
-
- return preset_value
+ def _select_archinstall_language(self, preset_value: Language) -> Language:
+ language = select_archinstall_language(self.translation_handler.translated_languages, preset_value)
+ self._translation_handler.activate(language)
+ return language
def _select_hsm(self, preset :Optional[pathlib.Path] = None) -> Optional[pathlib.Path]:
title = _('Select which partitions to mark for formatting:')