diff options
author | Janar Sööt <janar.soot@gmail.com> | 2018-12-20 21:02:24 +0200 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2019-01-07 21:38:53 -0500 |
commit | 005cbe157ac74e79043a55cf31bd04e67f7e1707 (patch) | |
tree | b55beee8eb4e634870607702fc90a6507e4590e6 /klippy/extras/display/menu.py | |
parent | b9cccc5959ddb14211103f5f36676340649af9ce (diff) | |
download | kutter-005cbe157ac74e79043a55cf31bd04e67f7e1707.tar.gz kutter-005cbe157ac74e79043a55cf31bd04e67f7e1707.tar.xz kutter-005cbe157ac74e79043a55cf31bd04e67f7e1707.zip |
menu: allow names in card content and simplify define single card decks
Signed-off-by: Janar Sööt <janar.soot@gmail.com>
Diffstat (limited to 'klippy/extras/display/menu.py')
-rw-r--r-- | klippy/extras/display/menu.py | 44 |
1 files changed, 41 insertions, 3 deletions
diff --git a/klippy/extras/display/menu.py b/klippy/extras/display/menu.py index 2830df99..07f3f3b8 100644 --- a/klippy/extras/display/menu.py +++ b/klippy/extras/display/menu.py @@ -5,7 +5,7 @@ # Copyright (C) 2018 Janar Sööt <janar.soot@gmail.com> # # This file may be distributed under the terms of the GNU GPLv3 license. -import os, logging, sys, ast, re +import os, logging, sys, ast, re, string class error(Exception): @@ -573,7 +573,7 @@ class MenuGroup(MenuContainer): self._sep = sep self._show_back = False self.selected = None - self.items = config.get('items') + self.items = config.get('items', '') def is_accepted(self, item): return (super(MenuGroup, self).is_accepted(item) @@ -739,7 +739,7 @@ class MenuList(MenuContainer): super(MenuList, self).__init__(manager, config, namespace) self._enter_gcode = config.get('enter_gcode', None) self._leave_gcode = config.get('leave_gcode', None) - self.items = config.get('items') + self.items = config.get('items', '') def is_accepted(self, item): return (super(MenuList, self).is_accepted(item) @@ -799,6 +799,32 @@ class MenuCard(MenuGroup): def __init__(self, manager, config, namespace=''): super(MenuCard, self).__init__(manager, config, namespace) self.content = config.get('content') + if not self.items: + self.content = self._parse_content_items(self.content) + + def _parse_content_items(self, content): + formatter = string.Formatter() + out = "" + items = [] + + try: + parsed_content = list(formatter.parse(content)) + except Exception: + logging.exception("Card content parsing error") + + for part in parsed_content: + # (literal_text, field_name, format_spec, conversion) + out += part[0] + if part[1]: + out += "{%s%s%s}" % ( + len(items), + ("!" + part[3]) if part[3] else '', + (":" + part[2]) if part[2] else '', + ) + items.append(str(part[1])) + + self.items = "\n".join(items) + return out def _names_aslist(self): return self._lines_aslist(self.items) @@ -853,6 +879,18 @@ class MenuDeck(MenuList): self.menu = None self._show_back = False self._show_title = False + if not self.items: + card = MenuCard(self._manager, { + 'name': ' '.join([self._name, 'Card']), + 'use_cursor': config.get('use_cursor', 'false'), + 'allow_without_selection': config.get( + 'allow_without_selection', 'true'), + 'content': config.get('content') + }, self.namespace) + name = " ".join( + config.get_name().split()[1:]) + "__singlecarddeck__" + self._manager.add_menuitem(name, card) + self.items = name def _populate_menu(self): self.menu = None |