tab support finally lands in ceo jbroman/tab-key
authorJeremy Roman <jbroman@csclub.uwaterloo.ca>
Sat, 25 Sep 2010 00:31:00 +0000 (20:31 -0400)
committerJeremy Roman <jbroman@csclub.uwaterloo.ca>
Sat, 25 Sep 2010 00:31:00 +0000 (20:31 -0400)
ceo/urwid/widgets.py

index 5d04e0b..36254f3 100644 (file)
@@ -56,8 +56,16 @@ class CaptionedText(urwid.Text):
 
 class SingleEdit(urwid.Edit):
     def keypress(self, size, key):
 
 class SingleEdit(urwid.Edit):
     def keypress(self, size, key):
-        if key == 'enter':
-            return urwid.Edit.keypress(self, size, 'down')
+        key_mappings = {
+            'enter': 'down',
+            'tab': 'down',
+            'shift tab': 'up',
+            'ctrl a': 'home',
+            'ctrl e': 'end'
+        }
+        
+        if key in key_mappings:
+            return urwid.Edit.keypress(self, size, key_mappings[key])
         else:
             return urwid.Edit.keypress(self, size, key)
 
         else:
             return urwid.Edit.keypress(self, size, key)
 
@@ -140,14 +148,23 @@ class PassEdit(SingleEdit):
         text = urwid.Edit.get_text(self)
         return (self.caption + " " * len(self.get_edit_text()), text[1])
 
         text = urwid.Edit.get_text(self)
         return (self.caption + " " * len(self.get_edit_text()), text[1])
 
+class EnhancedButton(urwid.Button):
+    def keypress(self, size, key):
+        if key == 'tab':
+            return urwid.Button.keypress(self, size, 'down')
+        elif key == 'shift tab':
+            return urwid.Button.keypress(self, size, 'up')
+        else:
+            return urwid.Button.keypress(self, size, key)
+
 class Wizard(urwid.WidgetWrap):
     def __init__(self):
         self.selected = None
         self.panels = []
 
         self.panelwrap = urwid.WidgetWrap( urwid.SolidFill() )
 class Wizard(urwid.WidgetWrap):
     def __init__(self):
         self.selected = None
         self.panels = []
 
         self.panelwrap = urwid.WidgetWrap( urwid.SolidFill() )
-        self.back = urwid.Button("Back", self.back)
-        self.next = urwid.Button("Next", self.next)
+        self.back = EnhancedButton("Back", self.back)
+        self.next = EnhancedButton("Next", self.next)
         self.buttons = urwid.Columns( [ self.back, self.next ], dividechars=3, focus_column=1 )
         pad = urwid.Padding( self.buttons, ('fixed right', 2), 19 )
         self.pile = urwid.Pile( [self.panelwrap, ('flow', pad)], 0 )
         self.buttons = urwid.Columns( [ self.back, self.next ], dividechars=3, focus_column=1 )
         pad = urwid.Padding( self.buttons, ('fixed right', 2), 19 )
         self.pile = urwid.Pile( [self.panelwrap, ('flow', pad)], 0 )