This patch does the following:

  - Added a diff panel to 'bzr vis' in the lower-right corner.
  - Made 'bzr vis' remember whether the toolbar is visible.
    (was a test while figuring out how to do the same for the 
    diff panel)
  - Removed some redundant redrawing.
  - Made DiffWidget.set_diff() work more than once.

I plan on making it remember the window and panel sizes too, but 
that's for later.


-- Scott
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: [EMAIL PROTECTED]
# target_branch: ../trunk
# testament_sha1: 83fb1b6d699128a5dbfed4f13e9b35db58f8b815
# timestamp: 2008-07-10 01:44:11 -0600
# source_branch: lp:~toykeeper/bzr-gtk/bzr-vis-enhancements
# base_revision_id: [EMAIL PROTECTED]
# 
# Begin patch
=== modified file 'branchview/treeview.py'
--- branchview/treeview.py	2008-06-30 20:11:24 +0000
+++ branchview/treeview.py	2008-07-10 06:23:54 +0000
@@ -325,6 +325,7 @@
         if set_tooltip is not None:
             set_tooltip(treemodel.MESSAGE)
 
+        self._prev_cursor_path = None
         self.treeview.connect("cursor-changed",
                 self._on_selection_changed)
 
@@ -400,7 +401,8 @@
     def _on_selection_changed(self, treeview):
         """callback for when the treeview changes."""
         (path, focus) = treeview.get_cursor()
-        if path is not None:
+        if (path is not None) and (path != self._prev_cursor_path):
+            self._prev_cursor_path = path # avoid emitting twice per click
             self.iter = self.model.get_iter(path)
             self.emit('revision-selected')
 

=== modified file 'diff.py'
--- diff.py	2008-05-22 02:33:40 +0000
+++ diff.py	2008-07-10 07:33:13 +0000
@@ -330,9 +330,10 @@
         # text view
 
     def set_diff_text_sections(self, sections):
-        self.diff_view = DiffFileView()
+        if not hasattr(self, 'diff_view'):
+            self.diff_view = DiffFileView()
+            self.pack2(self.diff_view)
         self.diff_view.show()
-        self.pack2(self.diff_view)
         for oldname, newname, patch in sections:
             self.diff_view._diffs[newname] = str(patch)
             if newname is None:
@@ -346,8 +347,9 @@
         Compares the two trees and populates the window with the
         differences.
         """
-        self.diff_view = DiffView()
-        self.pack2(self.diff_view)
+        if not hasattr(self, 'diff_view'):
+            self.diff_view = DiffView()
+            self.pack2(self.diff_view)
         self.diff_view.show()
         self.diff_view.set_trees(rev_tree, parent_tree)
         self.rev_tree = rev_tree
@@ -380,6 +382,7 @@
                 self.model.append(titer, [ path, path ])
 
         self.treeview.expand_all()
+        self.diff_view.show_diff(None)
 
     def set_file(self, file_path):
         """Select the current file to display"""

=== modified file 'viz/branchwin.py'
--- viz/branchwin.py	2008-07-01 21:54:21 +0000
+++ viz/branchwin.py	2008-07-10 07:33:13 +0000
@@ -108,9 +108,11 @@
         self.paned.pack2(self.construct_bottom(), resize=False, shrink=True)
         self.paned.show()
 
-        vbox.pack_start(self.construct_menubar(), expand=False, fill=True)
-        vbox.pack_start(self.construct_navigation(), expand=False, fill=True)
-        
+        nav = self.construct_navigation()
+        menubar = self.construct_menubar()
+        vbox.pack_start(menubar, expand=False, fill=True)
+        vbox.pack_start(nav, expand=False, fill=True)
+
         vbox.pack_start(self.paned, expand=True, fill=True)
         vbox.set_focus_child(self.paned)
 
@@ -161,14 +163,24 @@
 
         view_menu_toolbar = gtk.CheckMenuItem("Show Toolbar")
         view_menu_toolbar.set_active(True)
+        if self.config.get_user_option('viz-toolbar-visible') == 'False':
+            view_menu_toolbar.set_active(False)
+            self.toolbar.hide()
         view_menu_toolbar.connect('toggled', self._toolbar_visibility_changed)
 
         view_menu_compact = gtk.CheckMenuItem("Show Compact Graph")
         view_menu_compact.set_active(self.compact_view)
         view_menu_compact.connect('activate', self._brokenlines_toggled_cb)
 
+        view_menu_diffs = gtk.CheckMenuItem("Show Diffs")
+        view_menu_diffs.set_active(True)
+        if self.config.get_user_option('viz-show-diffs') == 'False':
+            view_menu_diffs.set_active(False)
+        view_menu_diffs.connect('toggled', self._diff_visibility_changed)
+
         view_menu.add(view_menu_toolbar)
         view_menu.add(view_menu_compact)
+        view_menu.add(view_menu_diffs)
         view_menu.add(gtk.SeparatorMenuItem())
 
         self.mnu_show_revno_column = gtk.CheckMenuItem("Show Revision _Number Column")
@@ -302,15 +314,28 @@
 
     def construct_bottom(self):
         """Construct the bottom half of the window."""
+        self.bottom_hpaned = gtk.HPaned()
+        (width, height) = self.get_size()
+        self.bottom_hpaned.set_size_request(width, int(height / 2.5))
+
         from bzrlib.plugins.gtk.revisionview import RevisionView
         self.revisionview = RevisionView(branch=self.branch)
-        (width, height) = self.get_size()
-        self.revisionview.set_size_request(width, int(height / 2.5))
+        self.revisionview.set_size_request(width/3, int(height / 2.5))
         self.revisionview.show()
         self.revisionview.set_show_callback(self._show_clicked_cb)
         self.revisionview.connect('notify::revision', self._go_clicked_cb)
         self.treeview.connect('tag-added', lambda w, t, r: self.revisionview.update_tags())
-        return self.revisionview
+        self.bottom_hpaned.pack1(self.revisionview)
+
+        from bzrlib.plugins.gtk.diff import DiffWidget
+        self.diff = DiffWidget()
+        self.bottom_hpaned.pack2(self.diff)
+
+        self.bottom_hpaned.show_all()
+        if self.config.get_user_option('viz-show-diffs') == 'False':
+            self.diff.hide()
+
+        return self.bottom_hpaned
 
     def _tag_selected_cb(self, menuitem, revid):
         self.treeview.set_revision_id(revid)
@@ -367,7 +392,9 @@
 
             self.revisionview.set_revision(revision)
             self.revisionview.set_children(children)
-    
+
+            self.update_diff_panel(revision, parents)
+
     def _tree_revision_activated(self, widget, path, col):
         # TODO: more than one parent
         """Callback for when a treeview row gets activated."""
@@ -439,9 +466,18 @@
 
     def _toolbar_visibility_changed(self, col):
         if col.get_active():
-            self.toolbar.show() 
+            self.toolbar.show()
         else:
             self.toolbar.hide()
+        self.config.set_user_option('viz-toolbar-visible', col.get_active())
+
+    def _diff_visibility_changed(self, col):
+        if col.get_active():
+            self.diff.show()
+        else:
+            self.diff.hide()
+        self.config.set_user_option('viz-show-diffs', str(col.get_active()))
+        self.update_diff_panel()
 
     def _show_about_cb(self, w):
         dialog = AboutDialog()
@@ -489,3 +525,25 @@
         window.show()
 
 
+    def update_diff_panel(self, revision=None, parents=None):
+        """Show the current revision in the diff panel."""
+        if self.config.get_user_option('viz-show-diffs') == 'False':
+            return
+
+        if not revision: # default to selected row
+            revision = self.treeview.get_revision()
+        if (not revision) or (revision == NULL_REVISION):
+            return
+
+        if not parents: # default to selected row's parents
+            parents  = self.treeview.get_parents()
+        if len(parents) == 0:
+            parent_id = None
+        else:
+            parent_id = parents[0]
+
+        rev_tree    = self.branch.repository.revision_tree(revision.revision_id)
+        parent_tree = self.branch.repository.revision_tree(parent_id)
+
+        self.diff.set_diff(rev_tree, parent_tree)
+        self.diff.show_all()

# Begin bundle
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
-- 
bzr-gtk mailing list
[email protected]
Modify settings or unsubscribe at: 
https://lists.canonical.com/mailman/listinfo/bzr-gtk

Reply via email to