Merge lp:~jelmer/bzr-gtk/vertical-layout into lp:bzr-gtk/gtk2

Proposed by Jelmer Vernooij
Status: Superseded
Proposed branch: lp:~jelmer/bzr-gtk/vertical-layout
Merge into: lp:bzr-gtk/gtk2
Diff against target: 301 lines (+90/-33)
3 files modified
NEWS (+5/-0)
branchview/treeview.py (+14/-5)
viz/branchwin.py (+71/-28)
To merge this branch: bzr merge lp:~jelmer/bzr-gtk/vertical-layout
Reviewer Review Type Date Requested Status
John A Meinel Needs Fixing
Review via email: mp+50446@code.launchpad.net

This proposal has been superseded by a proposal from 2011-04-15.

Description of the change

Patch from Ximin Luo to allow using bzr viz in "widescreen mode" where the revision details are shown next to the graph.

https://bugs.launchpad.net/bzr-gtk/+bug/649273/+attachment/1645811/+files/bzr-gtk_vertical.png

To post a comment you must log in.
Revision history for this message
John A Meinel (jameinel) wrote :

seems fine to me. I'm not 100% sure what to look for (other than noticing that there aren't any tests :).

When I tried this, setting the side-by-side layout did move the objects. However it caused it to stop updating the Revision text when selecting a revision. So i'm pretty sure there is a bug somewhere, where moving the items is causing it to lose linkage to the contents.

review: Needs Fixing
lp:~jelmer/bzr-gtk/vertical-layout updated
716. By Jelmer Vernooij

Merge trunk.

717. By Jelmer Vernooij

Fix some formatting.

718. By Jelmer Vernooij

Construct model early.

719. By Jelmer Vernooij

Fix signal handling.

Revision history for this message
Jelmer Vernooij (jelmer) wrote :

I've reproduced these issues here, they should now be fixed.

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'NEWS'
2--- NEWS 2011-03-23 09:49:44 +0000
3+++ NEWS 2011-04-15 01:09:25 +0000
4@@ -41,6 +41,11 @@
5
6 * Add lock dialog. (Daniel Schierbeck, #93652)
7
8+ FEATURES
9+
10+ * Add option to use "bzr viz" with a vertical layout.
11+ (Ximin Luo, #649273)
12+
13 0.99.1 2010-08-26
14
15 BUG FIXES
16
17=== modified file 'branchview/treeview.py'
18--- branchview/treeview.py 2011-03-23 09:49:44 +0000
19+++ branchview/treeview.py 2011-04-15 01:09:25 +0000
20@@ -131,6 +131,7 @@
21 self.maxnum = maxnum
22 self.compact = compact
23
24+ self.model = treemodel.TreeModel(self.branch, [])
25 gobject.idle_add(self.populate)
26
27 self.connect("destroy", self._on_destroy)
28@@ -155,15 +156,23 @@
29 elif property.name == 'branch':
30 return self.branch
31 elif property.name == 'revision':
32+ if self.path is None:
33+ return None
34 return self.model.get_value(self.model.get_iter(self.path),
35 treemodel.REVISION)
36 elif property.name == 'revision-number':
37+ if self.path is None:
38+ return None
39 return self.model.get_value(self.model.get_iter(self.path),
40 treemodel.REVNO)
41 elif property.name == 'children':
42+ if self.path is None:
43+ return None
44 return self.model.get_value(self.model.get_iter(self.path),
45 treemodel.CHILDREN)
46 elif property.name == 'parents':
47+ if self.path is None:
48+ return None
49 return self.model.get_value(self.model.get_iter(self.path),
50 treemodel.PARENTS)
51 else:
52@@ -310,7 +319,7 @@
53 self.mainline_only,
54 self.progress_bar)
55
56- self.model = treemodel.TreeModel(self.branch, linegraphdata)
57+ self.model.line_graph_data = linegraphdata
58 self.graph_cell.columns_len = columns_len
59 width = self.graph_cell.get_size(self.treeview)[2]
60 if width > 500:
61@@ -370,7 +379,7 @@
62 cell.set_property("width-chars", 15)
63 cell.set_property("ellipsize", pango.ELLIPSIZE_END)
64 self.revno_column = gtk.TreeViewColumn("Revision No")
65- self.revno_column.set_resizable(False)
66+ self.revno_column.set_resizable(True)
67 self.revno_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
68 self.revno_column.set_fixed_width(cell.get_size(self.treeview)[2])
69 self.revno_column.pack_start(cell, expand=True)
70@@ -379,7 +388,7 @@
71
72 self.graph_cell = CellRendererGraph()
73 self.graph_column = gtk.TreeViewColumn()
74- self.graph_column.set_resizable(False)
75+ self.graph_column.set_resizable(True)
76 self.graph_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
77 self.graph_column.pack_start(self.graph_cell, expand=True)
78 self.graph_column.add_attribute(self.graph_cell, "node", treemodel.NODE)
79@@ -392,7 +401,7 @@
80 cell.set_property("width-chars", 65)
81 cell.set_property("ellipsize", pango.ELLIPSIZE_END)
82 self.summary_column = gtk.TreeViewColumn("Summary")
83- self.summary_column.set_resizable(False)
84+ self.summary_column.set_resizable(True)
85 self.summary_column.set_expand(True)
86 self.summary_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
87 self.summary_column.set_fixed_width(cell.get_size(self.treeview)[2])
88@@ -416,7 +425,7 @@
89 cell.set_property("ellipsize", pango.ELLIPSIZE_END)
90 self.date_column = gtk.TreeViewColumn("Date")
91 self.date_column.set_visible(False)
92- self.date_column.set_resizable(False)
93+ self.date_column.set_resizable(True)
94 self.date_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
95 self.date_column.set_fixed_width(130)
96 self.date_column.pack_start(cell, expand=True)
97
98=== modified file 'viz/branchwin.py'
99--- viz/branchwin.py 2011-03-14 20:12:19 +0000
100+++ viz/branchwin.py 2011-04-15 01:09:25 +0000
101@@ -99,7 +99,7 @@
102 self.refresh_action.connect("activate", self._refresh_clicked)
103 self.refresh_action.connect_accelerator()
104
105- self.construct()
106+ self.vbox = self.construct()
107
108 def _save_size_on_destroy(self, widget, config_name):
109 """Creates a hook that saves the size of widget to config option
110@@ -118,27 +118,34 @@
111 vbox = gtk.VBox(spacing=0)
112 self.add(vbox)
113
114- self.paned = gtk.VPaned()
115- self.paned.pack1(self.construct_top(), resize=False, shrink=True)
116- self.paned.pack2(self.construct_bottom(), resize=True, shrink=False)
117- self.paned.show()
118-
119+ # order is important here
120+ paned = self.construct_paned()
121 nav = self.construct_navigation()
122 menubar = self.construct_menubar()
123+
124 vbox.pack_start(menubar, expand=False, fill=True)
125 vbox.pack_start(nav, expand=False, fill=True)
126-
127- vbox.pack_start(self.paned, expand=True, fill=True)
128- vbox.set_focus_child(self.paned)
129-
130- self.treeview.connect('revision-selected',
131- self._treeselection_changed_cb)
132- self.treeview.connect('revision-activated',
133- self._tree_revision_activated)
134-
135- self.treeview.connect('tag-added', lambda w, t, r: self._update_tags())
136+ vbox.pack_start(paned, expand=True, fill=True)
137+ vbox.set_focus_child(paned)
138+
139+
140 vbox.show()
141
142+ return vbox
143+
144+ def construct_paned(self):
145+ """Construct the main HPaned/VPaned contents."""
146+ if self.config.get_user_option('viz-vertical') == 'True':
147+ self.paned = gtk.HPaned()
148+ else:
149+ self.paned = gtk.VPaned()
150+
151+ self.paned.pack1(self.construct_top(), resize=False, shrink=True)
152+ self.paned.pack2(self.construct_bottom(), resize=True, shrink=False)
153+ self.paned.show()
154+
155+ return self.paned
156+
157 def construct_menubar(self):
158 menubar = gtk.MenuBar()
159
160@@ -190,6 +197,12 @@
161 view_menu_compact.set_active(self.compact_view)
162 view_menu_compact.connect('activate', self._brokenlines_toggled_cb)
163
164+ view_menu_vertical = gtk.CheckMenuItem("Side-by-side Layout")
165+ view_menu_vertical.set_active(False)
166+ if self.config.get_user_option('viz-vertical') == 'True':
167+ view_menu_vertical.set_active(True)
168+ view_menu_vertical.connect('toggled', self._vertical_layout)
169+
170 view_menu_diffs = gtk.CheckMenuItem("Show Diffs")
171 view_menu_diffs.set_active(False)
172 if self.config.get_user_option('viz-show-diffs') == 'True':
173@@ -210,6 +223,7 @@
174
175 view_menu.add(view_menu_toolbar)
176 view_menu.add(view_menu_compact)
177+ view_menu.add(view_menu_vertical)
178 view_menu.add(gtk.SeparatorMenuItem())
179 view_menu.add(view_menu_diffs)
180 view_menu.add(view_menu_wide_diffs)
181@@ -249,7 +263,8 @@
182 go_menu.add(gtk.SeparatorMenuItem())
183 go_menu.add(self.go_menu_tags)
184
185- self.revision_menu = RevisionMenu(self.branch.repository, [], self.branch, parent=self)
186+ self.revision_menu = RevisionMenu(self.branch.repository, [],
187+ self.branch, parent=self)
188 revision_menuitem = gtk.MenuItem("_Revision")
189 revision_menuitem.set_submenu(self.revision_menu)
190
191@@ -279,7 +294,8 @@
192 help_menuitem = gtk.MenuItem("_Help")
193 help_menuitem.set_submenu(help_menu)
194
195- help_about_menuitem = gtk.ImageMenuItem(gtk.STOCK_ABOUT, self.accel_group)
196+ help_about_menuitem = gtk.ImageMenuItem(gtk.STOCK_ABOUT,
197+ self.accel_group)
198 help_about_menuitem.connect('activate', self._about_dialog_cb)
199
200 help_menu.add(help_about_menuitem)
201@@ -299,12 +315,14 @@
202 """Construct the top-half of the window."""
203 # FIXME: Make broken_line_length configurable
204
205- self.treeview = TreeView(self.branch, self.start_revs, self.maxnum, self.compact_view)
206+ self.treeview = TreeView(self.branch, self.start_revs, self.maxnum,
207+ self.compact_view)
208
209 for col in ["revno", "date"]:
210 option = self.config.get_user_option(col + '-column-visible')
211 if option is not None:
212- self.treeview.set_property(col + '-column-visible', option == 'True')
213+ self.treeview.set_property(col + '-column-visible',
214+ option == 'True')
215 else:
216 self.treeview.set_property(col + '-column-visible', False)
217
218@@ -368,7 +386,12 @@
219 self.revisionview.show()
220 self.revisionview.set_show_callback(self._show_clicked_cb)
221 self.revisionview.connect('notify::revision', self._go_clicked_cb)
222- self.treeview.connect('tag-added', lambda w, t, r: self.revisionview.update_tags())
223+ self.treeview.connect('tag-added',
224+ lambda w, t, r: self.revisionview.update_tags())
225+ self.treeview.connect('revision-selected',
226+ self._treeselection_changed_cb)
227+ self.treeview.connect('revision-activated',
228+ self._tree_revision_activated)
229 self.diff_paned.pack1(self.revisionview)
230
231 from bzrlib.plugins.gtk.diff import DiffWidget
232@@ -390,9 +413,8 @@
233 parents = self.treeview.get_parents()
234 children = self.treeview.get_children()
235
236- self.revision_menu.set_revision_ids([revision.revision_id])
237-
238- if revision and revision != NULL_REVISION:
239+ if revision and revision.revision_id != NULL_REVISION:
240+ self.revision_menu.set_revision_ids([revision.revision_id])
241 prev_menu = gtk.Menu()
242 if len(parents) > 0:
243 self.prev_rev_action.set_sensitive(True)
244@@ -400,7 +422,7 @@
245 if parent_id and parent_id != NULL_REVISION:
246 parent = self.branch.repository.get_revision(parent_id)
247 try:
248- str = ' (' + parent.properties['branch-nick'] + ')'
249+ str = ' (%s)' % parent.properties['branch-nick']
250 except KeyError:
251 str = ""
252
253@@ -421,7 +443,7 @@
254 for child_id in children:
255 child = self.branch.repository.get_revision(child_id)
256 try:
257- str = ' (' + child.properties['branch-nick'] + ')'
258+ str = ' (%s)' % child.properties['branch-nick']
259 except KeyError:
260 str = ""
261
262@@ -492,9 +514,11 @@
263 _mod_index.index_url(self.branch.base)
264
265 def _branch_search_cb(self, w):
266- from bzrlib.plugins.search import index as _mod_index
267+ from bzrlib.plugins.search import (
268+ index as _mod_index,
269+ errors as search_errors,
270+ )
271 from bzrlib.plugins.gtk.search import SearchDialog
272- from bzrlib.plugins.search import errors as search_errors
273
274 try:
275 index = _mod_index.open_index_url(self.branch.base)
276@@ -532,6 +556,25 @@
277 self.toolbar.hide()
278 self.config.set_user_option('viz-toolbar-visible', col.get_active())
279
280+ def _vertical_layout(self, col):
281+ """Toggle the layout vertical/horizontal"""
282+ self.config.set_user_option('viz-vertical', str(col.get_active()))
283+
284+ old = self.paned
285+ self.vbox.remove(old)
286+ self.vbox.pack_start(self.construct_paned(), expand=True, fill=True)
287+ self._make_diff_paned_nonzero_size()
288+ self._make_diff_nonzero_size()
289+
290+ self.treeview.emit('revision-selected')
291+
292+ def _make_diff_paned_nonzero_size(self):
293+ """make sure the diff/revision pane isn't zero-width or zero-height"""
294+ alloc = self.diff_paned.get_allocation()
295+ if (alloc.width < 10) or (alloc.height < 10):
296+ width, height = self.get_size()
297+ self.diff_paned.set_size_request(width/3, int(height / 2.5))
298+
299 def _make_diff_nonzero_size(self):
300 """make sure the diff isn't zero-width or zero-height"""
301 alloc = self.diff.get_allocation()

Subscribers

People subscribed via source and target branches

to all changes: