Added keyboard accelerator Ctrl-u to toggle file selection.  The accelerator
simulates clicking the check box in the filetree header: toggling it checks or
unchecks all the files in the tree.

Added keyboard accelerators Ctrl-p and Ctrl-Shift-p to move to the
next/previous page in the diff notebook.

Extracted the keyboard accelerator wiring code to a helper method.

closes #289


# HG changeset patch
# User Daniel Rocco <dro...@westga.edu>
# Date 1262555055 18000
# Node ID 54f3309abc09311e1eccd910b6ba76d560ed0e04
# Parent  ff54a2ee9bc30a54c4232f9d8dc8f4fb60209333
status: add accelerators for filetree toggle, next/previous diff page

Added keyboard accelerator Ctrl-u to toggle file selection.  The accelerator
simulates clicking the check box in the filetree header: toggling it checks or
unchecks all the files in the tree.

Added keyboard accelerators Ctrl-p and Ctrl-Shift-p to move to the
next/previous page in the diff notebook.

Extracted the keyboard accelerator wiring code to a helper method.

closes #289

diff -r ff54a2ee9bc3 -r 54f3309abc09 tortoisehg/hgtk/hgtk.py
--- a/tortoisehg/hgtk/hgtk.py	Sun Jan 03 14:27:30 2010 -0500
+++ b/tortoisehg/hgtk/hgtk.py	Sun Jan 03 16:44:15 2010 -0500
@@ -41,7 +41,9 @@
         gobject.SIGNAL_ACTION, gobject.TYPE_NONE, ())
 for sig in ('thg-exit', 'thg-close', 'thg-refresh', 'thg-accept',
             'thg-reflow', 'status-scroll-down', 'status-scroll-up', 
-			'status-next-file', 'status-previous-file'):
+			'status-next-file', 'status-previous-file', 
+			'status-select-all', 'status-next-page', 
+			'status-previous-page'):
     gobject.signal_new(sig, gtk.Window,
             gobject.SIGNAL_ACTION, gobject.TYPE_NONE, ())
 for sig in ('thg-close', 'thg-new'):
diff -r ff54a2ee9bc3 -r 54f3309abc09 tortoisehg/hgtk/status.py
--- a/tortoisehg/hgtk/status.py	Sun Jan 03 14:27:30 2010 -0500
+++ b/tortoisehg/hgtk/status.py	Sun Jan 03 16:44:15 2010 -0500
@@ -204,6 +204,85 @@
     def is_merge(self):
         return self.count_revs() < 2 and len(self.repo.parents()) == 2
 
+
+    def get_accelgroup(self):
+        accelgroup = gtk.AccelGroup()
+        mod = gtklib.get_thg_modifier()
+        
+        key, modifier = gtk.accelerator_parse(mod+'d')
+        self.filetree.add_accelerator('thg-diff', accelgroup, key,
+                        modifier, gtk.ACCEL_VISIBLE)
+        self.filetree.connect('thg-diff', self.thgdiff)
+        self.connect('thg-refresh', self.thgrefresh)
+
+        # set CTRL-c accelerator for copy-clipboard
+        key, modifier = gtk.accelerator_parse(mod+'c')
+        self.difftree.add_accelerator('copy-clipboard', accelgroup, key,
+                        modifier, gtk.ACCEL_VISIBLE)
+        self.difftree.connect('copy-clipboard', self.copy_to_clipboard)
+
+        def scroll_diff_notebook(widget, direction=gtk.SCROLL_PAGE_DOWN):
+            page_num = self.diff_notebook.get_current_page()
+            page = self.diff_notebook.get_nth_page(page_num)
+
+            page.emit("scroll-child", direction, False)
+
+        def move_filetree_selection(widget, distance=1):
+            row = 0
+            path = self.filetree.get_cursor()[0]
+            if path:
+                row = path[0]
+            model = self.filetree.get_model()
+
+            # make sure new row is within bounds            
+            new_row = min((row + distance), len(model) - 1)
+            new_row = max(0, new_row)
+
+            selected = model.get_iter_from_string(str(new_row))
+            selection = self.filetree.get_selection()
+            selection.unselect_all()
+            selection.select_iter(selected)
+            self.filetree.set_cursor(model.get_path(selected))
+
+        def toggle_filetree_selection(*arguments):
+            self.sel_clicked(not self.selcb.get_active())
+
+        def next_diff_notebook_page(*arguments):
+            notebook = self.diff_notebook
+            if notebook.get_current_page() >= len(notebook) - 1:
+                notebook.set_current_page(0)
+            else:
+                notebook.next_page()
+                
+        def previous_diff_notebook_page(*arguments):
+            notebook = self.diff_notebook
+            if notebook.get_current_page() <= 0:
+                notebook.set_current_page(len(notebook) - 1)
+            else:
+                notebook.prev_page()
+                
+        # signal, accelerator key, handler, parameter                
+        status_accelerators = [
+            ('status-scroll-down', 'bracketright', scroll_diff_notebook,
+             gtk.SCROLL_PAGE_DOWN),
+            ('status-scroll-up', 'bracketleft', scroll_diff_notebook,
+             gtk.SCROLL_PAGE_UP),
+            ('status-next-file', 'period', move_filetree_selection, 1),
+            ('status-previous-file', 'comma', move_filetree_selection, -1),
+            ('status-select-all', 'u', toggle_filetree_selection, None),
+            ('status-next-page', 'p', next_diff_notebook_page, None),
+            ('status-previous-page', '<Shift>p',
+             previous_diff_notebook_page, None),
+            ]
+        
+        for signal, accelerator, handler, param in status_accelerators:
+            key, modifier = gtk.accelerator_parse(mod + accelerator)
+            self.add_accelerator(signal, accelgroup, key, modifier, 0)
+            self.connect(signal, handler, param)
+
+        return accelgroup
+                
+
     def get_body(self):
         is_merge = self.is_merge()
 
@@ -226,15 +305,6 @@
         self.filetree.modify_font(pango.FontDescription(self.fontlist))
         self.filetree.set_headers_clickable(True)
 
-        accelgroup = gtk.AccelGroup()
-        self.add_accel_group(accelgroup)
-        mod = gtklib.get_thg_modifier()
-        key, modifier = gtk.accelerator_parse(mod+'d')
-        self.filetree.add_accelerator('thg-diff', accelgroup, key,
-                        modifier, gtk.ACCEL_VISIBLE)
-        self.filetree.connect('thg-diff', self.thgdiff)
-        self.connect('thg-refresh', self.thgrefresh)
-
         toggle_cell = gtk.CellRendererToggle()
         toggle_cell.connect('toggled', self.select_toggle)
         toggle_cell.set_property('activatable', True)
@@ -341,50 +411,6 @@
                 pango.FontDescription)
 
         difftree = gtk.TreeView(self.diffmodel)
-
-        # set CTRL-c accelerator for copy-clipboard
-        mod = gtklib.get_thg_modifier()
-        key, modifier = gtk.accelerator_parse(mod+'c')
-        difftree.add_accelerator('copy-clipboard', accelgroup, key,
-                        modifier, gtk.ACCEL_VISIBLE)
-        difftree.connect('copy-clipboard', self.copy_to_clipboard)
-
-        def scroll_diff_notebook(widget, direction=gtk.SCROLL_PAGE_DOWN):
-            page_num = self.diff_notebook.get_current_page()
-            page = self.diff_notebook.get_nth_page(page_num)
-
-            page.emit("scroll-child", direction, False)
-
-        def move_filetree_selection(widget, distance=1):
-            row = 0
-            path = self.filetree.get_cursor()[0]
-            if path:
-                row = path[0]
-            model = self.filetree.get_model()
-
-            # make sure new row is within bounds            
-            new_row = min((row + distance), len(model) - 1)
-            new_row = max(0, new_row)
-
-            selected = model.get_iter_from_string(str(new_row))
-            selection = self.filetree.get_selection()
-            selection.unselect_all()
-            selection.select_iter(selected)
-            self.filetree.set_cursor(model.get_path(selected))
-
-        status_accelerators = [
-            ('status-scroll-down', 'bracketright', scroll_diff_notebook,
-             gtk.SCROLL_PAGE_DOWN),
-            ('status-scroll-up', 'bracketleft', scroll_diff_notebook,
-             gtk.SCROLL_PAGE_UP),
-            ('status-next-file', 'period', move_filetree_selection, 1),
-            ('status-previous-file', 'comma', move_filetree_selection, -1),
-            ]
-        
-        for signal, accelerator, handler, param in status_accelerators:
-            key, modifier = gtk.accelerator_parse(mod + accelerator)
-            self.add_accelerator(signal, accelgroup, key, modifier, 0)
-            self.connect(signal, handler, param)
         
         difftree.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
         difftree.set_headers_visible(False)
@@ -392,7 +418,8 @@
         if getattr(difftree, 'enable-grid-lines', None) is not None:
             difftree.set_property('enable-grid-lines', True)
         difftree.connect('row-activated', self.diff_tree_row_act)
-
+        self.difftree = difftree
+        
         cell = gtk.CellRendererText()
         diffcol = gtk.TreeViewColumn('diff', cell)
         diffcol.set_resizable(True)
@@ -449,6 +476,11 @@
 
         self.diff_notebook.connect('switch-page', self.page_switched,
                                    sel, difftree)
+
+        # add keyboard accelerators
+        accelgroup = self.get_accelgroup()     
+        self.add_accel_group(accelgroup)
+        
         return self.diffpane
 
     def append_page(self, name, child, label):
------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
_______________________________________________
Tortoisehg-develop mailing list
Tortoisehg-develop@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tortoisehg-develop

Reply via email to