hggtk/vis: hook up context menu, etc
authorSteve Borho <steve@borho.org>
Sat, 12 Jan 2008 14:23:45 -0600
changeset 636 38baa6d4ef26
parent 635 80594a9837af
child 637 87354efefe2c
hggtk/vis: hook up context menu, etc
hggtk/history.py
hggtk/vis/treemodel.py
--- a/hggtk/history.py	Sat Jan 12 13:21:42 2008 -0600
+++ b/hggtk/history.py	Sat Jan 12 14:23:45 2008 -0600
@@ -24,6 +24,7 @@
 from gdialog import *
 from hgcmd import CmdDialog
 
+from vis import treemodel
 from vis.treeview import TreeView
 
 
@@ -432,6 +433,8 @@
             self.graphview = scroller
             self.tree = scroller.treeview
             self.model = scroller.model
+            self.graphview.connect('revision-selected',
+                    self._graphtree_selection_changed)
         else:
             self.model = gtk.ListStore(str, str, long, str, str, str, str, 
                     long, object)
@@ -441,10 +444,10 @@
             self.tree.set_reorderable(False)
             self.tree.set_enable_search(True)
             self.tree.set_search_equal_func(self._search_in_tree,None)
+            self.tree.set_rubber_banding(False)
             self.tree.get_selection().set_mode(gtk.SELECTION_SINGLE)
             self.tree.get_selection().connect('changed',
                     self._tree_selection_changed)
-            self.tree.set_rubber_banding(False)
             self.tree.modify_font(pango.FontDescription(self.fontlist))
             self.tree.set_rules_hint(True) 
             
@@ -566,9 +569,8 @@
     def _add_tag(self, menuitem):
         from tagadd import TagAddDialog
 
-        row = self.model[self.tree.get_selection().get_selected()[1]]
-        rev = long(row[2])
-        parents = row[8]
+        rev = self.currow[treemodel.REVID]
+        parents = self.currow[treemodel.PARENTS]
         
         # save tag info for detecting new tags added
         oldtags = self.repo.tagslist()
@@ -588,9 +590,8 @@
         from status import GStatus
         from gtools import cmdtable
         
-        row = self.model[self.tree.get_selection().get_selected()[1]]
-        rev = long(row[2])
-        parents = row[8]
+        rev = self.currow[treemodel.REVID]
+        parents = self.currow[treemodel.PARENTS]
         if len(parents) == 0:
             parents = [rev-1]
 
@@ -606,8 +607,7 @@
 
 
     def _export_patch(self, menuitem):
-        row = self.model[self.tree.get_selection().get_selected()[1]]
-        rev = long(row[2])
+        rev = self.currow[treemodel.REVID]
         filename = "%s_rev%s.patch" % (os.path.basename(self.repo.root), rev)
         fd = NativeSaveFileDialogWrapper(Title = "Save patch to",
                                          InitialDir=self.repo.root,
@@ -624,16 +624,14 @@
 
     def _email_patch(self, menuitem):
         from hgemail import EmailDialog
-        row = self.model[self.tree.get_selection().get_selected()[1]]
-        rev = long(row[2])
+        rev = self.currow[treemodel.REVID]
         dlg = EmailDialog(self.repo.root, ['--rev', str(rev)])
         dlg.show_all()
         dlg.run()
         dlg.hide()
 
     def _checkout(self, menuitem):
-        row = self.model[self.tree.get_selection().get_selected()[1]]
-        rev = long(row[2])
+        rev = self.currow[treemodel.REVID]
         self.repo.invalidate()
         wc = self.repo.workingctx()
         pl = wc.parents()
@@ -663,8 +661,7 @@
         self.reload_log()
 
     def _merge(self, menuitem):
-        row = self.model[self.tree.get_selection().get_selected()[1]]
-        rev = long(row[2])
+        rev = self.currow[treemodel.REVID]
         self.repo.invalidate()
         wc = self.repo.workingctx()
         pl = wc.parents()
@@ -714,19 +711,27 @@
         self.repo.dirstate.invalidate()
         self.reload_log()
 
+    def _graphtree_selection_changed(self, treeview):
+        self.currow = self.graphview.get_revision()
+        rev = [ str(self.currow[treemodel.REVID]) ]
+        if rev != self._last_rev:
+            self._last_rev = rev
+            parents = self.currow[treemodel.PARENTS]
+            self.load_details(rev, len(parents))
+        return False
+
     def _tree_selection_changed(self, selection):
-        ''' Update the details text '''
+        ''' Update the details text'''
         if selection.count_selected_rows() == 0:
             return False
-        rev = [str(x) for x in [self.model[selection.get_selected()[1]][2]]]
+        self.currow = self.model[selection.get_selected()[1]]
+        rev = [ str(self.currow[treemodel.REVID]) ]
         if rev != self._last_rev:
             self._last_rev = rev
-            parents = self.model[selection.get_selected()[1]][8]
+            parents = self.currow[treemodel.PARENTS]
             self.load_details(rev, len(parents))
-
         return False
 
-
     def _refresh_clicked(self, toolbutton, data=None):
         self.reload_log()
         return True
@@ -745,8 +750,7 @@
 
 
     def _tree_popup_menu(self, treeview, button=0, time=0) :
-        row = self.model[self.tree.get_selection().get_selected()[1]]
-        selrev = long(row[2])
+        selrev = self.currow[treemodel.REVID]
         
         # disable/enable menus as required
         parents = [self.repo.changelog.rev(x.node()) for x in
--- a/hggtk/vis/treemodel.py	Sat Jan 12 13:21:42 2008 -0600
+++ b/hggtk/vis/treemodel.py	Sat Jan 12 14:23:45 2008 -0600
@@ -13,9 +13,9 @@
 from time import (strftime, localtime)
 
 # treemodel row enumerated attributes
-REVID = 0
+LINES = 0
 NODE = 1
-LINES = 2
+REVID = 2
 LAST_LINES = 3
 MESSAGE = 4
 COMMITER = 5
@@ -70,19 +70,20 @@
             return []
 
         if revid not in self.revisions:
-            # TODO: not sure about this
             ctx = self.repo.changectx(revid)
-            revision = (ctx.user(), ctx.date(), ctx.description())
+            revision = (None, node, revid, None, ctx.description(),
+                    ctx.user(), ctx.date(), None, parents)
             self.revisions[revid] = revision
         else:
             revision = self.revisions[revid]
 
         if column == REVISION: return revision
-        if column == MESSAGE: return revision[2].split('\n')[0]
+        if column == MESSAGE: return revision[MESSAGE].split('\n')[0]
         if column == COMMITER: return re.sub('<.*@.*>', '',
-                                             revision[0]).strip(' ')
+                                             revision[COMMITER]).strip(' ')
         if column == TIMESTAMP:
-            return strftime("%Y-%m-%d %H:%M", localtime(revision[1][0]))
+            return strftime("%Y-%m-%d %H:%M",
+                    localtime(revision[TIMESTAMP][0]))
 
     def on_iter_next(self, rowref):
         if rowref < len(self.line_graph_data) - 1: