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