Browse Source

Changed how to handle hotkeys to support custom hotkey mapping

Gyedo Jeon 16 years ago
parent
commit
df47bb697e
1 changed files with 75 additions and 79 deletions
  1. 75 79
      direct/src/directtools/DirectSession.py

+ 75 - 79
direct/src/directtools/DirectSession.py

@@ -176,6 +176,8 @@ class DirectSession(DirectObject):
         keyList.extend(map(chr, range(48, 58)))
         keyList.extend(["`", "-", "=", "[", "]", ";", "'", ",", ".", "/", "\\"])
 
+        self.specialKeys = ['escape', 'delete', 'page_up', 'page_down']
+
         def addCtrl(a):
             return "control-%s"%a
 
@@ -185,13 +187,8 @@ class DirectSession(DirectObject):
         self.keyEvents = keyList[:]
         self.keyEvents.extend(map(addCtrl, keyList))
         self.keyEvents.extend(map(addShift, keyList))        
-        self.keyEvents.extend(['escape', 'delete', 'page_up', 'page_down'])
+        self.keyEvents.extend(self.specialKeys)
 
-##         self.keyEvents = ['escape', 'delete', 'page_up', 'page_down',
-##                           '[', '{', ']', '}',
-##                           'shift-a', 'b', 'control-f',
-##                           'l', 'shift-l', 'o', 'p', 'r',
-##                           'shift-r', 's', 't', 'v', 'w']
         self.mouseEvents = ['mouse1', 'mouse1-up',
                             'shift-mouse1', 'shift-mouse1-up',
                             'control-mouse1', 'control-mouse1-up',
@@ -206,33 +203,54 @@ class DirectSession(DirectObject):
                             'alt-mouse3', 'alt-mouse3-up',
                             ]
 
