Revision: 8140
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8140&view=rev
Author:   jdh2358
Date:     2010-02-17 15:25:38 +0000 (Wed, 17 Feb 2010)

Log Message:
-----------
added customizable keymap patch; L or k works for log scaling xaxis

Modified Paths:
--------------
    trunk/matplotlib/CHANGELOG
    trunk/matplotlib/doc/users/navigation_toolbar.rst
    trunk/matplotlib/lib/matplotlib/backend_bases.py
    trunk/matplotlib/lib/matplotlib/rcsetup.py
    trunk/matplotlib/matplotlibrc.template

Property Changed:
----------------
    trunk/matplotlib/


Property changes on: trunk/matplotlib
___________________________________________________________________
Modified: svnmerge-integrated
   - /branches/mathtex:1-7263 /branches/v0_99_maint:1-8135
   + <<<<<<< (modified)
/branches/mathtex:1-7263 /branches/v0_91_maint:1-6428 
/branches/v0_98_5_maint:1-7253 /trunk/matplotlib:1-7315=======
/branches/mathtex:1-7263 /branches/v0_99_maint:1-8135>>>>>>> (latest)


Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG  2010-02-17 02:43:26 UTC (rev 8139)
+++ trunk/matplotlib/CHANGELOG  2010-02-17 15:25:38 UTC (rev 8140)
@@ -1,3 +1,8 @@
+2010-02-17 Added Gokhan's and Mattias' customizable keybindings patch
+           for the toolbar.  You can now set the keymap.* properties
+           in the matplotlibrc file.  Newbindings were added for
+           toggling log scaling on the x-axis. JDH
+
 2010-02-16 Committed TJ's filled marker patch for
            left|right|bottom|top|full filled markers.  See
            examples/pylab_examples/filledmarker_demo.py. JDH

Modified: trunk/matplotlib/doc/users/navigation_toolbar.rst
===================================================================
--- trunk/matplotlib/doc/users/navigation_toolbar.rst   2010-02-17 02:43:26 UTC 
(rev 8139)
+++ trunk/matplotlib/doc/users/navigation_toolbar.rst   2010-02-17 15:25:38 UTC 
(rev 8140)
@@ -79,6 +79,8 @@
 Navigation Keyboard Shortcuts
 -----------------------------
 
