]> git.ipfire.org Git - people/ms/bricklayer.git/commitdiff
tui: Take a dictionary with values and description
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 5 May 2021 18:47:07 +0000 (18:47 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 5 May 2021 18:47:07 +0000 (18:47 +0000)
This makes it easier to let the user choose between a number of options

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/python/lang.py
src/python/tui/__init__.py

index 896f0c63934e351bbf65170f974fde4bcd4afbcf..6387a531930531e2753ccd81de2a6df892eddbb3 100644 (file)
@@ -27,10 +27,10 @@ from .i18n import _, N_
 # Setup logging
 log = logging.getLogger("bricklayer.lang")
 
-supported_languages = (
-       ( "de_DE", N_("Deutsch")),
-       ( "en_US", N_("English (United States)")),
-)
+supported_languages = {
+       "de_DE" : N_("Deutsch"),
+       "en_US" : N_("English (United States)"),
+}
 
 class SelectLanguage(step.Step):
        """
@@ -45,20 +45,11 @@ class SelectLanguage(step.Step):
                self.current_language = os.environ.get("LANG")
 
        def run(self, tui):
-               # Fetch a list of all langauges
-               languages = [name for code, name in supported_languages]
-
                # Let the user select
-               choice = tui.select(
+               code = tui.select(
                        _("Language Selection"),
                        _("Select the language you wish to use for the installation"),
-                       languages, buttons=(_("Select"),)
+                       supported_languages, buttons=(_("Select"),)
                )
 
-               # Pick language from the list
-               try:
-                       code, name = supported_languages[choice]
-               except ValueError:
-                       pass
-
-               log.info("Language selected: %s (%s)" % (name, code))
+               log.info("Language selected: %s" % code)
index bb197c9ed9b7ef1111a4688b1c624e84d7d1fa05..b0d492d449df44c85ef2430aab163556e84b121e 100644 (file)
@@ -108,14 +108,22 @@ class Tui(object):
                return ProgressWindow(self, *args, **kwargs)
 
        def select(self, title, text, items, buttons=None, default=None, help=None):
+               # Convert items into a list which is sorted by its values
+               items = sorted(items.items(), key=lambda item: item[1])
+
+               # Set some default buttons
                if buttons is None:
                        buttons = (_("Select"), _("Cancel"))
 
-               button, item = snack.ListboxChoiceWindow(self.screen, title, text, items,
-                       buttons=buttons, default=default, help=help)
+               # Show the window
+               button, item = snack.ListboxChoiceWindow(self.screen, title, text,
+                       [value for key, value in items], buttons=buttons, default=default, help=help)
+
+               # Find the selected item
+               key, value = items[item]
 
-               # Return the selected item
-               return item
+               # Return the key
+               return key
 
 
 class ProgressWindow(object):