99
99
self.refresh_action.connect("activate", self._refresh_clicked)
100
100
self.refresh_action.connect_accelerator()
102
self.vbox = self.construct()
104
104
def _save_size_on_destroy(self, widget, config_name):
105
105
"""Creates a hook that saves the size of widget to config option
118
118
vbox = gtk.VBox(spacing=0)
121
self.paned = gtk.VPaned()
122
self.paned.pack1(self.construct_top(), resize=False, shrink=True)
123
self.paned.pack2(self.construct_bottom(), resize=True, shrink=False)
121
# order is important here
122
paned = self.construct_paned()
126
123
nav = self.construct_navigation()
127
124
menubar = self.construct_menubar()
128
126
vbox.pack_start(menubar, expand=False, fill=True)
129
127
vbox.pack_start(nav, expand=False, fill=True)
131
vbox.pack_start(self.paned, expand=True, fill=True)
132
vbox.set_focus_child(self.paned)
134
self.treeview.connect('revision-selected',
135
self._treeselection_changed_cb)
136
self.treeview.connect('revision-activated',
137
self._tree_revision_activated)
139
self.treeview.connect('tag-added', lambda w, t, r: self._update_tags())
128
vbox.pack_start(paned, expand=True, fill=True)
129
vbox.set_focus_child(paned)
136
def construct_paned(self):
137
"""Construct the main HPaned/VPaned contents."""
138
if self.config.get_user_option('viz-vertical') == 'True':
139
self.paned = gtk.HPaned()
141
self.paned = gtk.VPaned()
143
self.paned.pack1(self.construct_top(), resize=False, shrink=True)
144
self.paned.pack2(self.construct_bottom(), resize=True, shrink=False)
142
149
def construct_menubar(self):
143
150
menubar = gtk.MenuBar()
190
197
view_menu_compact.set_active(self.compact_view)
191
198
view_menu_compact.connect('activate', self._brokenlines_toggled_cb)
200
view_menu_vertical = gtk.CheckMenuItem("Side-by-side Layout")
201
view_menu_vertical.set_active(False)
202
if self.config.get_user_option('viz-vertical') == 'True':
203
view_menu_vertical.set_active(True)
204
view_menu_vertical.connect('toggled', self._vertical_layout)
193
206
view_menu_diffs = gtk.CheckMenuItem("Show Diffs")
194
207
view_menu_diffs.set_active(False)
195
208
if self.config.get_user_option('viz-show-diffs') == 'True':
211
224
view_menu.add(view_menu_toolbar)
212
225
view_menu.add(view_menu_compact)
226
view_menu.add(view_menu_vertical)
213
227
view_menu.add(gtk.SeparatorMenuItem())
214
228
view_menu.add(view_menu_diffs)
215
229
view_menu.add(view_menu_wide_diffs)
249
263
go_menu.add(gtk.SeparatorMenuItem())
250
264
go_menu.add(self.go_menu_tags)
252
self.revision_menu = RevisionMenu(self.branch.repository, [], self.branch, parent=self)
266
self.revision_menu = RevisionMenu(self.branch.repository, [],
267
self.branch, parent=self)
253
268
revision_menuitem = gtk.MenuItem("_Revision")
254
269
revision_menuitem.set_submenu(self.revision_menu)
279
294
help_menuitem = gtk.MenuItem("_Help")
280
295
help_menuitem.set_submenu(help_menu)
282
help_about_menuitem = gtk.ImageMenuItem(gtk.STOCK_ABOUT, self.accel_group)
297
help_about_menuitem = gtk.ImageMenuItem(gtk.STOCK_ABOUT,
283
299
help_about_menuitem.connect('activate', self._about_dialog_cb)
285
301
help_menu.add(help_about_menuitem)
299
315
"""Construct the top-half of the window."""
300
316
# FIXME: Make broken_line_length configurable
302
self.treeview = TreeView(self.branch, self.start_revs, self.maxnum, self.compact_view)
318
self.treeview = TreeView(self.branch, self.start_revs, self.maxnum,
304
321
for col in ["revno", "date"]:
305
322
option = self.config.get_user_option(col + '-column-visible')
306
323
if option is not None:
307
self.treeview.set_property(col + '-column-visible', option == 'True')
324
self.treeview.set_property(col + '-column-visible',
309
327
self.treeview.set_property(col + '-column-visible', False)
368
386
self.revisionview.show()
369
387
self.revisionview.set_show_callback(self._show_clicked_cb)
370
388
self.revisionview.connect('notify::revision', self._go_clicked_cb)
371
self.treeview.connect('tag-added', lambda w, t, r: self.revisionview.update_tags())
389
self.treeview.connect('tag-added',
390
lambda w, t, r: self.revisionview.update_tags())
391
self.treeview.connect('revision-selected',
392
self._treeselection_changed_cb)
393
self.treeview.connect('revision-activated',
394
self._tree_revision_activated)
372
395
self.diff_paned.pack1(self.revisionview)
374
397
from bzrlib.plugins.gtk.diff import DiffWidget
390
413
parents = self.treeview.get_parents()
391
414
children = self.treeview.get_children()
393
self.revision_menu.set_revision_ids([revision.revision_id])
395
if revision and revision != NULL_REVISION:
416
if revision and revision.revision_id != NULL_REVISION:
417
self.revision_menu.set_revision_ids([revision.revision_id])
396
418
prev_menu = gtk.Menu()
397
419
if len(parents) > 0:
398
420
self.prev_rev_action.set_sensitive(True)
492
514
_mod_index.index_url(self.branch.base)
494
516
def _branch_search_cb(self, w):
495
from bzrlib.plugins.search import index as _mod_index
517
from bzrlib.plugins.search import (
519
errors as search_errors,
496
521
from bzrlib.plugins.gtk.search import SearchDialog
497
from bzrlib.plugins.search import errors as search_errors
500
524
index = _mod_index.open_index_url(self.branch.base)
532
556
self.toolbar.hide()
533
557
self.config.set_user_option('viz-toolbar-visible', col.get_active())
559
def _vertical_layout(self, col):
560
"""Toggle the layout vertical/horizontal"""
561
self.config.set_user_option('viz-vertical', str(col.get_active()))
564
self.vbox.remove(old)
565
self.vbox.pack_start(self.construct_paned(), expand=True, fill=True)
566
self._make_diff_paned_nonzero_size()
567
self._make_diff_nonzero_size()
569
self.treeview.emit('revision-selected')
571
def _make_diff_paned_nonzero_size(self):
572
"""make sure the diff/revision pane isn't zero-width or zero-height"""
573
alloc = self.diff_paned.get_allocation()
574
if (alloc.width < 10) or (alloc.height < 10):
575
width, height = self.get_size()
576
self.diff_paned.set_size_request(width/3, int(height / 2.5))
535
578
def _make_diff_nonzero_size(self):
536
579
"""make sure the diff isn't zero-width or zero-height"""
537
580
alloc = self.diff.get_allocation()