[Pkg-bazaar-commits] ./bzr-gtk/unstable r301: Initial work on extracting the TreeView from the branch window.
Daniel Schierbeck
daniel.schierbeck at gmail.com
Fri Apr 10 07:45:24 UTC 2009
------------------------------------------------------------
revno: 301
committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
branch nick: revhistoryview
timestamp: Sat 2007-10-20 22:47:07 +0200
message:
Initial work on extracting the TreeView from the branch window.
added:
viz/treeview.py
-------------- next part --------------
=== added file 'viz/treeview.py'
--- a/viz/treeview.py 1970-01-01 00:00:00 +0000
+++ b/viz/treeview.py 2007-10-20 20:47:07 +0000
@@ -0,0 +1,150 @@
+# -*- coding: UTF-8 -*-
+"""Revision history view.
+
+"""
+
+__copyright__ = "Copyright ? 2005 Canonical Ltd."
+__author__ = "Daniel Schierbeck <daniel.schierbeck at gmail.com>"
+
+import gtk
+import gobject
+import pango
+import re
+
+from linegraph import linegraph, same_branch
+from graphcell import CellRendererGraph
+from treemodel import TreeModel
+
+class RevisionHistoryView(gtk.ScrolledWindow):
+
+ def __init__(self):
+ gtk.ScrolledWindow.__init__(self)
+
+ self.set_olicy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
+ self.set_shadow_type(gtk.SHADOW_IN)
+
+ self.contruct_treeview()
+
+ def construct_treeview(self):
+ self.treeview = gtk.TreeView()
+
+ self.treeview.set_rules_hint(True)
+ self.treeview.set_search_column(4)
+
+ self.treeview.get_selection().connect("changed",
+ self._on_selection_changed)
+
+ self.treeview.connect("row-activated",
+ self._on_revision_activated)
+
+ self.treeview.connect("button-release-event",
+ self._on_revision_selected)
+
+ self.treeview.set_property('fixed-height-mode', True)
+
+ self.add(self.treeview)
+ self.treeview.show()
+
+ cell = gtk.CellRendererText()
+ cell.set_property("width-chars", 15)
+ cell.set_property("ellipsize", pango.ELLIPSIZE_END)
+ column = gtk.TreeViewColumn("Revision No")
+ column.set_resizable(True)
+ column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
+ column.set_fixed_width(cell.get_size(self.treeview)[2])
+ column.pack_start(cell, expand=True)
+ column.add_attribute(cell, "text", treemodel.REVNO)
+ self.treeview.append_column(column)
+
+ self.graph_cell = CellRendererGraph()
+ self.graph_column = gtk.TreeViewColumn()
+ self.graph_column.set_resizable(True)
+ self.graph_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
+ self.graph_column.pack_start(self.graph_cell, expand=False)
+ self.graph_column.add_attribute(self.graph_cell, "node", treemodel.NODE)
+ self.graph_column.add_attribute(self.graph_cell, "in-lines", treemodel.LAST_LINES)
+ self.graph_column.add_attribute(self.graph_cell, "out-lines", treemodel.LINES)
+ self.treeview.append_column(self.graph_column)
+
+ cell = gtk.CellRendererText()
+ cell.set_property("width-chars", 65)
+ cell.set_property("ellipsize", pango.ELLIPSIZE_END)
+ column = gtk.TreeViewColumn("Message")
+ column.set_resizable(True)
+ column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
+ column.set_fixed_width(cell.get_size(self.treeview)[2])
+ column.pack_start(cell, expand=True)
+ column.add_attribute(cell, "text", treemodel.MESSAGE)
+ self.treeview.append_column(column)
+
+ cell = gtk.CellRendererText()
+ cell.set_property("width-chars", 15)
+ cell.set_property("ellipsize", pango.ELLIPSIZE_END)
+ column = gtk.TreeViewColumn("Committer")
+ column.set_resizable(True)
+ column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
+ column.set_fixed_width(cell.get_size(self.treeview)[2])
+ column.pack_start(cell, expand=True)
+ column.add_attribute(cell, "text", treemodel.COMMITER)
+ self.treeview.append_column(column)
+
+ def set_branch(self, branch, start, maxnum):
+ self.branch = branch
+
+ gobject.idle_add(self.populate, start, maxnum)
+
+ def populate(self, start, maxnum):
+ self.branch.lock_read()
+
+ (linegraphdata, index, columns_len) = linegraph(self.branch,
+ start,
+ maxnum)
+
+ self.model = TreeModel(self.branch, linegraphdata)
+ self.graph_cell.columns_len = columns_len
+ width = self.graph_cell.get_size(self.treeview)[2]
+ self.graph_column.set_fixed_width(width)
+ self.graph_column.set_max_width(width)
+ self.index = index
+ self.treeview.set_model(self.model)
+ self.treeview.get_selection().select_path(0)
+
+ return False
+
+ def _on_selection_changed(self, selection, *args):
+ """Callback for when the treeview changes."""
+ (model, selected_rows) = selection.get_selected_rows()
+ if len(selected_rows) > 0:
+ iter = self.model.get_iter(selected_rows[0])
+ revision = self.model.get_value(iter, treemodel.REVISION)
+ parents = self.model.get_value(iter, treemodel.PARENTS)
+ children = self.model.get_value(iter, treemodel.CHILDREN)
+
+ self.back_button.set_sensitive(len(parents) > 0)
+ self.fwd_button.set_sensitive(len(children) > 0)
+ tags = []
+ if self.branch.supports_tags():
+ tagdict = self.branch.tags.get_reverse_tag_dict()
+ if tagdict.has_key(revision.revision_id):
+ tags = tagdict[revision.revision_id]
+ self.logview.set_revision(revision, tags, children)
+
+ def _on_revision_selected(self, widget, event):
+ from bzrlib.plugins.gtk.revisionmenu import RevisionPopupMenu
+ if event.button == 3:
+ menu = RevisionPopupMenu(self.branch.repository,
+ [x.revision_id for x in self.selected_revisions()],
+ self.branch)
+ menu.popup(None, None, None, event.button, event.get_time())
+
+ def _on_revision_activated(self, widget, path, col):
+ # TODO: more than one parent
+ """Callback for when a treeview row gets activated."""
+ revision_id = self.model[path][treemodel.REVID]
+ parents = self.model[path][treemodel.PARENTS]
+ if len(parents) == 0:
+ # Ignore revisions without parent
+ return
+ parent_id = parents[0]
+ self.show_diff(self.branch, revision_id, parent_id)
+ self.treeview.grab_focus()
More information about the Pkg-bazaar-commits
mailing list