|
@@ -44,7 +44,12 @@ def to_numbered_field(x):
|
|
|
|
|
|
return (name, int(idx)), x[1]
|
|
|
|
|
|
-def in_same_row(row):
|
|
|
+def to_unnumbered_field(x):
|
|
|
+ return x[0][0], x[1]
|
|
|
+
|
|
|
+def in_same_row(name):
|
|
|
+ if len(name.split('#', 1)) > 1:
|
|
|
+ _, row = name.split('#', 1)
|
|
|
return lambda x: x[0][1] == int(row)
|
|
|
|
|
|
class RecipeEditor(FocusWidget):
|
|
@@ -65,10 +70,9 @@ class RecipeEditor(FocusWidget):
|
|
|
|
|
|
def apply_choice(self, name, value):
|
|
|
self.apply_changes(name, value)
|
|
|
- if len(name.split('#', 1)) > 1:
|
|
|
- _, row = name.split('#', 1)
|
|
|
+
|
|
|
data = dict(filter(
|
|
|
- in_same_row(row),
|
|
|
+ in_same_row(name),
|
|
|
map(to_numbered_field, self.data.items())
|
|
|
))
|
|
|
|
|
@@ -120,9 +124,6 @@ class RecipeEditor(FocusWidget):
|
|
|
def __init__(self,
|
|
|
activity_manager: ActivityManager,
|
|
|
query_manager: QueryManager,
|
|
|
- autocomplete_cb: Callable[[
|
|
|
- Union[AutoCompleteEdit, AutoCompleteFloatEdit], str, dict
|
|
|
- ], None],
|
|
|
):
|
|
|
self.buttons = {
|
|
|
'clear': Button(('streak', 'Clear')),
|
|
@@ -142,22 +143,25 @@ class RecipeEditor(FocusWidget):
|
|
|
]
|
|
|
|
|
|
self.query_manager = query_manager
|
|
|
+ self.autocomplete_options = lambda name, data: self.query_manager.unique_suggestions(name.split('#', 1)[0], **data)
|
|
|
+ self.autocomplete_callback = lambda widget, options: len(options) > 0 and widget._emit('open', options)
|
|
|
connect_signal(self.organic, 'postchange', lambda _,v: self.update())
|
|
|
|
|
|
# todo: call this when adding new ingredient
|
|
|
for idx, widget in enumerate(self.ingredients):
|
|
|
connect_signal(widget[0], 'postchange', lambda _,v: self.update())
|
|
|
- connect_signal(widget[0], 'apply', lambda w, name: autocomplete_cb(
|
|
|
- w, name.split('#', 1)[0], dict(map(lambda x: (x[0][0], x[1]), filter(
|
|
|
- in_same_row(name.split('#', 1)[1]), map(to_numbered_field, self.data.items())
|
|
|
- )))
|
|
|
+ connect_signal(widget[0], 'apply', lambda w, name: self.autocomplete_callback(
|
|
|
+ w, self.autocomplete_options(name, dict(map(
|
|
|
+ to_unnumbered_field,
|
|
|
+ filter(in_same_row(name), map(to_numbered_field, self.data.items())
|
|
|
+ ))))
|
|
|
))
|
|
|
connect_signal(widget[1], 'postchange', lambda _,v: self.update())
|
|
|
- connect_signal(widget[1], 'apply', lambda w, name: autocomplete_cb(
|
|
|
- w, name.split('#', 1)[0], dict(map(lambda x: (x[0][0], x[1]), filter(
|
|
|
- in_same_row(name.split('#', 1)[1]),
|
|
|
- map(to_numbered_field, self.data.items())
|
|
|
- )))
|
|
|
+ connect_signal(widget[1], 'apply', lambda w, name: self.autocomplete_callback(
|
|
|
+ w, self.autocomplete_options(name, dict(map(
|
|
|
+ to_unnumbered_field,
|
|
|
+ filter(in_same_row(name), map(to_numbered_field, self.data.items())
|
|
|
+ ))))
|
|
|
))
|
|
|
|
|
|
connect_signal(self.buttons['clear'], 'click', lambda x: self.clear().update())
|