+The following table holds all the default keys, which can be overwritten by 
use of your matplotlibrc (#keymap.\*).
+
 ================================== 
==============================================
 Command                            Keyboard Shortcut(s)
 ================================== 
==============================================
@@ -93,6 +95,7 @@
 Constrain pan/zoom to y axis       hold **y**
 Preserve aspect ratio              hold **CONTROL**
 Toggle grid                        **g**
+Toggle x axis scale (log/linear)   **L** or **k**
 Toggle y axis scale (log/linear)   **l**
 ================================== 
==============================================
 

Modified: trunk/matplotlib/lib/matplotlib/backend_bases.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/backend_bases.py    2010-02-17 02:43:26 UTC 
(rev 8139)
+++ trunk/matplotlib/lib/matplotlib/backend_bases.py    2010-02-17 15:25:38 UTC 
(rev 8140)
@@ -1888,50 +1888,85 @@
         #    self.destroy() # how cruel to have to destroy oneself!
         #    return
 
-        if event.key == 'f':
+        # Load key-mappings from your matplotlibrc file.
+        fullscreen_keys = rcParams['keymap.fullscreen']
+        home_keys = rcParams['keymap.home']
+        back_keys = rcParams['keymap.back']
+        forward_keys = rcParams['keymap.forward']
+        pan_keys = rcParams['keymap.pan']
+        zoom_keys = rcParams['keymap.zoom']
+        save_keys = rcParams['keymap.save']
+        grid_keys = rcParams['keymap.grid']
+        toggle_yscale_keys = rcParams['keymap.yscale']
+        toggle_xscale_keys = rcParams['keymap.xscale']
+        all = rcParams['keymap.all_axes']
+
+        # toggle fullscreen mode (default key 'f')
+        if event.key in fullscreen_keys:
             self.full_screen_toggle()
 
-        # *h*ome or *r*eset mnemonic
-        elif event.key == 'h' or event.key == 'r' or event.key == "home":
+        # home or reset mnemonic  (default key 'h', 'home' and 'r')
+        elif event.key in home_keys:
             self.canvas.toolbar.home()
-        # c and v to enable left handed quick navigation
-        elif event.key == 'left' or event.key == 'c' or event.key == 
'backspace':
+        # forward / backward keys to enable left handed quick navigation
+        # (default key for backward: 'left', 'backspace' and 'c')
+        elif event.key in back_keys:
             self.canvas.toolbar.back()
-        elif event.key == 'right' or event.key == 'v':
+        # (default key for forward: 'right' and 'v')
+        elif event.key in forward_keys:
             self.canvas.toolbar.forward()
-        # *p*an mnemonic
-        elif event.key == 'p':
+        # pan mnemonic (default key 'p')
+        elif event.key in pan_keys:
             self.canvas.toolbar.pan()
-        # z*o*om mnemonic
-        elif event.key == 'o':
+        # zoom mnemonic (default key 'o')
+        elif event.key in zoom_keys:
             self.canvas.toolbar.zoom()
-        elif event.key == 's':
+        # saving current figure (default key 's')
+        elif event.key in save_keys:
             self.canvas.toolbar.save_figure(self.canvas.toolbar)
 
         if event.inaxes is None:
             return
 
         # the mouse has to be over an axes to trigger these
-        if event.key == 'g':
+        # switching on/off a grid in current axes (default key 'g')
+        if event.key in grid_keys:
             event.inaxes.grid()
             self.canvas.draw()
-        elif event.key == 'l':
+        # toggle scaling of y-axes between 'log and 'linear' (default key 'l')
+        elif event.key in toggle_yscale_keys:
             ax = event.inaxes
             scale = ax.get_yscale()
-            if scale=='log':
+            if scale == 'log':
                 ax.set_yscale('linear')
                 ax.figure.canvas.draw()
-            elif scale=='linear':
+            elif scale == 'linear':
                 ax.set_yscale('log')
                 ax.figure.canvas.draw()
+        # toggle scaling of x-axes between 'log and 'linear' (default key 'k')
+        elif event.key in toggle_xscale_keys:
+            ax = event.inaxes
+            scalex = ax.get_xscale()
+            if scalex == 'log':
+                ax.set_xscale('linear')
+                ax.figure.canvas.draw()
+            elif scalex == 'linear':
+                ax.set_xscale('log')
+                ax.figure.canvas.draw()
 
-        elif event.key is not None and (event.key.isdigit() and 
event.key!='0') or event.key=='a':
-            # 'a' enables all axes
-            if event.key!='a':
-                n=int(event.key)-1
+        elif event.key is not None and \
+                 (event.key.isdigit() and event.key!='0') or event.key in all:
+            # keys in list 'all' enables all axes (default key 'a'),
+            # otherwise if key is a number only enable this particular axes
+            # if it was the axes, where the event was raised
+            if not (event.key in all):
+                n = int(event.key)-1
             for i, a in enumerate(self.canvas.figure.get_axes()):
-                if event.x is not None and event.y is not None and 
a.in_axes(event):
-                    if event.key=='a':
+                # consider axes, in which the event was raised
+                # FIXME: Why only this axes?
+                if event.x is not None and event.y is not None \
+                       and a.in_axes(event):
+                    if event.key in all:
                         a.set_navigate(True)
                     else:
                         a.set_navigate(i==n)

Modified: trunk/matplotlib/lib/matplotlib/rcsetup.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/rcsetup.py  2010-02-17 02:43:26 UTC (rev 
8139)
+++ trunk/matplotlib/lib/matplotlib/rcsetup.py  2010-02-17 15:25:38 UTC (rev 
8140)
@@ -546,9 +546,22 @@
 
     'path.simplify' : [True, validate_bool],
     'path.simplify_threshold' : [1.0 / 9.0, ValidateInterval(0.0, 1.0)],
-    'agg.path.chunksize' : [0, validate_int]       # 0 to disable chunking;
-                                                   # recommend about 20000 to
-                                                   # enable. Experimental.
+    'agg.path.chunksize' : [0, validate_int],       # 0 to disable chunking;
+                                                    # recommend about 20000 to
+                                                    # enable. Experimental.
+    # key-mappings
+    'keymap.fullscreen' : ['f', validate_stringlist],   
+    'keymap.home' : [['h', 'r', 'home'], validate_stringlist],
+    'keymap.back' : [['left', 'c', 'backspace'], validate_stringlist],
+    'keymap.forward' : [['right', 'v'], validate_stringlist],
+    'keymap.pan' : ['p', validate_stringlist],
+    'keymap.zoom' : ['o', validate_stringlist],     
+    'keymap.save' : ['s', validate_stringlist],
+    'keymap.grid' : ['g', validate_stringlist],
+    'keymap.yscale' : ['l', validate_stringlist],
+    'keymap.xscale' : [['k', 'L'], validate_stringlist],
+    'keymap.all_axes' : ['a', validate_stringlist]
+
 }
 
 if __name__ == '__main__':

Modified: trunk/matplotlib/matplotlibrc.template
===================================================================
--- trunk/matplotlib/matplotlibrc.template      2010-02-17 02:43:26 UTC (rev 
8139)
+++ trunk/matplotlib/matplotlibrc.template      2010-02-17 15:25:38 UTC (rev 
8140)
@@ -360,3 +360,20 @@
 #   from matplotlib import verbose.
 #verbose.level  : silent      # one of silent, helpful, debug, debug-annoying
 #verbose.fileo  : sys.stdout  # a log filename, sys.stdout or sys.stderr
+
+# Event keys to interact with figures/plots via keyboard.
+# Customize these settings according to your needs. 
+# Leave the field(s) empty if you don't need a key-map. (i.e., fullscreen : 
'') 
+
+#keymap.fullscreen : f               # toggling    
+#keymap.home : h, r, home            # home or reset mnemonic
+#keymap.back : left, c, backspace    # forward / backward keys to enable 
+#keymap.forward : right, v           #   left handed quick navigation
+#keymap.pan : p                      # pan mnemonic
+#keymap.zoom : o                     # zoom mnemonic
+#keymap.save : s                     # saving current figure
+#keymap.grid : g                     # switching on/off a grid in current axes
+#keymap.yscale : l                   # toggle scaling of y-axes 
('log'/'linear')
+#keymap.xscale : L, k                # toggle scaling of x-axes 
('log'/'linear')
+#keymap.all_axes : a                 # enable all axes
+


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
SOLARIS 10 is the OS for Data Centers - provides features such as DTrace,
Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW
http://p.sf.net/sfu/solaris-dev2dev
_______________________________________________
Matplotlib-checkins mailing list
Matplotlib-checkins@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to