# HG changeset patch # User Sune Foldager <c...@cyanite.org> # Date 1259844098 -3600 # Node ID 5562502c0d6ca3398ab4c98de92e1f7188881cba # Parent 449ace4589bae36d10218ed1a0fcbd95ccc83f20 demo of MQ patch moving code, version 2
diff --git a/tortoisehg/hgtk/hgtk.py b/tortoisehg/hgtk/hgtk.py --- a/tortoisehg/hgtk/hgtk.py +++ b/tortoisehg/hgtk/hgtk.py @@ -35,7 +35,8 @@ # Add TortoiseHg signals, hooked to key accelerators in gtklib for sig in ('copy-clipboard', 'thg-diff', 'thg-parent', 'thg-rename', - 'thg-revision'): + 'thg-revision', 'mq-move-up', 'mq-move-down', 'mq-move-top', + 'mq-move-bottom', 'mq-pop', 'mq-push', 'mq-pop-all', 'mq-push-all'): gobject.signal_new(sig, gtk.TreeView, gobject.SIGNAL_ACTION, gobject.TYPE_NONE, ()) for sig in ('thg-exit', 'thg-close', 'thg-refresh', 'thg-accept', 'thg-reflow'): @@ -45,6 +46,7 @@ gobject.signal_new(sig, gtk.Notebook, gobject.SIGNAL_ACTION, gobject.TYPE_NONE, ()) + gtkmainalive = False def dispatch(args): "run the command specified in args" diff --git a/tortoisehg/hgtk/thgmq.py b/tortoisehg/hgtk/thgmq.py --- a/tortoisehg/hgtk/thgmq.py +++ b/tortoisehg/hgtk/thgmq.py @@ -7,6 +7,7 @@ import os import gtk +import gtk.keysyms import gobject import pango @@ -151,6 +152,65 @@ self.list.connect('row-activated', self.list_row_activated) self.list.connect('size-allocate', self.list_size_allocated) + def list_move_item(list, oldpos, newpos): + olditem = list[oldpos] + del list[oldpos] + list.insert(newpos, olditem) + + def move_patch(model, oldidx, newidx): + # Update series + oldrow = model[oldidx] + newrow = model[newidx] + p = self.repo.mq + list_move_item(p.full_series, p.find_series(oldrow[MQ_NAME]), + p.find_series(newrow[MQ_NAME])) + p.series_dirty = True + p.save_dirty() + + # Update TreeView + if newidx < oldidx: + model.move_before(oldrow.iter, newrow.iter) + else: + model.move_after(oldrow.iter, newrow.iter) + for i in xrange(min(oldidx, newidx), max(oldidx, newidx) + 1): + model[i][MQ_INDEX] = i-2 + + def mq_move(tv, key): + oldrow = tv.get_cursor()[0][0] + model = tv.get_model() + minval = self.separator_pos + 1 + maxval = len(model) - 1 + if key == gtk.keysyms.Up: + newrow = oldrow - 1 + elif key == gtk.keysyms.Down: + newrow = oldrow + 1 + elif key == gtk.keysyms.Page_Up: + newrow = minval + elif key == gtk.keysyms.Page_Down: + newrow = maxval + else: + return False + if newrow != oldrow and newrow >= minval and newrow <= maxval: + move_patch(model, oldrow, newrow) + return True + + if accelgroup: + mod = gtk.gdk.MOD1_MASK + def add(name, key, hook=None): + self.list.add_accelerator(name, accelgroup, key, mod, 0) + if hook: + self.list.connect(name, hook) + else: + self.list.connect(name, mq_move, key) + add('mq-move-up', gtk.keysyms.Up) + add('mq-move-down', gtk.keysyms.Down) + add('mq-move-top', gtk.keysyms.Page_Up) + add('mq-move-bottom', gtk.keysyms.Page_Down) + add('mq-pop', gtk.keysyms.Left, lambda _: self.qpop()) + add('mq-push', gtk.keysyms.Right, lambda _: self.qpush()) + add('mq-pop-all', gtk.keysyms.Home, lambda _: self.qpop(True)) + add('mq-push-all', gtk.keysyms.End, lambda _: self.qpush(True)) + self.cols = {} self.cells = {} @@ -247,7 +307,8 @@ # insert separator if top: - self.model.insert_after(top, (INDEX_SEPARATOR, None, None, None, None)) + row = self.model.insert_after(top, (INDEX_SEPARATOR, None, None, None, None)) + self.separator_pos = self.model.get_path(row)[0] # restore patch selection if selname: ------------------------------------------------------------------------------ Join us December 9, 2009 for the Red Hat Virtual Experience, a free event focused on virtualization and cloud computing. Attend in-depth sessions from your desk. Your couch. Anywhere. http://p.sf.net/sfu/redhat-sfdev2dev _______________________________________________ Tortoisehg-develop mailing list Tortoisehg-develop@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tortoisehg-develop