changeset 151:1e35c24708dd

Allow to configure the action keys Use new config and keybinding classes to allow to configure the action keys in the states. This change decouples the actual action keys from the state transtitions.
author Björn Ricks <bjoern.ricks@intevation.de>
date Thu, 06 Dec 2012 12:30:27 +0100
parents 7ab5b887a7c5
children 7ffcd2ea92e3
files getan/states.py
diffstat 1 files changed, 46 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/getan/states.py	Thu Dec 06 12:28:31 2012 +0100
+++ b/getan/states.py	Thu Dec 06 12:30:27 2012 +0100
@@ -26,6 +26,7 @@
     def __init__(self, controller, view):
         self.controller = controller
         self.view       = view
+        self.config = controller.get_config()
 
     def msg(self, key):
         return self.messages[key]
@@ -33,16 +34,17 @@
 
 class ProjectState(State):
     def keypress(self, key):
+        keys = self.config.get_keybinding()
         logger.debug("ProjectState: handle key '%r'" % key)
-        if 'f1' in key:
+        if keys.get_switch_time_mode() in key:
             self.view.switch_time_mode()
             return self
 
-        if 'f2' in key:
+        if keys.get_switch_project_order() in key:
             self.view.switch_project_order()
             return self
 
-        if 'tab' in key:
+        if keys.get_switch_lists() in key:
             if not self.controller.entries_view.rows:
                 return self
             self.controller.entries_view.focused = 0
@@ -50,10 +52,10 @@
             return DefaultEntryListState(self, self.controller,
                                   self.controller.entries_view)
 
-        if 'up' in key:
+        if keys.get_entry_up() in key:
             return self.up()
 
-        if 'down' in key:
+        if keys.get_entry_down() in key:
             return self.down()
 
     def up(self):
@@ -73,17 +75,18 @@
 
     def keypress(self, key):
         logger.debug("PausedProjectsState: handle key '%r'" % key)
+        keys = self.config.get_keybinding()
         ret = super(PausedProjectsState, self).keypress(key)
         if ret:
             return ret
 
-        if 'enter' in key:
+        if keys.get_enter() in key:
             return self.select()
 
-        if 'insert' in key:
+        if keys.get_insert() in key:
             return AddProjectNameState(self.controller, self.view)
 
-        if 'esc' in key:
+        if keys.get_escape() in key:
             return ExitState(self.controller, self.view)
 
         else:
@@ -123,7 +126,8 @@
         return self
 
     def keypress(self, key):
-        if 'esc' in key:
+        keys = self.config.get_keybinding()
+        if keys.get_escape() in key:
             self.reset()
             return PausedProjectsState(self.controller, self.view)
 
@@ -187,6 +191,7 @@
 
     def handle_signal(self, signum, frame):
         proj = self.project
+        keys = self.config.get_keybinding()
         if not proj:
             return
         if not self.break_start:
@@ -209,33 +214,36 @@
 
     def keypress(self, key):
         logger.debug("RunningProjectsState: handle key '%r'" % key)
+        keys = self.config.get_keybinding()
         ret = super(RunningProjectsState, self).keypress(key)
         if ret:
             return ret
 
-        if 'enter' in key:
+        if keys.get_enter() in key:
             return self.stop()
-        if '+' in key:
+        if keys.get_add_time() in key:
             self.view.set_footer_text(self.msg('add_time'),
                                                'question', 1)
             self.view.frame.set_focus('footer')
             return AddTimeState(self.controller, self.view, self)
-        if '-' in key:
+        if keys.get_subtract_time() in key:
             self.view.set_footer_text(self.msg('min_time'),
                                                  'question', 1)
             self.view.frame.set_focus('footer')
             return SubtractTimeState(self.controller, self.view, self)
-        if ' ' in key and not self.break_start:
-            self.break_start = datetime.now()
-            return self
-        if ' ' in key and self.break_start:
-            self.view._total_time()
-            proj = self.project
-            if proj:
-                proj.start += datetime.now() - self.break_start
-                self.break_start = None
-                signal.signal(signal.SIGALRM, self.handle_signal)
-                signal.alarm(1)
+
+        if keys.get_pause_project() in key:
+            if not self.break_start:
+                self.break_start = datetime.now()
+                return self
+            else:
+                self.view._total_time()
+                proj = self.project
+                if proj:
+                    proj.start += datetime.now() - self.break_start
+                    self.break_start = None
+                    signal.signal(signal.SIGALRM, self.handle_signal)
+                    signal.alarm(1)
         return self
 
     def stop(self):
@@ -260,10 +268,11 @@
     def keypress(self, key):
         logger.debug("HandleUserInputState: handle key '%r'" % key)
         pos = self.footer.edit_pos
+        keys = self.config.get_keybinding()
 
-        if 'esc' in key:
+        if keys.get_escape() in key:
             return self.exit()
-        elif 'enter' in key:
+        elif keys.get_enter() in key:
             return self.enter()
         elif 'left' in key:
             self.footer.set_edit_pos(pos-1)
@@ -378,14 +387,15 @@
 
     def keypress(self, key):
         logger.debug("EntryListState: pressed key '%r'" % key)
-        if 'tab' in key:
+        keys = self.config.get_keybinding()
+        if keys.get_switch_lists() in key:
             self.view.clear()
             return self.projectlist_state
-        if 'up' in key:
+        if keys.get_entry_up() in key:
             return self.up()
-        if 'down' in key:
+        if keys.get_entry_down() in key:
             return self.down()
-        if 'enter' in key:
+        if keys.get_enter() in key:
             return self.select()
         return None
 
@@ -416,11 +426,12 @@
         if ret:
             return ret
 
-        if 'esc' in key:
+        keys = self.config.get_keybinding()
+        if keys.get_escape() in key:
             self.view.clear()
             return self.projectlist_state
 
-        if 'd' in key:
+        if keys.get_entry_delete() in key:
             if self.view.selection:
                 return DeleteEntryState(self.projectlist_state,
                                         self.controller, self.view)
@@ -428,11 +439,11 @@
                 entry = self.view.item_in_focus()
                 return DeleteEntryState(self.projectlist_state,
                                         self.controller, self.view, [entry])
-        if 'm' in key:
+        if keys.get_entry_move() in key:
             if self.view.selection:
                 return MoveEntryState(self.projectlist_state,
                                       self.controller, self.view)
-        if 'e' in key:
+        if keys.get_entry_edit() in key:
             entry = self.view.item_in_focus()
             if entry:
                 return EditEntryState(self.projectlist_state,
@@ -491,6 +502,7 @@
         self.project_view.reset_footer()
 
     def keypress(self, key):
+        keys = self.config.get_keybinding()
         if 'y' in key and self.proj:
             logger.debug("MoveEntryState: move selected entries.")
             self.controller.move_selected_entries(self.proj)
@@ -506,7 +518,7 @@
             return DefaultEntryListState(self.projectlist_state,
                                          self.controller, self.view)
 
-        if 'esc' in key:
+        if keys.get_escape() in key:
             self.view.set_footer_text('', 'entry_footer')
             self.reset_project_footer()
             return DefaultEntryListState(self.projectlist_state,
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)