Browse Source

let left pane fill remaining space and add basic calculator function to EditFloat boxes

Daniel Sheffield 3 years ago
parent
commit
2c8417bf4e
1 changed files with 51 additions and 7 deletions
  1. 51 7
      grocery_transactions.py

+ 51 - 7
grocery_transactions.py

@@ -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,