/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to viz/branchwin.py

  • Committer: Javier Derderian
  • Date: 2008-04-11 20:28:08 UTC
  • mfrom: (461.1.3 trunk)
  • mto: (465.1.1 gtk.patch)
  • mto: This revision was merged to the branch mainline in revision 466.
  • Revision ID: javierder@gmail.com-20080411202808-1b11f86go14pik5o
Merged from patch

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
24
26
 
25
27
class BranchWindow(Window):
26
28
    """Branch window.
66
68
 
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)
70
71
 
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()
87
88
 
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()
93
 
 
94
89
        self.construct()
95
90
 
96
91
    def set_revision(self, revid):
151
146
        view_menuitem = gtk.MenuItem("_View")
152
147
        view_menuitem.set_submenu(view_menu)
153
148
 
154
 
        view_menu_refresh = self.refresh_action.create_menu_item()
155
 
        view_menu_refresh.connect('activate', self._refresh_clicked)
156
 
 
157
 
        view_menu.add(view_menu_refresh)
158
 
        view_menu.add(gtk.SeparatorMenuItem())
159
 
 
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)
208
197
 
209
198
        revision_menu_diff = gtk.MenuItem("View Changes")
210
199
        revision_menu_diff.connect('activate', 
211
 
                self._menu_diff_cb)
 
200
                lambda w: self.treeview.show_diff())
212
201
        
213
202
        revision_menu_compare = gtk.MenuItem("Compare with...")
214
203
        revision_menu_compare.connect('activate',
215
204
                self._compare_with_cb)
216
 
 
 
205
        
217
206
        revision_menu_tag = gtk.MenuItem("Tag Revision")
218
207
        revision_menu_tag.connect('activate', self._tag_revision_cb)
219
208
 
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')
268
 
            else:
269
 
                self.treeview.set_property(col + '-column-visible', False)
270
257
 
 
258
        self.treeview.set_property(col + '-column-visible', False)
271
259
        self.treeview.show()
272
260
 
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()
321
309
 
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)
329
 
                        try:
330
 
                            str = ' (' + parent.properties['branch-nick'] + ')'
331
 
                        except KeyError:
332
 
                            str = ""
 
315
                    parent = self.branch.repository.get_revision(parent_id)
 
316
                    try:
 
317
                        str = ' (' + parent.properties['branch-nick'] + ')'
 
318
                    except KeyError:
 
319
                        str = ""
333
320
 
334
 
                        item = gtk.MenuItem(parent.message.split("\n")[0] + str)
335
 
                        item.connect('activate', self._set_revision_cb, parent_id)
336
 
                        prev_menu.add(item)
 
321
                    item = gtk.MenuItem(parent.message.split("\n")[0] + str)
 
322
                    item.connect('activate', self._set_revision_cb, parent_id)
 
323
                    prev_menu.add(item)
337
324
                prev_menu.show_all()
338
325
            else:
339
326
                self.prev_rev_action.set_sensitive(False)
377
364
 
378
365
        self.show_diff(revision.revision_id, parent_id)
379
366
        self.treeview.grab_focus()
380
 
        
381
 
    def _menu_diff_cb(self,w):
382
 
        (path, focus) = self.treeview.treeview.get_cursor()
383
 
        revid = self.treeview.model[path][treemodel.REVID]
384
 
        
385
 
        parentids = self.branch.repository.revision_parents(revid)
386
 
 
387
 
        if len(parentids) == 0:
388
 
            parentid = NULL_REVISION
389
 
        else:
390
 
            parentid = parentids[0]
391
 
        
392
 
        self.show_diff(revid,parentid)    
 
367
    
393
368
 
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"""
415
390
        
416
 
        from bzrlib.plugins.gtk.revbrowser import RevisionBrowser
417
 
        
418
 
        rb = RevisionBrowser(self.branch,self)
419
 
        ret = rb.run()
420
 
        
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()
 
393
 
 
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...
 
396
                           
 
397
        for (revid, parent_revids) in graph.iter_ancestry(start_revs):
 
398
            graph_parents[revid] = parent_revids
 
399
 
 
400
        graph_parents["top:"] = start_revs
 
401
 
 
402
        if len(graph_parents)>0:
 
403
            merge_sorted_revisions = merge_sort(
 
404
                graph_parents,
 
405
                "top:",
 
406
                generate_revno=True)
 
407
        else:
 
408
            merge_sorted_revisions = ()
 
409
 
 
410
        response, revid2 = _chooserevison_dialog(merge_sorted_revisions) # show dialog passing revisions
 
411
 
 
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)
425
 
            
426
 
        rb.destroy()
 
415
 
 
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)
 
421
            window.show()
 
422
 
 
423
        elif response == gtk.RESPONSE_OK and revid2 == '':
 
424
            error_dialog("Bad revision","You must select a revision")
427
425
            
428
426
    def _set_revision_cb(self, w, revision_id):
429
427
        self.treeview.set_revision_id(revision_id)