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
23
from bzrlib.config import BranchConfig, GlobalConfig
21
24
from bzrlib.revision import Revision, NULL_REVISION
22
from bzrlib.config import BranchConfig
23
from bzrlib.config import GlobalConfig
25
from bzrlib.trace import mutter
25
27
class BranchWindow(Window):
106
108
self.paned.pack2(self.construct_bottom(), resize=False, shrink=True)
107
109
self.paned.show()
109
vbox.pack_start(self.construct_menubar(), expand=False, fill=True)
110
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)
112
116
vbox.pack_start(self.paned, expand=True, fill=True)
113
117
vbox.set_focus_child(self.paned)
160
164
view_menu_toolbar = gtk.CheckMenuItem("Show Toolbar")
161
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)
162
169
view_menu_toolbar.connect('toggled', self._toolbar_visibility_changed)
164
171
view_menu_compact = gtk.CheckMenuItem("Show Compact Graph")
165
172
view_menu_compact.set_active(self.compact_view)
166
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)
168
181
view_menu.add(view_menu_toolbar)
169
182
view_menu.add(view_menu_compact)
183
view_menu.add(view_menu_diffs)
170
184
view_menu.add(gtk.SeparatorMenuItem())
172
186
self.mnu_show_revno_column = gtk.CheckMenuItem("Show Revision _Number Column")
202
216
go_menu.add(gtk.SeparatorMenuItem())
203
217
go_menu.add(self.go_menu_tags)
205
revision_menu = gtk.Menu()
219
self.revision_menu = RevisionMenu(self.branch.repository, [], self.branch, parent=self)
206
220
revision_menuitem = gtk.MenuItem("_Revision")
207
revision_menuitem.set_submenu(revision_menu)
209
revision_menu_diff = gtk.MenuItem("View Changes")
210
revision_menu_diff.connect('activate',
213
revision_menu_compare = gtk.MenuItem("Compare with...")
214
revision_menu_compare.connect('activate',
215
self._compare_with_cb)
217
revision_menu_tag = gtk.MenuItem("Tag Revision")
218
revision_menu_tag.connect('activate', self._tag_revision_cb)
220
revision_menu.add(revision_menu_tag)
221
revision_menu.add(revision_menu_diff)
222
revision_menu.add(revision_menu_compare)
221
revision_menuitem.set_submenu(self.revision_menu)
224
223
branch_menu = gtk.Menu()
225
224
branch_menuitem = gtk.MenuItem("_Branch")
228
227
branch_menu.add(gtk.MenuItem("Pu_ll Revisions"))
229
228
branch_menu.add(gtk.MenuItem("Pu_sh Revisions"))
231
from bzrlib.plugins import search
233
mutter("Didn't find search plugin")
235
branch_menu.add(gtk.SeparatorMenuItem())
237
branch_index_menuitem = gtk.MenuItem("_Index")
238
branch_index_menuitem.connect('activate', self._branch_index_cb)
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)
231
245
help_menu = gtk.Menu()
232
246
help_menuitem = gtk.MenuItem("_Help")
233
247
help_menuitem.set_submenu(help_menu)
301
315
def construct_bottom(self):
302
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))
303
321
from bzrlib.plugins.gtk.revisionview import RevisionView
304
322
self.revisionview = RevisionView(branch=self.branch)
305
(width, height) = self.get_size()
306
self.revisionview.set_size_request(width, int(height / 2.5))
323
self.revisionview.set_size_request(width/3, int(height / 2.5))
307
324
self.revisionview.show()
308
325
self.revisionview.set_show_callback(self._show_clicked_cb)
309
326
self.revisionview.connect('notify::revision', self._go_clicked_cb)
310
327
self.treeview.connect('tag-added', lambda w, t, r: self.revisionview.update_tags())
311
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
313
340
def _tag_selected_cb(self, menuitem, revid):
314
341
self.treeview.set_revision_id(revid)
364
393
self.revisionview.set_revision(revision)
365
394
self.revisionview.set_children(children)
396
self.update_diff_panel(revision, parents)
367
398
def _tree_revision_activated(self, widget, path, col):
368
399
# TODO: more than one parent
369
400
"""Callback for when a treeview row gets activated."""
378
409
self.show_diff(revision.revision_id, parent_id)
379
410
self.treeview.grab_focus()
381
def _menu_diff_cb(self,w):
382
(path, focus) = self.treeview.treeview.get_cursor()
383
revid = self.treeview.model[path][treemodel.REVID]
385
parentids = self.branch.repository.revision_parents(revid)
387
if len(parentids) == 0:
388
parentid = NULL_REVISION
390
parentid = parentids[0]
392
self.show_diff(revid,parentid)
394
412
def _back_clicked_cb(self, *args):
395
413
"""Callback for when the back button is clicked."""
396
414
self.treeview.back()
409
427
self.show_diff(revid, parentid)
410
428
self.treeview.grab_focus()
412
def _compare_with_cb(self,w):
413
"""Callback for revision 'compare with' menu. Will show a small
414
dialog with branch revisions to compare with selected revision in TreeView"""
416
from bzrlib.plugins.gtk.revbrowser import RevisionBrowser
418
rb = RevisionBrowser(self.branch,self)
421
if ret == gtk.RESPONSE_OK:
422
(path, focus) = self.treeview.treeview.get_cursor()
423
revid = self.treeview.model[path][treemodel.REVID]
424
self.show_diff(revid, rb.selected_revid)
428
430
def _set_revision_cb(self, w, revision_id):
429
431
self.treeview.set_revision_id(revision_id)
440
442
self.treeview.set_property('compact', self.compact_view)
441
443
self.treeview.refresh()
443
def _tag_revision_cb(self, w):
445
self.treeview.set_sensitive(False)
446
dialog = AddTagDialog(self.branch.repository, self.treeview.get_revision().revision_id, self.branch)
447
response = dialog.run()
448
if response != gtk.RESPONSE_NONE:
451
if response == gtk.RESPONSE_OK:
452
self.treeview.add_tag(dialog.tagname, dialog._revid)
457
self.treeview.set_sensitive(True)
445
def _branch_index_cb(self, w):
446
from bzrlib.plugins.search import index as _mod_index
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())
459
458
def _about_dialog_cb(self, w):
460
459
from bzrlib.plugins.gtk.about import AboutDialog
468
467
def _toolbar_visibility_changed(self, col):
469
468
if col.get_active():
472
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()
474
482
def _show_about_cb(self, w):
475
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)