aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/extras/display/menu.py
diff options
context:
space:
mode:
Diffstat (limited to 'klippy/extras/display/menu.py')
-rw-r--r--klippy/extras/display/menu.py44
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