/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: Jelmer Vernooij
  • Date: 2008-06-29 18:12:29 UTC
  • mto: This revision was merged to the branch mainline in revision 519.
  • Revision ID: jelmer@samba.org-20080629181229-1l2m4cf7vvbyh8qg
Simplify progress bar code, use embedded progress bar inside viz window.

Show diffs side-by-side

added added

removed removed

Lines of Context:
13
13
import gobject
14
14
import pango
15
15
 
 
16
from bzrlib.plugins.gtk.window import Window
16
17
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.revisionmenu import RevisionMenu
21
 
from bzrlib.plugins.gtk.window import Window
22
 
 
23
 
from bzrlib.config import BranchConfig, GlobalConfig
 
20
from bzrlib.plugins.gtk.branchview import TreeView, treemodel
24
21
from bzrlib.revision import Revision, NULL_REVISION
25
 
from bzrlib.trace import mutter
 
22
from bzrlib.config import BranchConfig
 
23
from bzrlib.config import GlobalConfig
26
24
 
27
25
class BranchWindow(Window):
28
26
    """Branch window.
108
106
        self.paned.pack2(self.construct_bottom(), resize=False, shrink=True)
109
107
        self.paned.show()
110
108
 
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)
115
 
 
 
109
        vbox.pack_start(self.construct_menubar(), expand=False, fill=True)
 
110
        vbox.pack_start(self.construct_navigation(), expand=False, fill=True)
 
111
        
116
112
        vbox.pack_start(self.paned, expand=True, fill=True)
117
113
        vbox.set_focus_child(self.paned)
118
114
 
163
159
 
164
160
        view_menu_toolbar = gtk.CheckMenuItem("Show Toolbar")
165
161
        view_menu_toolbar.set_active(True)
166
 
        if self.config.get_user_option('viz-toolbar-visible') == 'False':
167
 
            view_menu_toolbar.set_active(False)
168
 
            self.toolbar.hide()
169
162
        view_menu_toolbar.connect('toggled', self._toolbar_visibility_changed)
170
163
 
171
164
        view_menu_compact = gtk.CheckMenuItem("Show Compact Graph")
172
165
        view_menu_compact.set_active(self.compact_view)
173
166
        view_menu_compact.connect('activate', self._brokenlines_toggled_cb)
174
167
 
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)
180
 
 
181
168
        view_menu.add(view_menu_toolbar)
182
169
        view_menu.add(view_menu_compact)
183
 
        view_menu.add(view_menu_diffs)
184
170
        view_menu.add(gtk.SeparatorMenuItem())
185
171
 
186
172
        self.mnu_show_revno_column = gtk.CheckMenuItem("Show Revision _Number Column")
216
202
        go_menu.add(gtk.SeparatorMenuItem())
217
203
        go_menu.add(self.go_menu_tags)
218
204
 
219
 
        self.revision_menu = RevisionMenu(self.branch.repository, [], self.branch, parent=self)
 
205
        revision_menu = gtk.Menu()
220
206
        revision_menuitem = gtk.MenuItem("_Revision")
221
 
        revision_menuitem.set_submenu(self.revision_menu)
 
207
        revision_menuitem.set_submenu(revision_menu)
 
208
 
 
209
        revision_menu_diff = gtk.MenuItem("View Changes")
 
210
        revision_menu_diff.connect('activate', 
 
211
                self._menu_diff_cb)
 
212
        
 
213
        revision_menu_compare = gtk.MenuItem("Compare with...")
 
214
        revision_menu_compare.connect('activate',
 
215
                self._compare_with_cb)
 
216
 
 
217
        revision_menu_tag = gtk.MenuItem("Tag Revision")
 
218
        revision_menu_tag.connect('activate', self._tag_revision_cb)
 
219
 
 
220
        revision_menu.add(revision_menu_tag)
 
221
        revision_menu.add(revision_menu_diff)
 
222
        revision_menu.add(revision_menu_compare)
222
223
 
223
224
        branch_menu = gtk.Menu()
224
225
        branch_menuitem = gtk.MenuItem("_Branch")
227
228
        branch_menu.add(gtk.MenuItem("Pu_ll Revisions"))
228
229
        branch_menu.add(gtk.MenuItem("Pu_sh Revisions"))
229
230
 
230
 
        try:
231
 
            from bzrlib.plugins import search
232
 
        except ImportError:
233
 
            mutter("Didn't find search plugin")
234
 
        else:
235
 
            branch_menu.add(gtk.SeparatorMenuItem())
236
 
 
237
 
            branch_index_menuitem = gtk.MenuItem("_Index")
238
 
            branch_index_menuitem.connect('activate', self._branch_index_cb)
239
 
            branch_menu.add(branch_index_menuitem)
240
 
 
241
 
            branch_search_menuitem = gtk.MenuItem("_Search")
242
 
            branch_search_menuitem.connect('activate', self._branch_search_cb)
243
 
            branch_menu.add(branch_search_menuitem)
244
 
 
245
231
        help_menu = gtk.Menu()
246
232
        help_menuitem = gtk.MenuItem("_Help")
247
233
        help_menuitem.set_submenu(help_menu)
314
300
 
315
301
    def construct_bottom(self):
316
302
        """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))
320
 
 
321
303
        from bzrlib.plugins.gtk.revisionview import RevisionView
322
304
        self.revisionview = RevisionView(branch=self.branch)
323
 
        self.revisionview.set_size_request(width/3, int(height / 2.5))
 
305
        (width, height) = self.get_size()
 
306
        self.revisionview.set_size_request(width, int(height / 2.5))
324
307
        self.revisionview.show()
325
308
        self.revisionview.set_show_callback(self._show_clicked_cb)
326
309
        self.revisionview.connect('notify::revision', self._go_clicked_cb)
327
310
        self.treeview.connect('tag-added', lambda w, t, r: self.revisionview.update_tags())
328
 
        self.bottom_hpaned.pack1(self.revisionview)
329
 
 
330
 
        from bzrlib.plugins.gtk.diff import DiffWidget
331
 
        self.diff = DiffWidget()
332
 
        self.bottom_hpaned.pack2(self.diff)
333
 
 
334
 
        self.bottom_hpaned.show_all()
335
 
        if self.config.get_user_option('viz-show-diffs') == 'False':
336
 
            self.diff.hide()
337
 
 
338
 
        return self.bottom_hpaned
 
311
        return self.revisionview
339
312
 
340
313
    def _tag_selected_cb(self, menuitem, revid):
341
314
        self.treeview.set_revision_id(revid)
346
319
        parents  = self.treeview.get_parents()
347
320
        children = self.treeview.get_children()
348
321
 
349
 
        self.revision_menu.set_revision_ids([revision.revision_id])
350
 
 
351
322
        if revision and revision != NULL_REVISION:
352
323
            prev_menu = gtk.Menu()
353
324
            if len(parents) > 0:
392
363
 
393
364
            self.revisionview.set_revision(revision)
394
365
            self.revisionview.set_children(children)
395
 
 
396
 
            self.update_diff_panel(revision, parents)
397
 
 
 
366
    
398
367
    def _tree_revision_activated(self, widget, path, col):
399
368
        # TODO: more than one parent
400
369
        """Callback for when a treeview row gets activated."""
409
378
        self.show_diff(revision.revision_id, parent_id)
410
379
        self.treeview.grab_focus()
411
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)    
 
393
 
412
394
    def _back_clicked_cb(self, *args):
413
395
        """Callback for when the back button is clicked."""
414
396
        self.treeview.back()
427
409
        self.show_diff(revid, parentid)
428
410
        self.treeview.grab_focus()
429
411
 
 
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"""
 
415
        
 
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:          
 
422
            (path, focus) = self.treeview.treeview.get_cursor()
 
423
            revid = self.treeview.model[path][treemodel.REVID]
 
424
            self.show_diff(revid, rb.selected_revid)
 
425
            
 
426
        rb.destroy()
 
427
            
430
428
    def _set_revision_cb(self, w, revision_id):
431
429
        self.treeview.set_revision_id(revision_id)
432
430
 
442
440
        self.treeview.set_property('compact', self.compact_view)
443
441
        self.treeview.refresh()
444
442
 
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)
448
 
 
449
 
    def _branch_search_cb(self, w):
450
 
        from bzrlib.plugins.gtk.search import SearchDialog
451
 
        dialog = SearchDialog(self.branch)
452
 
        
453
 
        if dialog.run() == gtk.RESPONSE_OK:
454
 
            self.set_revision(dialog.get_revision())
455
 
 
456
 
        dialog.destroy()
 
443
    def _tag_revision_cb(self, w):
 
444
        try:
 
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:
 
449
                dialog.hide()
 
450
            
 
451
                if response == gtk.RESPONSE_OK:
 
452
                    self.treeview.add_tag(dialog.tagname, dialog._revid)
 
453
                
 
454
                dialog.destroy()
 
455
 
 
456
        finally:
 
457
            self.treeview.set_sensitive(True)
457
458
 
458
459
    def _about_dialog_cb(self, w):
459
460
        from bzrlib.plugins.gtk.about import AboutDialog
466
467
 
467
468
    def _toolbar_visibility_changed(self, col):
468
469
        if col.get_active():
469
 
            self.toolbar.show()
 
470
            self.toolbar.show() 
470
471
        else:
471
472
            self.toolbar.hide()
472
 
        self.config.set_user_option('viz-toolbar-visible', col.get_active())
473
 
 
474
 
    def _diff_visibility_changed(self, col):
475
 
        if col.get_active():
476
 
            self.diff.show()
477
 
        else:
478
 
            self.diff.hide()
479
 
        self.config.set_user_option('viz-show-diffs', str(col.get_active()))
480
 
        self.update_diff_panel()
481
473
 
482
474
    def _show_about_cb(self, w):
483
475
        dialog = AboutDialog()
525
517
        window.show()
526
518
 
527
519
 
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':
531
 
            return
532
 
 
533
 
        if not revision: # default to selected row
534
 
            revision = self.treeview.get_revision()
535
 
        if (not revision) or (revision == NULL_REVISION):
536
 
            return
537
 
 
538
 
        if not parents: # default to selected row's parents
539
 
            parents  = self.treeview.get_parents()
540
 
        if len(parents) == 0:
541
 
            parent_id = None
542
 
        else:
543
 
            parent_id = parents[0]
544
 
 
545
 
        rev_tree    = self.branch.repository.revision_tree(revision.revision_id)
546
 
        parent_tree = self.branch.repository.revision_tree(parent_id)
547
 
 
548
 
        self.diff.set_diff(rev_tree, parent_tree)
549
 
        self.diff.show_all()