|
@@ -35,6 +35,18 @@ from ..db_utils import QueryManager
|
|
from . import ActivityManager, show_or_exit
|
|
from . import ActivityManager, show_or_exit
|
|
from .Rating import Rating
|
|
from .Rating import Rating
|
|
|
|
|
|
|
|
+def to_numbered_field(x):
|
|
|
|
+ if len(x[0].split('#', 1)) > 1:
|
|
|
|
+ name, idx = x[0].split('#', 1)
|
|
|
|
+ idx = int(idx)
|
|
|
|
+ else:
|
|
|
|
+ name, idx = x[0], 0
|
|
|
|
+
|
|
|
|
+ return (name, int(idx)), x[1]
|
|
|
|
+
|
|
|
|
+def in_same_row(row):
|
|
|
|
+ return lambda x: x[0][1] == int(row)
|
|
|
|
+
|
|
class RecipeEditor(FocusWidget):
|
|
class RecipeEditor(FocusWidget):
|
|
|
|
|
|
def keypress(self, size, key):
|
|
def keypress(self, size, key):
|
|
@@ -53,12 +65,20 @@ class RecipeEditor(FocusWidget):
|
|
|
|
|
|
def apply_choice(self, name, value):
|
|
def apply_choice(self, name, value):
|
|
self.apply_changes(name, value)
|
|
self.apply_changes(name, value)
|
|
- for k,v in self.data.items():
|
|
|
|
- if k == name or v:
|
|
|
|
|
|
+ if len(name.split('#', 1)) > 1:
|
|
|
|
+ _, row = name.split('#', 1)
|
|
|
|
+ data = dict(filter(
|
|
|
|
+ in_same_row(row),
|
|
|
|
+ map(to_numbered_field, self.data.items())
|
|
|
|
+ ))
|
|
|
|
+
|
|
|
|
+ for k,v in data.items():
|
|
|
|
+ if f'{k[0]}#{k[1]}' == name or v:
|
|
continue
|
|
continue
|
|
- options = self.query_manager.unique_suggestions(k, **self.data)
|
|
|
|
|
|
+ _data = dict(map(lambda x: (x[0][0], x[1]), data.items()))
|
|
|
|
+ options = self.query_manager.unique_suggestions(k[0], **_data)
|
|
if len(options) == 1:
|
|
if len(options) == 1:
|
|
- self.apply_changes(k, list(options)[0])
|
|
|
|
|
|
+ self.apply_changes(f'{k[0]}#{k[1]}', list(options)[0])
|
|
|
|
|
|
def apply_changes(self, name, value):
|
|
def apply_changes(self, name, value):
|
|
self.data = {
|
|
self.data = {
|
|
@@ -111,7 +131,7 @@ class RecipeEditor(FocusWidget):
|
|
}
|
|
}
|
|
self.ingredients = [
|
|
self.ingredients = [
|
|
(AutoCompleteEdit(('bg', 'product#0')), AutoCompleteEdit(('bg', 'unit#0'))),
|
|
(AutoCompleteEdit(('bg', 'product#0')), AutoCompleteEdit(('bg', 'unit#0'))),
|
|
- #(AutoCompleteEdit(('bg', 'product#1')), AutoCompleteEdit(('bg', 'unit#1'))),
|
|
|
|
|
|
+ (AutoCompleteEdit(('bg', 'product#1')), AutoCompleteEdit(('bg', 'unit#1'))),
|
|
]
|
|
]
|
|
self.organic = NoTabCheckBox(('bg', "Organic"), state='mixed')
|
|
self.organic = NoTabCheckBox(('bg', "Organic"), state='mixed')
|
|
self.instructions = Edit(f'', multiline=True, allow_tab=True)
|
|
self.instructions = Edit(f'', multiline=True, allow_tab=True)
|
|
@@ -128,12 +148,17 @@ class RecipeEditor(FocusWidget):
|
|
for idx, widget in enumerate(self.ingredients):
|
|
for idx, widget in enumerate(self.ingredients):
|
|
connect_signal(widget[0], 'postchange', lambda _,v: self.update())
|
|
connect_signal(widget[0], 'postchange', lambda _,v: self.update())
|
|
connect_signal(widget[0], 'apply', lambda w, name: autocomplete_cb(
|
|
connect_signal(widget[0], 'apply', lambda w, name: autocomplete_cb(
|
|
- w, name, self.data)
|
|
|
|
- )
|
|
|
|
|
|
+ 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], 'postchange', lambda _,v: self.update())
|
|
connect_signal(widget[1], 'postchange', lambda _,v: self.update())
|
|
connect_signal(widget[1], 'apply', lambda w, name: autocomplete_cb(
|
|
connect_signal(widget[1], 'apply', lambda w, name: autocomplete_cb(
|
|
- w, name, self.data)
|
|
|
|
- )
|
|
|
|
|
|
+ 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(self.buttons['clear'], 'click', lambda x: self.clear().update())
|
|
connect_signal(self.buttons['clear'], 'click', lambda x: self.clear().update())
|
|
connect_signal(self.buttons['exit'], 'click', lambda x: show_or_exit('esc'))
|
|
connect_signal(self.buttons['exit'], 'click', lambda x: show_or_exit('esc'))
|