|
@@ -115,6 +115,7 @@ def suggestions(name, exclude=NON_IDENTIFIER_COLUMNS, **kwargs):
|
|
|
def show_or_exit(key):
|
|
|
if isinstance(key, tuple):
|
|
|
return
|
|
|
+
|
|
|
if key in ('esc'):
|
|
|
raise urwid.ExitMainLoop()
|
|
|
|
|
@@ -139,7 +140,7 @@ class AutoCompleteEdit(urwid.Edit):
|
|
|
self.apply = apply_change_func
|
|
|
|
|
|
def keypress(self, size, key):
|
|
|
- if key != 'tab':
|
|
|
+ if key != 'enter':
|
|
|
return super(AutoCompleteEdit, self).keypress(size, key)
|
|
|
self.apply(self.name)
|
|
|
|
|
@@ -154,21 +155,54 @@ class AutoCompleteFloatEdit(numedit.FloatEdit):
|
|
|
self.name = name
|
|
|
title = name.title()
|
|
|
passthrough = title
|
|
|
+
|
|
|
+ self.op = '='
|
|
|
|
|
|
super(AutoCompleteFloatEdit, self).__init__(passthrough, *args, **kwargs)
|
|
|
+ self.set_caption('=')
|
|
|
self.apply = apply_change_func
|
|
|
|
|
|
+ def set_op(self, op):
|
|
|
+ self.op = op
|
|
|
+ self.last_val = self.value()
|
|
|
+ self.set_edit_text('')
|
|
|
+ self.set_caption(self.op)
|
|
|
+
|
|
|
+ def calc(self):
|
|
|
+ x = self.last_val
|
|
|
+ y = self.value()
|
|
|
+ op = self.op
|
|
|
+ if op == '+':
|
|
|
+ z = x + y
|
|
|
+ elif op == '-':
|
|
|
+ z = x - y
|
|
|
+ elif op == '*':
|
|
|
+ z = x * y
|
|
|
+ elif op == '/':
|
|
|
+ z = x / y
|
|
|
+
|
|
|
+ self.op = '='
|
|
|
+ self.set_caption(self.op)
|
|
|
+ self.set_edit_text(f'{z:.2f}')
|
|
|
+
|
|
|
def keypress(self, size, key):
|
|
|
if isinstance(key, tuple):
|
|
|
return
|
|
|
-
|
|
|
+ ops = ('+', '-', '*', '/',)
|
|
|
if key == 'tab':
|
|
|
self.apply(self.name)
|
|
|
return
|
|
|
- elif key in ('esc', 'up', 'down', 'left', 'right',):
|
|
|
- return super(AutoCompleteFloatEdit, self).keypress(size, key)
|
|
|
- else:
|
|
|
+ elif key in ops:
|
|
|
+ if self.op in ops:
|
|
|
+ self.calc()
|
|
|
+ self.set_op(key)
|
|
|
return
|
|
|
+ elif key in ('=', 'enter',):
|
|
|
+ self.calc()
|
|
|
+ return
|
|
|
+ else:
|
|
|
+ return super(AutoCompleteFloatEdit, self).keypress(size, key)
|
|
|
+
|
|
|
|
|
|
class GroceryTransactionEditor(urwid.WidgetPlaceholder):
|
|
|
def __init__(self, fields):
|
|
@@ -181,6 +215,16 @@ class GroceryTransactionEditor(urwid.WidgetPlaceholder):
|
|
|
self.widgets = dict()
|
|
|
self.show('transaction')
|
|
|
|
|
|
+ def keypress(self, size, key):
|
|
|
+ if isinstance(key, tuple):
|
|
|
+ return
|
|
|
+
|
|
|
+ if key == 'tab':
|
|
|
+ # need to change this to self.advance_focus
|
|
|
+ return super(GroceryTransactionEditor, self).keypress(size, 'enter')
|
|
|
+ else:
|
|
|
+ return super(GroceryTransactionEditor, self).keypress(size, key)
|
|
|
+
|
|
|
def _init_data(self, fields):
|
|
|
self.data = OrderedDict([
|
|
|
(k, '') for k in fields
|
|
@@ -322,7 +366,7 @@ class GroceryTransactionEditor(urwid.WidgetPlaceholder):
|
|
|
fields = dict([
|
|
|
(k, urwid.LineBox(urwid.AttrMap(self.edit_fields[k], 'streak'), title=k.title(), title_align='left')) for k in self.edit_fields
|
|
|
])
|
|
|
- side_pane_widget = (15, urwid.Pile([
|
|
|
+ side_pane_widget = (12, urwid.Pile([
|
|
|
fields[r] if r is not None else urwid.Divider() for r in side_pane
|
|
|
]))
|
|
|
main_pane_widgets = []
|
|
@@ -338,7 +382,7 @@ class GroceryTransactionEditor(urwid.WidgetPlaceholder):
|
|
|
widgets.append(urwid.Divider())
|
|
|
main_pane_widgets.append(urwid.Columns(widgets))
|
|
|
|
|
|
- main_pane_widget = (62, urwid.Pile(main_pane_widgets))
|
|
|
+ main_pane_widget = urwid.Pile(main_pane_widgets)
|
|
|
|
|
|
widget = urwid.Pile([
|
|
|
banner,
|