18
18
from bzrlib.plugins.gtk.tags import AddTagDialog
19
19
from bzrlib.plugins.gtk.preferences import PreferencesWindow
20
20
from bzrlib.plugins.gtk.branchview import TreeView, treemodel
21
from bzrlib.plugins.gtk.dialog import _chooserevison_dialog
21
22
from bzrlib.revision import Revision, NULL_REVISION
22
23
from bzrlib.config import BranchConfig
23
24
from bzrlib.config import GlobalConfig
25
from bzrlib.tsort import merge_sort
25
27
class BranchWindow(Window):
67
69
gtk.accel_map_add_entry("<viz>/Go/Next Revision", gtk.keysyms.Up, gtk.gdk.MOD1_MASK)
68
70
gtk.accel_map_add_entry("<viz>/Go/Previous Revision", gtk.keysyms.Down, gtk.gdk.MOD1_MASK)
69
gtk.accel_map_add_entry("<viz>/View/Refresh", gtk.keysyms.F5, 0)
71
72
self.accel_group = gtk.AccelGroup()
72
73
self.add_accel_group(self.accel_group)
85
86
self.next_rev_action.connect("activate", self._fwd_clicked_cb)
86
87
self.next_rev_action.connect_accelerator()
88
self.refresh_action = gtk.Action("refresh", "_Refresh", "Refresh view", gtk.STOCK_REFRESH)
89
self.refresh_action.set_accel_path("<viz>/View/Refresh")
90
self.refresh_action.set_accel_group(self.accel_group)
91
self.refresh_action.connect("activate", self._refresh_clicked)
92
self.refresh_action.connect_accelerator()
96
91
def set_revision(self, revid):
151
146
view_menuitem = gtk.MenuItem("_View")
152
147
view_menuitem.set_submenu(view_menu)
154
view_menu_refresh = self.refresh_action.create_menu_item()
155
view_menu_refresh.connect('activate', self._refresh_clicked)
157
view_menu.add(view_menu_refresh)
158
view_menu.add(gtk.SeparatorMenuItem())
160
149
view_menu_toolbar = gtk.CheckMenuItem("Show Toolbar")
161
150
view_menu_toolbar.set_active(True)
162
151
view_menu_toolbar.connect('toggled', self._toolbar_visibility_changed)
209
198
revision_menu_diff = gtk.MenuItem("View Changes")
210
199
revision_menu_diff.connect('activate',
200
lambda w: self.treeview.show_diff())
213
202
revision_menu_compare = gtk.MenuItem("Compare with...")
214
203
revision_menu_compare.connect('activate',
215
204
self._compare_with_cb)
217
206
revision_menu_tag = gtk.MenuItem("Tag Revision")
218
207
revision_menu_tag.connect('activate', self._tag_revision_cb)
265
254
option = self.config.get_user_option(col + '-column-visible')
266
255
if option is not None:
267
256
self.treeview.set_property(col + '-column-visible', option == 'True')
269
self.treeview.set_property(col + '-column-visible', False)
258
self.treeview.set_property(col + '-column-visible', False)
271
259
self.treeview.show()
273
261
align = gtk.Alignment(0.0, 0.0, 1.0, 1.0)
319
307
parents = self.treeview.get_parents()
320
308
children = self.treeview.get_children()
322
if revision and revision != NULL_REVISION:
310
if revision is not None:
323
311
prev_menu = gtk.Menu()
324
312
if len(parents) > 0:
325
313
self.prev_rev_action.set_sensitive(True)
326
314
for parent_id in parents:
327
if parent_id and parent_id != NULL_REVISION:
328
parent = self.branch.repository.get_revision(parent_id)
330
str = ' (' + parent.properties['branch-nick'] + ')'
315
parent = self.branch.repository.get_revision(parent_id)
317
str = ' (' + parent.properties['branch-nick'] + ')'
334
item = gtk.MenuItem(parent.message.split("\n")[0] + str)
335
item.connect('activate', self._set_revision_cb, parent_id)
321
item = gtk.MenuItem(parent.message.split("\n")[0] + str)
322
item.connect('activate', self._set_revision_cb, parent_id)
337
324
prev_menu.show_all()
339
326
self.prev_rev_action.set_sensitive(False)
378
365
self.show_diff(revision.revision_id, parent_id)
379
366
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
369
def _back_clicked_cb(self, *args):
395
370
"""Callback for when the back button is clicked."""
413
388
"""Callback for revision 'compare with' menu. Will show a small
414
389
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:
391
start_revs = (self.branch.last_revision(),) #create touple with only last revision
392
graph = self.branch.repository.get_graph()
394
graph_parents = {} # this code is copied from "branchview/linegraph.linegraph()" and is the
395
# only way I found to generate a list of revision numbers...
397
for (revid, parent_revids) in graph.iter_ancestry(start_revs):
398
graph_parents[revid] = parent_revids
400
graph_parents["top:"] = start_revs
402
if len(graph_parents)>0:
403
merge_sorted_revisions = merge_sort(
408
merge_sorted_revisions = ()
410
response, revid2 = _chooserevison_dialog(merge_sorted_revisions) # show dialog passing revisions
412
if response == gtk.RESPONSE_OK and revid2 != '':
422
413
(path, focus) = self.treeview.treeview.get_cursor()
423
414
revid = self.treeview.model[path][treemodel.REVID]
424
self.show_diff(revid, rb.selected_revid)
416
from bzrlib.plugins.gtk.diff import DiffWindow
417
window = DiffWindow(parent=self)
418
rev_tree = self.branch.repository.revision_tree(revid)
419
parent_tree = self.branch.repository.revision_tree(revid2)
420
window.set_diff(revid, rev_tree, parent_tree)
423
elif response == gtk.RESPONSE_OK and revid2 == '':
424
error_dialog("Bad revision","You must select a revision")
428
426
def _set_revision_cb(self, w, revision_id):
429
427
self.treeview.set_revision_id(revision_id)