Streamlined the accelerator wireup code by extracting repeated calls to a helper method. Also extracted the helper method for moving a treeview's currently selected row from status for reuse in changeset.
# HG changeset patch # User Daniel Rocco <dro...@westga.edu> # Date 1262661223 18000 # Node ID 241defa8cb8a560980194a81fbdf6c2df2346c7f # Parent e1fc1ada69c7d07f8eb9d343ab6f2d64f7e39bc5 gtklib: cleanup accelerator code, treeview selection helper Streamlined the accelerator wireup code by extracting repeated calls to a helper method. Also extracted the helper method for moving a treeview's currently selected row from status for reuse in changeset. diff -r e1fc1ada69c7 -r 241defa8cb8a tortoisehg/hgtk/gtklib.py --- a/tortoisehg/hgtk/gtklib.py Sun Jan 03 22:16:47 2010 -0600 +++ b/tortoisehg/hgtk/gtklib.py Mon Jan 04 22:13:43 2010 -0500 @@ -51,6 +51,15 @@ else: return '<Control>' +def add_accelerator(widget, signal, accelgroup, accelerator, + accel_flags=gtk.ACCEL_VISIBLE): + """Add an accelerator for signal to widget. + + accelerator is the key string parsed by gtk.accelerator_parse; the + other parameters are passed to gtk.Widget.add_accelerator""" + key, modifier = gtk.accelerator_parse(accelerator) + widget.add_accelerator(signal, accelgroup, key, modifier, accel_flags) + def set_tortoise_keys(window, connect=True): 'Set default TortoiseHg keyboard accelerators' if sys.platform == 'darwin': @@ -60,21 +69,17 @@ mod = get_thg_modifier() accelgroup = gtk.AccelGroup() window.add_accel_group(accelgroup) - key, modifier = gtk.accelerator_parse(mod+'w') - window.add_accelerator('thg-close', accelgroup, key, modifier, - gtk.ACCEL_VISIBLE) - key, modifier = gtk.accelerator_parse(mod+'q') - window.add_accelerator('thg-exit', accelgroup, key, modifier, - gtk.ACCEL_VISIBLE) - key, modifier = gtk.accelerator_parse('F5') - window.add_accelerator('thg-refresh', accelgroup, key, modifier, - gtk.ACCEL_VISIBLE) - key, modifier = gtk.accelerator_parse(mod+'r') - window.add_accelerator('thg-refresh', accelgroup, key, modifier, - gtk.ACCEL_VISIBLE) - key, modifier = gtk.accelerator_parse(mod+'Return') - window.add_accelerator('thg-accept', accelgroup, key, modifier, - gtk.ACCEL_VISIBLE) + + default_accelerators = [ + (mod+'w', 'thg-close'), + (mod+'q', 'thg-exit'), + ('F5', 'thg-refresh'), + (mod+'r', 'thg-refresh'), + (mod+'Return', 'thg-accept'), + ] + + for accelerator, signal in default_accelerators: + add_accelerator(window, signal, accelgroup, accelerator) # connect ctrl-w and ctrl-q to every window if connect: @@ -94,6 +99,31 @@ window.destroy() return True +def move_treeview_selection(window, treeview, distance=1): + """Accelerator handler to move a treeview's cursor and selection + + Moves the treeview's cursor by distance and selects the row on which + the cursor lands. + + distance: an integer number of rows to move the cursor, positive to + move the selection down, negative for up. A distance of + 0 will reset the selection to the current row.""" + row = 0 + path = treeview.get_cursor()[0] + if path: + row = path[0] + model = treeview.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 = treeview.get_selection() + selection.unselect_all() + selection.select_iter(selected) + treeview.set_cursor(model.get_path(selected)) + class MessageDialog(gtk.Dialog): button_map = { gtk.BUTTONS_NONE: None, diff -r e1fc1ada69c7 -r 241defa8cb8a tortoisehg/hgtk/status.py --- a/tortoisehg/hgtk/status.py Sun Jan 03 22:16:47 2010 -0600 +++ b/tortoisehg/hgtk/status.py Mon Jan 04 22:13:43 2010 -0500 @@ -209,16 +209,12 @@ 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) + gtklib.add_accelerator(self.filetree, 'thg-diff', accelgroup, mod+'d') 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) + gtklib.add_accelerator(self.difftree, 'copy-clipboard', accelgroup, mod+'c') self.difftree.connect('copy-clipboard', self.copy_to_clipboard) def scroll_diff_notebook(widget, direction=gtk.SCROLL_PAGE_DOWN): @@ -227,23 +223,6 @@ 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()) @@ -261,24 +240,26 @@ else: notebook.prev_page() - # signal, accelerator key, handler, parameter + # signal, accelerator key, handler, (parameters) status_accelerators = [ ('status-scroll-down', 'bracketright', scroll_diff_notebook, - gtk.SCROLL_PAGE_DOWN), + (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), + (gtk.SCROLL_PAGE_UP,)), + ('status-next-file', 'period', gtklib.move_treeview_selection, + (self.filetree, 1)), + ('status-previous-file', 'comma', gtklib.move_treeview_selection, + (self.filetree, -1)), + ('status-select-all', 'u', toggle_filetree_selection, ()), + ('status-next-page', 'p', next_diff_notebook_page, ()), ('status-previous-page', '<Shift>p', - previous_diff_notebook_page, None), - ] + previous_diff_notebook_page, ()), + ] - 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) + for signal, accelerator, handler, parameters in status_accelerators: + gtklib.add_accelerator(self, signal, accelgroup, + mod + accelerator) + self.connect(signal, handler, *parameters) return accelgroup
------------------------------------------------------------------------------ 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