Flexible order of menu options (#1078)

* Allow custom ordering of the menu entries

* Update

Co-authored-by: Daniel Girtler <girtler.daniel@gmail.com>
This commit is contained in:
Daniel 2022-04-22 21:24:43 +10:00 committed by GitHub
parent 477b5b120e
commit bbedc0bb19
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 9 deletions

View File

@ -43,8 +43,7 @@ class GlobalMenu(GeneralMenu):
Selector(
_('Select Archinstall language'),
lambda x: self._select_archinstall_language('English'),
default='English',
enabled=True)
default='English')
self._menu_options['keyboard-layout'] = \
Selector(_('Select keyboard layout'), lambda preset: select_language('us',preset), default='us')
self._menu_options['mirror-region'] = \
@ -153,24 +152,20 @@ class GlobalMenu(GeneralMenu):
lambda preset: self._select_ntp(preset),
default=True)
self._menu_options['__separator__'] = \
Selector(
'',
enabled=True)
Selector('')
self._menu_options['save_config'] = \
Selector(
_('Save configuration'),
lambda preset: save_config(self._data_store),
enabled=True,
no_store=True)
self._menu_options['install'] = \
Selector(
self._install_text(),
exec_func=lambda n,v: True if len(self._missing_configs()) == 0 else False,
preview_func=self._prev_install_missing_config,
enabled=True,
no_store=True)
self._menu_options['abort'] = Selector(_('Abort'), exec_func=lambda n,v:exit(1), enabled=True)
self._menu_options['abort'] = Selector(_('Abort'), exec_func=lambda n,v:exit(1))
def _update_install_text(self, name :str = None, result :Any = None):
text = self._install_text()

View File

@ -181,6 +181,7 @@ class GeneralMenu:
;type preview_size: float (range 0..1)
"""
self._enabled_order = []
self._translation = Translation.load_nationalization()
self.is_context_mgr = False
self._data_store = data_store if data_store is not None else {}
@ -239,10 +240,15 @@ class GeneralMenu:
if arg is not None:
self._menu_options[selector_name].set_current_selection(arg)
def _update_enabled_order(self, selector_name: str):
self._enabled_order.append(selector_name)
def enable(self, selector_name :str, omit_if_set :bool = False , mandatory :bool = False):
""" activates menu options """
if self._menu_options.get(selector_name, None):
self._menu_options[selector_name].set_enabled(True)
self._update_enabled_order(selector_name)
if mandatory:
self._menu_options[selector_name].set_mandatory(True)
self.synch(selector_name,omit_if_set)
@ -372,7 +378,15 @@ class GeneralMenu:
if self._verify_selection_enabled(name):
enabled_menus[name] = selection
return enabled_menus
# sort the enabled menu by the order we enabled them in
# we'll add the entries that have been enabled via the selector constructor at the top
enabled_keys = [i for i in enabled_menus.keys() if i not in self._enabled_order]
# and then we add the ones explicitly enabled by the enable function
enabled_keys += [i for i in self._enabled_order if i in enabled_menus.keys()]
ordered_menus = {k: enabled_menus[k] for k in enabled_keys}
return ordered_menus
def option(self,name :str) -> Selector:
# TODO check inexistent name

View File

@ -39,6 +39,9 @@ def ask_user_questions():
archinstall.SysCommand('timedatectl set-ntp true')
global_menu = archinstall.GlobalMenu(data_store=archinstall.arguments)
global_menu.enable('archinstall-language')
global_menu.enable('keyboard-layout')
# Set which region to download packages from during the installation
@ -91,6 +94,12 @@ def ask_user_questions():
global_menu.enable('additional-repositories')
global_menu.enable('__separator__')
global_menu.enable('save_config')
global_menu.enable('install')
global_menu.enable('abort')
global_menu.run()