-        self.hotKeyEvents = {
-            'c': 'DIRECT-centerCamIn',
-            'f': 'DIRECT-fitOnWidget',
-            'h': 'DIRECT-homeCam',
-            'shift-v': 'DIRECT-toggleMarkerVis',
-            'm': 'DIRECT-moveToFit',
-            'n': 'DIRECT-pickNextCOA',
-            'u': 'DIRECT-orbitUprightCam',
-            'shift-u': 'DIRECT-uprightCam',
-            '1': 'DIRECT-spwanMoveToView-1',
-            '2': 'DIRECT-spwanMoveToView-2',
-            '3': 'DIRECT-spwanMoveToView-3',
-            '4': 'DIRECT-spwanMoveToView-4',
-            '5': 'DIRECT-spwanMoveToView-5',
-            '6': 'DIRECT-spwanMoveToView-6',
-            '7': 'DIRECT-spwanMoveToView-7',
-            '8': 'DIRECT-spwanMoveToView-8',
-            '9': 'DIRECT-swingCamAboutWidget-0',
-            '0': 'DIRECT-swingCamAboutWidget-1',
-            '`': 'DIRECT-removeManipulateCameraTask',
-            '=': 'DIRECT-zoomInCam',
-            '+': 'DIRECT-zoomInCam',
-            '_': 'DIRECT-zoomOutCam',
-            '-': 'DIRECT-zoomOutCam',
-            'delete': 'DIRECT-delete',
-            '.': 'DIRECT-widgetScaleUp',
-            ',': 'DIRECT-widgetScaleDown',
+        self.hotKeyMap = {
+            'c': ('Center Camera', 0, 'DIRECT-centerCamIn'),
+            'f': ('Fit on Widget', 0, 'DIRECT-fitOnWidget'),
+            'h': ('Move Camera to ', 0, 'DIRECT-homeCam'),
+            'shift-v': ('Toggle Marker', 0, 'DIRECT-toggleMarkerVis'),
+            'm': ('Move to fit', 0, 'DIRECT-moveToFit'),
+            'n': ('Pick Next COA', 0, 'DIRECT-pickNextCOA'),
+            'u': ('Orbit Upright Camera', 0, 'DIRECT-orbitUprightCam'),
+            'shift-u': ('Upright Camera', 0, 'DIRECT-uprightCam'),
+            '1': ('Move Camera to View 1', 0, 'DIRECT-spwanMoveToView-1'),
+            '2': ('Move Camera to View 2', 0, 'DIRECT-spwanMoveToView-2'),
+            '3': ('Move Camera to View 3', 0, 'DIRECT-spwanMoveToView-3'),
+            '4': ('Move Camera to View 4', 0, 'DIRECT-spwanMoveToView-4'),
+            '5': ('Move Camera to View 5', 0, 'DIRECT-spwanMoveToView-5'),
+            '6': ('Move Camera to View 6', 0, 'DIRECT-spwanMoveToView-6'),
+            '7': ('Move Camera to View 7', 0, 'DIRECT-spwanMoveToView-7'),
+            '8': ('Move Camera to View 8', 0, 'DIRECT-spwanMoveToView-8'),
+            '9': ('Rotate Camera About widget 90 degrees Counterclockwise', 0, 'DIRECT-swingCamAboutWidget-0'),
+            '0': ('Rotate Camera About widget 90 degrees Clockwise', 0, 'DIRECT-swingCamAboutWidget-1'),
+            '`': ('Remove ManipulateCameraTask', 0, 'DIRECT-removeManipulateCameraTask'),
+            '=': ('Zoom In', 0, 'DIRECT-zoomInCam'),
+            'shift-=': ('Zoom In', 0, 'DIRECT-zoomInCam'),
+            'shift-_': ('Zoom Out', 0, 'DIRECT-zoomOutCam'),
+            '-': ('Zoom Out', 0, 'DIRECT-zoomOutCam'),
+            'delete': ('Delete', 0, 'DIRECT-delete'),
+            '.': ('Scale Up Widget', 0, 'DIRECT-widgetScaleUp'),
+            ',': ('Scale Down Widget', 0, 'DIRECT-widgetScaleDown'),
+
+            'page_up': ('Up Ancestry', 'self.upAncestry()', 0),
+            'page_down': ('Down Ancestry', 'self.downAncestry()', 0),
+            'escape': ('Deselect All', 'self.deselectAll()', 0),
+            'v': ('Toggle Manipulating Widget', 'self.toggleWidgetVis()', 0),
+            'b': ('Toggle Backface', 'base.toggleBackface()', 0),
+            'control-f': ('Flash', 'self.flash(last)', 0),
+            'l': ('Toggle lights', 'self.lights.toggle()', 0),
+            'shift-l': ('Toggle COA Lock', 'self.cameraControl.toggleCOALock()', 0),
+            'o': ('Toggle OOBE', 'self.oobe()', 0),
+            'p': ('Set Active Parent', 'self.doSetActiveParent()', 0),
+            'r': ('Wrt Reparent', 'self.doWrtReparent()', 0),
+            'shift-r': ('Reparent', 'self.doReparent()', 0),
+            's': ('Select', 'self.doSelect()', 0),
+            't': ('Toggle Textures', 'base.toggleTexture()', 0),
+            'shift-a': ('Toggle Vis all', 'self.selected.toggleVisAll()', 0),
+            'w': ('Toggle Wireframe', 'base.toggleWireframe()', 0),
+            '[': ('Undo', 'self.undo()', 0),
+            'shift-[': ('Undo', 'self.undo()', 0),
+            ']': ('Redo', 'self.redo()', 0),
+            'shift-]': ('Redo', 'self.redo()', 0),
             }
 
         self.passThroughKeys = ['v','b','l','p', 'r', 'shift-r', 's', 't','shift-a', 'w'] 
@@ -451,8 +469,14 @@ class DirectSession(DirectObject):
                     break
 
         # Deal with keyboard and mouse input
-        if input in self.hotKeyEvents.keys():
-            messenger.send(self.hotKeyEvents[input])
+        if input in self.hotKeyMap.keys():
+            keyDesc = self.hotKeyMap[input]
+            if len(keyDesc) == 3:
+                if keyDesc[1] == 0: # [gjeon] when we need to send a message
+                    messenger.send(keyDesc[2])
+                else:  # [gjeon] when we need to call a function
+                    eval(keyDesc[1])
+
         elif input == 'mouse1-up':
             self.fMouse1 = 0 # [gjeon] to update alt key information while mouse1 is pressed
             messenger.send('DIRECT-mouse1Up')
@@ -492,56 +516,28 @@ class DirectSession(DirectObject):
                 messenger.send('DIRECT-mouse1', sentArgs = [modifiers])
         elif input == 'alt-up':
             self.fAlt = 0
-        elif input == 'page_up':
-            self.upAncestry()
-        elif input == 'page_down':
-            self.downAncestry()
-        elif input == 'escape':
-            self.deselectAll()
-##         elif input == 'delete':
-##             self.removeAllSelected()
-        elif input == 'v':
-            self.toggleWidgetVis()
-        elif input == 'b':
-            base.toggleBackface()
-        elif input == 'control-f':
-            self.flash(last)
-        elif input == 'l':
-            self.lights.toggle()
-        elif input == 'shift-l':
-            self.cameraControl.toggleCOALock()
-        elif input == 'o':
-            self.oobe()
-        elif input == 'p':
-            if self.selected.last:
-                self.setActiveParent(self.selected.last)
-        elif input == 'r':
-            # Do wrt reparent
-            if self.selected.last:
-                self.reparent(self.selected.last, fWrt = 1)
-        elif input == 'shift-r':
-            # Do regular reparent
-            if self.selected.last:
-                self.reparent(self.selected.last)
-        elif input == 's':
-            if self.selected.last:
-                self.select(self.selected.last)
-        elif input == 't':
-            base.toggleTexture()
-        elif input == 'shift-a':
-            self.selected.toggleVisAll()
-        elif input == 'w':
-            base.toggleWireframe()
-        elif (input == '[') or (input == '{'):
-            self.undo()
-        elif (input == ']') or (input == '}'):
-            self.redo()
 
         #Pass along certain events if this display is a cluster client
         if self.clusterMode == 'client':
             if input in self.passThroughKeys:
                 self.cluster('messenger.send("%s")' % input, 0)
 
+    def doSetActiveParent(self):
+        if self.selected.last:
+            self.setActiveParent(self.selected.last)
+
+    def doReparent(self):
+        if self.selected.last:
+            self.reparent(self.selected.last)
+
+    def doWrtReparent(self):
+        if self.selected.last:
+            self.reparent(self.selected.last, fWrt = 1)
+
+    def doSelect(self):
+        if self.selected.last:
+            self.select(self.selected.last)
+
     def getModifiers(self, input, base):
         modifiers = DIRECT_NO_MOD
         modifierString = input[: input.find(base)]