Sigh. I forgot to commit NEWS before sending. This is the same
as before, except with a change summary in NEWS.
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: 84eee17d7b9e9ea640bb1efe3ace42d6a08ae870
# timestamp: 2008-07-10 02:01:26 -0600
# source_branch: lp:~toykeeper/bzr-gtk/vis-enhancements
# base_revision_id: [EMAIL PROTECTED]
#
# Begin patch
=== modified file 'NEWS'
--- NEWS 2008-07-01 21:56:25 +0000
+++ NEWS 2008-07-10 07:58:40 +0000
@@ -11,6 +11,10 @@
* Add "Send Merge Directive" button in bzr viz. (Jelmer Vernooij)
+ * Added an optional diff panel to bzr vis. (Scott Scriven)
+
+ * Made bzr vis remember whether the toolbar is visible. (Scott Scriven)
+
BUG FIXES
* Replace _() calls by _i18n() calls. (Vincent Ladeuil, #187283)
@@ -30,6 +34,8 @@
* List network drives in Olive. (Kevin Light, #244308)
+ * Removed some redundant screen redrawing in bzr vis. (Scott Scriven)
+
CHANGES
* Moved notify icon code to separate script. (Jelmer Vernooij)
=== 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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
wu5IpwoSCqBYSeA=
--
bzr-gtk mailing list
[email protected]
Modify settings or unsubscribe at:
https://lists.canonical.com/mailman/listinfo/bzr-gtk