16
from bzrlib.plugins.gtk.window import Window
17
16
from bzrlib.plugins.gtk import icon_path
17
from bzrlib.plugins.gtk.branchview import TreeView, treemodel
18
18
from bzrlib.plugins.gtk.tags import AddTagDialog
19
19
from bzrlib.plugins.gtk.preferences import PreferencesWindow
20
from bzrlib.plugins.gtk.branchview import TreeView, treemodel
20
from bzrlib.plugins.gtk.revisionmenu import RevisionMenu
21
from bzrlib.plugins.gtk.window import Window
22
23
from bzrlib.config import BranchConfig, GlobalConfig
23
24
from bzrlib.revision import Revision, NULL_REVISION
107
108
self.paned.pack2(self.construct_bottom(), resize=False, shrink=True)
108
109
self.paned.show()
110
vbox.pack_start(self.construct_menubar(), expand=False, fill=True)
111
vbox.pack_start(self.construct_navigation(), expand=False, fill=True)
111
nav = self.construct_navigation()
112
menubar = self.construct_menubar()
113
vbox.pack_start(menubar, expand=False, fill=True)
114
vbox.pack_start(nav, expand=False, fill=True)
113
116
vbox.pack_start(self.paned, expand=True, fill=True)
114
117
vbox.set_focus_child(self.paned)
161
164
view_menu_toolbar = gtk.CheckMenuItem("Show Toolbar")
162
165
view_menu_toolbar.set_active(True)
166
if self.config.get_user_option('viz-toolbar-visible') == 'False':
167
view_menu_toolbar.set_active(False)
163
169
view_menu_toolbar.connect('toggled', self._toolbar_visibility_changed)
165
171
view_menu_compact = gtk.CheckMenuItem("Show Compact Graph")
166
172
view_menu_compact.set_active(self.compact_view)
167
173
view_menu_compact.connect('activate', self._brokenlines_toggled_cb)
175
view_menu_diffs = gtk.CheckMenuItem("Show Diffs")
176
view_menu_diffs.set_active(True)
177
if self.config.get_user_option('viz-show-diffs') == 'False':
178
view_menu_diffs.set_active(False)
179
view_menu_diffs.connect('toggled', self._diff_visibility_changed)
169
181
view_menu.add(view_menu_toolbar)
170
182
view_menu.add(view_menu_compact)
183
view_menu.add(view_menu_diffs)
171
184
view_menu.add(gtk.SeparatorMenuItem())
173
186
self.mnu_show_revno_column = gtk.CheckMenuItem("Show Revision _Number Column")
203
216
go_menu.add(gtk.SeparatorMenuItem())
204
217
go_menu.add(self.go_menu_tags)
206
revision_menu = gtk.Menu()
219
self.revision_menu = RevisionMenu(self.branch.repository, [], self.branch, parent=self)
207
220
revision_menuitem = gtk.MenuItem("_Revision")
208
revision_menuitem.set_submenu(revision_menu)
210
revision_menu_diff = gtk.MenuItem("View Changes")
211
revision_menu_diff.connect('activate',
214
revision_menu_compare = gtk.MenuItem("Compare with...")
215
revision_menu_compare.connect('activate',
216
self._compare_with_cb)
218
revision_menu_tag = gtk.MenuItem("Tag Revision")
219
revision_menu_tag.connect('activate', self._tag_revision_cb)
221
revision_menu.add(revision_menu_tag)
222
revision_menu.add(revision_menu_diff)
223
revision_menu.add(revision_menu_compare)
221
revision_menuitem.set_submenu(self.revision_menu)
225
223
branch_menu = gtk.Menu()
226
224
branch_menuitem = gtk.MenuItem("_Branch")
234
232
except ImportError:
235
233
mutter("Didn't find search plugin")
235
branch_menu.add(gtk.SeparatorMenuItem())
237
237
branch_index_menuitem = gtk.MenuItem("_Index")
238
238
branch_index_menuitem.connect('activate', self._branch_index_cb)
239
239
branch_menu.add(branch_index_menuitem)
241
branch_search_menuitem = gtk.MenuItem("_Search")
242
branch_search_menuitem.connect('activate', self._branch_search_cb)
243
branch_menu.add(branch_search_menuitem)
241
245
help_menu = gtk.Menu()
242
246
help_menuitem = gtk.MenuItem("_Help")
243
247
help_menuitem.set_submenu(help_menu)
311
315
def construct_bottom(self):
312
316
"""Construct the bottom half of the window."""
317
self.bottom_hpaned = gtk.HPaned()
318
(width, height) = self.get_size()
319
self.bottom_hpaned.set_size_request(width, int(height / 2.5))
313
321
from bzrlib.plugins.gtk.revisionview import RevisionView
314
322
self.revisionview = RevisionView(branch=self.branch)
315
(width, height) = self.get_size()
316
self.revisionview.set_size_request(width, int(height / 2.5))
323
self.revisionview.set_size_request(width/3, int(height / 2.5))
317
324
self.revisionview.show()
318
325
self.revisionview.set_show_callback(self._show_clicked_cb)
319
326
self.revisionview.connect('notify::revision', self._go_clicked_cb)
320
327
self.treeview.connect('tag-added', lambda w, t, r: self.revisionview.update_tags())
321
return self.revisionview
328
self.bottom_hpaned.pack1(self.revisionview)
330
from bzrlib.plugins.gtk.diff import DiffWidget
331
self.diff = DiffWidget()
332
self.bottom_hpaned.pack2(self.diff)
334
self.bottom_hpaned.show_all()
335
if self.config.get_user_option('viz-show-diffs') == 'False':
338
return self.bottom_hpaned
323
340
def _tag_selected_cb(self, menuitem, revid):
324
341
self.treeview.set_revision_id(revid)
374
393
self.revisionview.set_revision(revision)
375
394
self.revisionview.set_children(children)
396
self.update_diff_panel(revision, parents)
377
398
def _tree_revision_activated(self, widget, path, col):
378
399
# TODO: more than one parent
379
400
"""Callback for when a treeview row gets activated."""
388
409
self.show_diff(revision.revision_id, parent_id)
389
410
self.treeview.grab_focus()
391
def _menu_diff_cb(self,w):
392
(path, focus) = self.treeview.treeview.get_cursor()
393
revid = self.treeview.model[path][treemodel.REVID]
395
parentids = self.branch.repository.revision_parents(revid)
397
if len(parentids) == 0:
398
parentid = NULL_REVISION
400
parentid = parentids[0]
402
self.show_diff(revid,parentid)
404
412
def _back_clicked_cb(self, *args):
405
413
"""Callback for when the back button is clicked."""
406
414
self.treeview.back()
419
427
self.show_diff(revid, parentid)
420
428
self.treeview.grab_focus()
422
def _compare_with_cb(self,w):
423
"""Callback for revision 'compare with' menu. Will show a small
424
dialog with branch revisions to compare with selected revision in TreeView"""
426
from bzrlib.plugins.gtk.revbrowser import RevisionBrowser
428
rb = RevisionBrowser(self.branch,self)
431
if ret == gtk.RESPONSE_OK:
432
(path, focus) = self.treeview.treeview.get_cursor()
433
revid = self.treeview.model[path][treemodel.REVID]
434
self.show_diff(revid, rb.selected_revid)
438
430
def _set_revision_cb(self, w, revision_id):
439
431
self.treeview.set_revision_id(revision_id)
450
442
self.treeview.set_property('compact', self.compact_view)
451
443
self.treeview.refresh()
453
def _tag_revision_cb(self, w):
455
self.treeview.set_sensitive(False)
456
dialog = AddTagDialog(self.branch.repository, self.treeview.get_revision().revision_id, self.branch)
457
response = dialog.run()
458
if response != gtk.RESPONSE_NONE:
461
if response == gtk.RESPONSE_OK:
462
self.treeview.add_tag(dialog.tagname, dialog._revid)
467
self.treeview.set_sensitive(True)
469
445
def _branch_index_cb(self, w):
470
446
from bzrlib.plugins.search import index as _mod_index
471
447
_mod_index.index_url(self.branch.base)
449
def _branch_search_cb(self, w):
450
from bzrlib.plugins.gtk.search import SearchDialog
451
dialog = SearchDialog(self.branch)
453
if dialog.run() == gtk.RESPONSE_OK:
454
self.set_revision(dialog.get_revision())
473
458
def _about_dialog_cb(self, w):
474
459
from bzrlib.plugins.gtk.about import AboutDialog
482
467
def _toolbar_visibility_changed(self, col):
483
468
if col.get_active():
486
471
self.toolbar.hide()
472
self.config.set_user_option('viz-toolbar-visible', col.get_active())
474
def _diff_visibility_changed(self, col):
479
self.config.set_user_option('viz-show-diffs', str(col.get_active()))
480
self.update_diff_panel()
488
482
def _show_about_cb(self, w):
489
483
dialog = AboutDialog()
528
def update_diff_panel(self, revision=None, parents=None):
529
"""Show the current revision in the diff panel."""
530
if self.config.get_user_option('viz-show-diffs') == 'False':
533
if not revision: # default to selected row
534
revision = self.treeview.get_revision()
535
if (not revision) or (revision == NULL_REVISION):
538
if not parents: # default to selected row's parents
539
parents = self.treeview.get_parents()
540
if len(parents) == 0:
543
parent_id = parents[0]
545
rev_tree = self.branch.repository.revision_tree(revision.revision_id)
546
parent_tree = self.branch.repository.revision_tree(parent_id)
548
self.diff.set_diff(rev_tree, parent_tree)