From 22307bc4ae32770235ce853d60826f9d97b9e135 Mon Sep 17 00:00:00 2001 From: Sebastian Lohff Date: Fri, 28 Aug 2020 00:26:32 +0200 Subject: [PATCH] Always use text as item if no item was specified When an option is passed without an item attached we now always use the label as item. This was the behaviour for __init__() and is now also the behaviour of add_option(). --- clintermission/climenu.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/clintermission/climenu.py b/clintermission/climenu.py index 2f24632..c37e293 100644 --- a/clintermission/climenu.py +++ b/clintermission/climenu.py @@ -70,6 +70,10 @@ class CliMenuTheme: BOLD_HIGHLIGHT = CliMenuStyle(header_style='bold', highlight_style='bold fg:black bg:white') +class _EmptyParameter: + pass + + class CliMenu: default_style = CliMenuTheme.BASIC default_cursor = CliMenuCursor.TRIANGLE @@ -110,7 +114,7 @@ class CliMenu: elif isinstance(option, dict): self.add_option(**option) elif isinstance(option, str): - self.add_option(option, option) + self.add_option(option) else: raise ValueError("Option needs to be either tuple, dict or string, found '{}' of type {}" .format(option, type(option))) @@ -122,7 +126,9 @@ class CliMenu: for text in title.split('\n'): self._items.append(_CliMenuHeader(text, indent=indent)) - def add_option(self, text, item=None): + def add_option(self, text, item=_EmptyParameter): + if item == _EmptyParameter: + item = text self._items.append(_CliMenuOption(text, self._item_num, item=item)) self._item_num += 1 @@ -334,7 +340,7 @@ class CliMultiMenu(CliMenu): self._selection_icons = selection_icons if selection_icons is not None else self.default_selection_icons super().__init__(*args, **kwargs) - def add_option(self, text, item=None, selected=False): + def add_option(self, text, item=_EmptyParameter, selected=False): super().add_option(text, item) if selected: self._multi_selected.append(len(self._items) - 1)