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:
parent
477b5b120e
commit
bbedc0bb19
|
|
@ -43,8 +43,7 @@ class GlobalMenu(GeneralMenu):
|
||||||
Selector(
|
Selector(
|
||||||
_('Select Archinstall language'),
|
_('Select Archinstall language'),
|
||||||
lambda x: self._select_archinstall_language('English'),
|
lambda x: self._select_archinstall_language('English'),
|
||||||
default='English',
|
default='English')
|
||||||
enabled=True)
|
|
||||||
self._menu_options['keyboard-layout'] = \
|
self._menu_options['keyboard-layout'] = \
|
||||||
Selector(_('Select keyboard layout'), lambda preset: select_language('us',preset), default='us')
|
Selector(_('Select keyboard layout'), lambda preset: select_language('us',preset), default='us')
|
||||||
self._menu_options['mirror-region'] = \
|
self._menu_options['mirror-region'] = \
|
||||||
|
|
@ -153,24 +152,20 @@ class GlobalMenu(GeneralMenu):
|
||||||
lambda preset: self._select_ntp(preset),
|
lambda preset: self._select_ntp(preset),
|
||||||
default=True)
|
default=True)
|
||||||
self._menu_options['__separator__'] = \
|
self._menu_options['__separator__'] = \
|
||||||
Selector(
|
Selector('')
|
||||||
'',
|
|
||||||
enabled=True)
|
|
||||||
self._menu_options['save_config'] = \
|
self._menu_options['save_config'] = \
|
||||||
Selector(
|
Selector(
|
||||||
_('Save configuration'),
|
_('Save configuration'),
|
||||||
lambda preset: save_config(self._data_store),
|
lambda preset: save_config(self._data_store),
|
||||||
enabled=True,
|
|
||||||
no_store=True)
|
no_store=True)
|
||||||
self._menu_options['install'] = \
|
self._menu_options['install'] = \
|
||||||
Selector(
|
Selector(
|
||||||
self._install_text(),
|
self._install_text(),
|
||||||
exec_func=lambda n,v: True if len(self._missing_configs()) == 0 else False,
|
exec_func=lambda n,v: True if len(self._missing_configs()) == 0 else False,
|
||||||
preview_func=self._prev_install_missing_config,
|
preview_func=self._prev_install_missing_config,
|
||||||
enabled=True,
|
|
||||||
no_store=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):
|
def _update_install_text(self, name :str = None, result :Any = None):
|
||||||
text = self._install_text()
|
text = self._install_text()
|
||||||
|
|
|
||||||
|
|
@ -181,6 +181,7 @@ class GeneralMenu:
|
||||||
;type preview_size: float (range 0..1)
|
;type preview_size: float (range 0..1)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
self._enabled_order = []
|
||||||
self._translation = Translation.load_nationalization()
|
self._translation = Translation.load_nationalization()
|
||||||
self.is_context_mgr = False
|
self.is_context_mgr = False
|
||||||
self._data_store = data_store if data_store is not None else {}
|
self._data_store = data_store if data_store is not None else {}
|
||||||
|
|
@ -239,10 +240,15 @@ class GeneralMenu:
|
||||||
if arg is not None:
|
if arg is not None:
|
||||||
self._menu_options[selector_name].set_current_selection(arg)
|
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):
|
def enable(self, selector_name :str, omit_if_set :bool = False , mandatory :bool = False):
|
||||||
""" activates menu options """
|
""" activates menu options """
|
||||||
if self._menu_options.get(selector_name, None):
|
if self._menu_options.get(selector_name, None):
|
||||||
self._menu_options[selector_name].set_enabled(True)
|
self._menu_options[selector_name].set_enabled(True)
|
||||||
|
self._update_enabled_order(selector_name)
|
||||||
|
|
||||||
if mandatory:
|
if mandatory:
|
||||||
self._menu_options[selector_name].set_mandatory(True)
|
self._menu_options[selector_name].set_mandatory(True)
|
||||||
self.synch(selector_name,omit_if_set)
|
self.synch(selector_name,omit_if_set)
|
||||||
|
|
@ -372,7 +378,15 @@ class GeneralMenu:
|
||||||
if self._verify_selection_enabled(name):
|
if self._verify_selection_enabled(name):
|
||||||
enabled_menus[name] = selection
|
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:
|
def option(self,name :str) -> Selector:
|
||||||
# TODO check inexistent name
|
# TODO check inexistent name
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,9 @@ def ask_user_questions():
|
||||||
archinstall.SysCommand('timedatectl set-ntp true')
|
archinstall.SysCommand('timedatectl set-ntp true')
|
||||||
|
|
||||||
global_menu = archinstall.GlobalMenu(data_store=archinstall.arguments)
|
global_menu = archinstall.GlobalMenu(data_store=archinstall.arguments)
|
||||||
|
|
||||||
|
global_menu.enable('archinstall-language')
|
||||||
|
|
||||||
global_menu.enable('keyboard-layout')
|
global_menu.enable('keyboard-layout')
|
||||||
|
|
||||||
# Set which region to download packages from during the installation
|
# 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('additional-repositories')
|
||||||
|
|
||||||
|
global_menu.enable('__separator__')
|
||||||
|
|
||||||
|
global_menu.enable('save_config')
|
||||||
|
global_menu.enable('install')
|
||||||
|
global_menu.enable('abort')
|
||||||
|
|
||||||
global_menu.run()
|
global_menu.run()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue