/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz
1 by Scott James Remnant
Commit the first version of bzrk.
1
# -*- coding: UTF-8 -*-
2
"""Branch window.
3
4
This module contains the code to manage the branch information window,
5
which contains both the revision graph and details panes.
6
"""
7
8
__copyright__ = "Copyright © 2005 Canonical Ltd."
9
__author__    = "Scott James Remnant <scott@ubuntu.com>"
10
11
12
import gtk
13
import gobject
14
import pango
15
298.2.1 by Daniel Schierbeck
Refactored the GTK window code, creating a single base window class that handles keyboard events.
16
from bzrlib.plugins.gtk.window import Window
365 by Daniel Schierbeck
Fixed locks and made tagging work.
17
from bzrlib.plugins.gtk.tags import AddTagDialog
338 by Daniel Schierbeck
Added Preferences menu item.
18
from bzrlib.plugins.gtk.preferences import PreferencesWindow
352.1.1 by Daniel Schierbeck
Added dropdown menu to Back button.
19
from bzrlib.revision import Revision
361 by Daniel Schierbeck
Added branch settings menu item.
20
from bzrlib.config import BranchConfig
330.2.5 by Daniel Schierbeck
Support persistence of compact view option.
21
from bzrlib.config import GlobalConfig
333 by Daniel Schierbeck
Removed unnecessary imports.
22
from treeview import TreeView
371.1.1 by Daniel Schierbeck
Added About dialog to the viz.
23
from about import AboutDialog
1 by Scott James Remnant
Commit the first version of bzrk.
24
298.2.1 by Daniel Schierbeck
Refactored the GTK window code, creating a single base window class that handles keyboard events.
25
class BranchWindow(Window):
1 by Scott James Remnant
Commit the first version of bzrk.
26
    """Branch window.
27
28
    This object represents and manages a single window containing information
29
    for a particular branch.
30
    """
31
315 by Daniel Schierbeck
Removed BranchWindow.set_branch(), used constructor instead.
32
    def __init__(self, branch, start, maxnum, parent=None):
322 by Jelmer Vernooij
Add docstrings.
33
        """Create a new BranchWindow.
34
35
        :param branch: Branch object for branch to show.
36
        :param start: Revision id of top revision.
37
        :param maxnum: Maximum number of revisions to display, 
38
                       None for no limit.
39
        """
40
298.2.1 by Daniel Schierbeck
Refactored the GTK window code, creating a single base window class that handles keyboard events.
41
        Window.__init__(self, parent=parent)
1 by Scott James Remnant
Commit the first version of bzrk.
42
        self.set_border_width(0)
315 by Daniel Schierbeck
Removed BranchWindow.set_branch(), used constructor instead.
43
330.2.4 by Daniel Schierbeck
Made use of compact view optional.
44
        self.branch      = branch
45
        self.start       = start
46
        self.maxnum      = maxnum
330.2.5 by Daniel Schierbeck
Support persistence of compact view option.
47
        self.config      = GlobalConfig()
48
49
        if self.config.get_user_option('viz-compact-view') == 'yes':
50
            self.compact_view = True
51
        else:
52
            self.compact_view = False
315 by Daniel Schierbeck
Removed BranchWindow.set_branch(), used constructor instead.
53
54
        self.set_title(branch.nick + " - revision history")
1 by Scott James Remnant
Commit the first version of bzrk.
55
56
        # Use three-quarters of the screen by default
57
        screen = self.get_screen()
4 by Scott James Remnant
Use the size of the first monitor rather than the entire screen
58
        monitor = screen.get_monitor_geometry(0)
59
        width = int(monitor.width * 0.75)
60
        height = int(monitor.height * 0.75)
1 by Scott James Remnant
Commit the first version of bzrk.
61
        self.set_default_size(width, height)
62
63
        # FIXME AndyFitz!
64
        icon = self.render_icon(gtk.STOCK_INDEX, gtk.ICON_SIZE_BUTTON)
65
        self.set_icon(icon)
66
3 by Scott James Remnant
Split the display in two with a pane, we'll use the bottom half to show
67
        self.accel_group = gtk.AccelGroup()
68
        self.add_accel_group(self.accel_group)
69
1 by Scott James Remnant
Commit the first version of bzrk.
70
        self.construct()
71
369 by Daniel Schierbeck
Fixed bug with compact view toggling.
72
    def set_revision(self, revid):
73
        self.treeview.set_revision_id(revid)
330.2.4 by Daniel Schierbeck
Made use of compact view optional.
74
1 by Scott James Remnant
Commit the first version of bzrk.
75
    def construct(self):
76
        """Construct the window contents."""
331 by Daniel Schierbeck
Added basic menu bar.
77
        vbox = gtk.VBox(spacing=0)
44 by David Allouche
reorganise branch window
78
        self.add(vbox)
79
358 by Daniel Schierbeck
Generalized the hiding/showing code.
80
        top = self.construct_top()
81
331 by Daniel Schierbeck
Added basic menu bar.
82
        vbox.pack_start(self.construct_menubar(), expand=False, fill=True)
44 by David Allouche
reorganise branch window
83
        vbox.pack_start(self.construct_navigation(), expand=False, fill=True)
280.2.1 by Gary van der Merwe
Add a message to the viz window to indicate that graph is still loading.
84
        vbox.pack_start(self.construct_loading_msg(), expand=False, fill=True)
85
        
369 by Daniel Schierbeck
Fixed bug with compact view toggling.
86
        self.paned = gtk.VPaned()
87
        self.paned.pack1(top, resize=True, shrink=False)
88
        self.paned.pack2(self.construct_bottom(), resize=False, shrink=True)
89
        self.paned.show()
90
        vbox.pack_start(self.paned, expand=True, fill=True)
91
        vbox.set_focus_child(self.paned)
44 by David Allouche
reorganise branch window
92
93
        vbox.show()
331 by Daniel Schierbeck
Added basic menu bar.
94
95
    def construct_menubar(self):
96
        menubar = gtk.MenuBar()
97
98
        file_menu = gtk.Menu()
334 by Daniel Schierbeck
Added icons to menus.
99
        file_menuitem = gtk.MenuItem("_File")
331 by Daniel Schierbeck
Added basic menu bar.
100
        file_menuitem.set_submenu(file_menu)
101
362 by Daniel Schierbeck
Added accel group to File -> Close menu item.
102
        file_menu_close = gtk.ImageMenuItem(gtk.STOCK_CLOSE, self.accel_group)
331 by Daniel Schierbeck
Added basic menu bar.
103
        file_menu_close.connect('activate', lambda x: self.destroy())
104
        
363 by Daniel Schierbeck
Added File -> Quit menu item.
105
        file_menu_quit = gtk.ImageMenuItem(gtk.STOCK_QUIT, self.accel_group)
106
        file_menu_quit.connect('activate', lambda x: gtk.main_quit())
107
        
331 by Daniel Schierbeck
Added basic menu bar.
108
        file_menu.add(file_menu_close)
363 by Daniel Schierbeck
Added File -> Quit menu item.
109
        file_menu.add(file_menu_quit)
331 by Daniel Schierbeck
Added basic menu bar.
110
338 by Daniel Schierbeck
Added Preferences menu item.
111
        edit_menu = gtk.Menu()
112
        edit_menuitem = gtk.MenuItem("_Edit")
113
        edit_menuitem.set_submenu(edit_menu)
114
340 by Daniel Schierbeck
Added edit->find menu item stub.
115
        edit_menu_find = gtk.ImageMenuItem(gtk.STOCK_FIND)
116
361 by Daniel Schierbeck
Added branch settings menu item.
117
        edit_menu_branchopts = gtk.MenuItem("Branch Settings")
118
        edit_menu_branchopts.connect('activate', lambda x: PreferencesWindow(self.branch.get_config()).show())
119
338 by Daniel Schierbeck
Added Preferences menu item.
120
        edit_menu_prefs = gtk.ImageMenuItem(gtk.STOCK_PREFERENCES)
361 by Daniel Schierbeck
Added branch settings menu item.
121
        edit_menu_prefs.connect('activate', lambda x: PreferencesWindow().show())
338 by Daniel Schierbeck
Added Preferences menu item.
122
340 by Daniel Schierbeck
Added edit->find menu item stub.
123
        edit_menu.add(edit_menu_find)
361 by Daniel Schierbeck
Added branch settings menu item.
124
        edit_menu.add(edit_menu_branchopts)
338 by Daniel Schierbeck
Added Preferences menu item.
125
        edit_menu.add(edit_menu_prefs)
126
348 by Daniel Schierbeck
Added toggle item for revision number column.
127
        view_menu = gtk.Menu()
128
        view_menuitem = gtk.MenuItem("_View")
129
        view_menuitem.set_submenu(view_menu)
130
351 by Daniel Schierbeck
Added option to hide the toolbar.
131
        view_menu_toolbar = gtk.CheckMenuItem("Show Toolbar")
132
        view_menu_toolbar.set_active(True)
133
        view_menu_toolbar.connect('toggled', self._toolbar_visibility_changed)
134
370 by Daniel Schierbeck
Moved compact graph toggle to the menubar.
135
        view_menu_compact = gtk.CheckMenuItem("Show Compact Graph")
136
        view_menu_compact.set_active(self.compact_view)
137
        view_menu_compact.connect('activate', self._brokenlines_toggled_cb)
138
351 by Daniel Schierbeck
Added option to hide the toolbar.
139
        view_menu.add(view_menu_toolbar)
370 by Daniel Schierbeck
Moved compact graph toggle to the menubar.
140
        view_menu.add(view_menu_compact)
351 by Daniel Schierbeck
Added option to hide the toolbar.
141
        view_menu.add(gtk.SeparatorMenuItem())
358 by Daniel Schierbeck
Generalized the hiding/showing code.
142
143
        for (label, name) in [("Revision _Number", "revno"), ("_Date", "date")]:
144
            col = gtk.CheckMenuItem("Show " + label + " Column")
145
            col.set_active(self.treeview.get_property(name + "-column-visible"))
146
            col.connect('toggled', self._col_visibility_changed, name)
147
            view_menu.add(col)
348 by Daniel Schierbeck
Added toggle item for revision number column.
148
331 by Daniel Schierbeck
Added basic menu bar.
149
        go_menu = gtk.Menu()
334 by Daniel Schierbeck
Added icons to menus.
150
        go_menuitem = gtk.MenuItem("_Go")
331 by Daniel Schierbeck
Added basic menu bar.
151
        go_menuitem.set_submenu(go_menu)
152
        
354 by Daniel Schierbeck
Replaced forward and backward buttons with up and down.
153
        go_menu_back = gtk.ImageMenuItem(gtk.STOCK_GO_DOWN)
334 by Daniel Schierbeck
Added icons to menus.
154
        go_menu_back.connect("activate", self._back_clicked_cb)
155
354 by Daniel Schierbeck
Replaced forward and backward buttons with up and down.
156
        go_menu_forward = gtk.ImageMenuItem(gtk.STOCK_GO_UP)
334 by Daniel Schierbeck
Added icons to menus.
157
        go_menu_forward.connect("activate", self._fwd_clicked_cb)
331 by Daniel Schierbeck
Added basic menu bar.
158
332 by Daniel Schierbeck
Made tag selection work.
159
        tags_menu = gtk.Menu()
334 by Daniel Schierbeck
Added icons to menus.
160
        go_menu_tags = gtk.MenuItem("_Tags")
161
        go_menu_tags.set_submenu(tags_menu)
332 by Daniel Schierbeck
Made tag selection work.
162
367 by Daniel Schierbeck
Fixed crash when branch didn't support tags.
163
        if self.branch.supports_tags():
164
            for (tag, revid) in self.branch.tags.get_tag_dict().items():
165
                tag_item = gtk.MenuItem(tag)
166
                tag_item.connect('activate', self._tag_selected_cb, revid)
167
                tags_menu.add(tag_item)
332 by Daniel Schierbeck
Made tag selection work.
168
334 by Daniel Schierbeck
Added icons to menus.
169
        go_menu.add(go_menu_back)
170
        go_menu.add(go_menu_forward)
171
        go_menu.add(gtk.SeparatorMenuItem())
172
        go_menu.add(go_menu_tags)
173
335 by Daniel Schierbeck
Added Revision menu.
174
        revision_menu = gtk.Menu()
175
        revision_menuitem = gtk.MenuItem("_Revision")
176
        revision_menuitem.set_submenu(revision_menu)
177
364 by Daniel Schierbeck
Simplified TreeView.show_diff() and made the Revision -> View Changes menu item work.
178
        revision_menu_diff = gtk.MenuItem("View Changes")
179
        revision_menu_diff.connect('activate', 
180
                lambda w: self.treeview.show_diff())
181
365 by Daniel Schierbeck
Fixed locks and made tagging work.
182
        revision_menu_tag = gtk.MenuItem("Tag Revision")
183
        revision_menu_tag.connect('activate', self._tag_revision_cb)
184
185
        revision_menu.add(revision_menu_tag)
364 by Daniel Schierbeck
Simplified TreeView.show_diff() and made the Revision -> View Changes menu item work.
186
        revision_menu.add(revision_menu_diff)
335 by Daniel Schierbeck
Added Revision menu.
187
334 by Daniel Schierbeck
Added icons to menus.
188
        branch_menu = gtk.Menu()
189
        branch_menuitem = gtk.MenuItem("_Branch")
190
        branch_menuitem.set_submenu(branch_menu)
191
336 by Daniel Schierbeck
Changed wording to comply with HIG guidelines.
192
        branch_menu.add(gtk.MenuItem("Pu_ll Revisions"))
193
        branch_menu.add(gtk.MenuItem("Pu_sh Revisions"))
371.1.1 by Daniel Schierbeck
Added About dialog to the viz.
194
195
        help_menu = gtk.Menu()
196
        help_menuitem = gtk.MenuItem("_Help")
197
        help_menuitem.set_submenu(help_menu)
198
199
        help_menu_about = gtk.ImageMenuItem(gtk.STOCK_ABOUT)
200
        help_menu_about.connect('activate', self._show_about_cb)
201
202
        help_menu.add(help_menu_about)
334 by Daniel Schierbeck
Added icons to menus.
203
       
331 by Daniel Schierbeck
Added basic menu bar.
204
        menubar.add(file_menuitem)
338 by Daniel Schierbeck
Added Preferences menu item.
205
        menubar.add(edit_menuitem)
348 by Daniel Schierbeck
Added toggle item for revision number column.
206
        menubar.add(view_menuitem)
331 by Daniel Schierbeck
Added basic menu bar.
207
        menubar.add(go_menuitem)
335 by Daniel Schierbeck
Added Revision menu.
208
        menubar.add(revision_menuitem)
331 by Daniel Schierbeck
Added basic menu bar.
209
        menubar.add(branch_menuitem)
371.1.1 by Daniel Schierbeck
Added About dialog to the viz.
210
        menubar.add(help_menuitem)
331 by Daniel Schierbeck
Added basic menu bar.
211
        menubar.show_all()
212
213
        return menubar
280.2.1 by Gary van der Merwe
Add a message to the viz window to indicate that graph is still loading.
214
    
215
    def construct_loading_msg(self):
216
        image_loading = gtk.image_new_from_stock(gtk.STOCK_REFRESH,
217
                                                 gtk.ICON_SIZE_BUTTON)
218
        image_loading.show()
219
        
220
        label_loading = gtk.Label(_("Please wait, loading ancestral graph..."))
368 by Daniel Schierbeck
Merged with mainline.
221
        label_loading.set_alignment(0.0, 0.5)
280.2.1 by Gary van der Merwe
Add a message to the viz window to indicate that graph is still loading.
222
        label_loading.show()
223
        
224
        self.loading_msg_box = gtk.HBox()
225
        self.loading_msg_box.set_spacing(5)
226
        self.loading_msg_box.set_border_width(5)        
227
        self.loading_msg_box.pack_start(image_loading, False, False)
228
        self.loading_msg_box.pack_start(label_loading, True, True)
229
        self.loading_msg_box.show()
230
        
231
        return self.loading_msg_box
3 by Scott James Remnant
Split the display in two with a pane, we'll use the bottom half to show
232
233
    def construct_top(self):
234
        """Construct the top-half of the window."""
329 by Jelmer Vernooij
Make broken_line_length setting from higher up.
235
        # FIXME: Make broken_line_length configurable
330.2.5 by Daniel Schierbeck
Support persistence of compact view option.
236
        if self.compact_view:
237
            brokenlines = 32
238
        else:
239
            brokenlines = None
240
241
        self.treeview = TreeView(self.branch, self.start, self.maxnum, brokenlines)
315 by Daniel Schierbeck
Removed BranchWindow.set_branch(), used constructor instead.
242
310 by Daniel Schierbeck
Moved to using custom signal for handling revision selections.
243
        self.treeview.connect("revision-selected",
303 by Daniel Schierbeck
Made basic signaling work.
244
                self._treeselection_changed_cb)
245
307 by Daniel Schierbeck
Made load notification work again.
246
        self.treeview.connect('revisions-loaded', 
247
                lambda x: self.loading_msg_box.hide())
248
1 by Scott James Remnant
Commit the first version of bzrk.
249
        self.treeview.show()
250
303 by Daniel Schierbeck
Made basic signaling work.
251
        return self.treeview
44 by David Allouche
reorganise branch window
252
253
    def construct_navigation(self):
254
        """Construct the navigation buttons."""
325 by Daniel Schierbeck
Switched to using a real toolbar for the viz navigation.
255
        self.toolbar = gtk.Toolbar()
256
        self.toolbar.set_style(gtk.TOOLBAR_BOTH_HORIZ)
3 by Scott James Remnant
Split the display in two with a pane, we'll use the bottom half to show
257
354 by Daniel Schierbeck
Replaced forward and backward buttons with up and down.
258
        self.back_button = gtk.MenuToolButton(stock_id=gtk.STOCK_GO_DOWN)
3 by Scott James Remnant
Split the display in two with a pane, we'll use the bottom half to show
259
        self.back_button.add_accelerator("clicked", self.accel_group, ord('['),
260
                                         0, 0)
261
        self.back_button.connect("clicked", self._back_clicked_cb)
325 by Daniel Schierbeck
Switched to using a real toolbar for the viz navigation.
262
        self.toolbar.insert(self.back_button, -1)
3 by Scott James Remnant
Split the display in two with a pane, we'll use the bottom half to show
263
354 by Daniel Schierbeck
Replaced forward and backward buttons with up and down.
264
        self.fwd_button = gtk.MenuToolButton(stock_id=gtk.STOCK_GO_UP)
3 by Scott James Remnant
Split the display in two with a pane, we'll use the bottom half to show
265
        self.fwd_button.add_accelerator("clicked", self.accel_group, ord(']'),
266
                                        0, 0)
267
        self.fwd_button.connect("clicked", self._fwd_clicked_cb)
325 by Daniel Schierbeck
Switched to using a real toolbar for the viz navigation.
268
        self.toolbar.insert(self.fwd_button, -1)
330.2.4 by Daniel Schierbeck
Made use of compact view optional.
269
270
        self.toolbar.show_all()
325 by Daniel Schierbeck
Switched to using a real toolbar for the viz navigation.
271
272
        return self.toolbar
3 by Scott James Remnant
Split the display in two with a pane, we'll use the bottom half to show
273
274
    def construct_bottom(self):
275
        """Construct the bottom half of the window."""
330.3.1 by Daniel Schierbeck
Renamed logview 'revisionview'.
276
        from bzrlib.plugins.gtk.revisionview import RevisionView
277
        self.revisionview = RevisionView(None, tags=[], show_children=True, branch=self.branch)
44 by David Allouche
reorganise branch window
278
        (width, height) = self.get_size()
330.3.1 by Daniel Schierbeck
Renamed logview 'revisionview'.
279
        self.revisionview.set_size_request(width, int(height / 2.5))
280
        self.revisionview.show()
281
        self.revisionview.set_show_callback(self._show_clicked_cb)
282
        self.revisionview.set_go_callback(self._go_clicked_cb)
283
        return self.revisionview
332 by Daniel Schierbeck
Made tag selection work.
284
285
    def _tag_selected_cb(self, menuitem, revid):
356 by Daniel Schierbeck
Made revision a property on TreeView.
286
        self.treeview.set_revision_id(revid)
341 by Daniel Schierbeck
Merged with trunk.
287
280.1.2 by Daniel Schierbeck
Switched to handle the 'changed' signal from the treeview's treeselection instead of the 'cursor-changed' signal from the treeview itself, allowing more flexibility (particularly the ability to handle programmatic selections)
288
    def _treeselection_changed_cb(self, selection, *args):
303 by Daniel Schierbeck
Made basic signaling work.
289
        """callback for when the treeview changes."""
290
        revision = self.treeview.get_revision()
291
        parents  = self.treeview.get_parents()
292
        children = self.treeview.get_children()
293
294
        if revision is not None:
352.1.1 by Daniel Schierbeck
Added dropdown menu to Back button.
295
            back_menu = gtk.Menu()
296
            if len(parents) > 0:
297
                self.back_button.set_sensitive(True)
298
                for parent_id in parents:
299
                    parent = self.branch.repository.get_revision(parent_id)
355 by Daniel Schierbeck
Appended branch nick to parent and child popup menus.
300
                    try:
301
                        str = ' (' + parent.properties['branch-nick'] + ')'
302
                    except KeyError:
303
                        str = ""
304
305
                    item = gtk.MenuItem(parent.message.split("\n")[0] + str)
352.1.1 by Daniel Schierbeck
Added dropdown menu to Back button.
306
                    item.connect('activate', self._set_revision_cb, parent_id)
307
                    back_menu.add(item)
308
                back_menu.show_all()
309
            else:
310
                self.back_button.set_sensitive(False)
311
                back_menu.hide()
312
313
            self.back_button.set_menu(back_menu)
314
352.1.2 by Daniel Schierbeck
Added dropdown menu to Forward button.
315
            fwd_menu = gtk.Menu()
316
            if len(children) > 0:
317
                self.fwd_button.set_sensitive(True)
318
                for child_id in children:
319
                    child = self.branch.repository.get_revision(child_id)
355 by Daniel Schierbeck
Appended branch nick to parent and child popup menus.
320
                    try:
321
                        str = ' (' + child.properties['branch-nick'] + ')'
322
                    except KeyError:
323
                        str = ""
324
325
                    item = gtk.MenuItem(child.message.split("\n")[0] + str)
352.1.2 by Daniel Schierbeck
Added dropdown menu to Forward button.
326
                    item.connect('activate', self._set_revision_cb, child_id)
327
                    fwd_menu.add(item)
328
                fwd_menu.show_all()
329
            else:
330
                self.fwd_button.set_sensitive(False)
331
                fwd_menu.hide()
332
333
            self.fwd_button.set_menu(fwd_menu)
334
280.1.2 by Daniel Schierbeck
Switched to handle the 'changed' signal from the treeview's treeselection instead of the 'cursor-changed' signal from the treeview itself, allowing more flexibility (particularly the ability to handle programmatic selections)
335
            tags = []
336
            if self.branch.supports_tags():
337
                tagdict = self.branch.tags.get_reverse_tag_dict()
338
                if tagdict.has_key(revision.revision_id):
339
                    tags = tagdict[revision.revision_id]
330.3.1 by Daniel Schierbeck
Renamed logview 'revisionview'.
340
            self.revisionview.set_revision(revision, tags, children)
7 by Scott James Remnant
Put some information about the highlighted revision in the bottom pane,
341
3 by Scott James Remnant
Split the display in two with a pane, we'll use the bottom half to show
342
    def _back_clicked_cb(self, *args):
343
        """Callback for when the back button is clicked."""
304 by Daniel Schierbeck
Made forward/back buttons work again.
344
        self.treeview.back()
345
        
5 by Scott James Remnant
Reverse the meaning of the Back and Forward buttons so Back actually
346
    def _fwd_clicked_cb(self, *args):
347
        """Callback for when the forward button is clicked."""
304 by Daniel Schierbeck
Made forward/back buttons work again.
348
        self.treeview.forward()
7 by Scott James Remnant
Put some information about the highlighted revision in the bottom pane,
349
147 by Jelmer Vernooij
Remove a bunch of duplicate functionality.
350
    def _go_clicked_cb(self, revid):
7 by Scott James Remnant
Put some information about the highlighted revision in the bottom pane,
351
        """Callback for when the go button for a parent is clicked."""
356 by Daniel Schierbeck
Made revision a property on TreeView.
352
        self.treeview.set_revision_id(revid)
152 by Jelmer Vernooij
Cleanup some more code.
353
147 by Jelmer Vernooij
Remove a bunch of duplicate functionality.
354
    def _show_clicked_cb(self, revid, parentid):
7 by Scott James Remnant
Put some information about the highlighted revision in the bottom pane,
355
        """Callback for when the show button for a parent is clicked."""
364 by Daniel Schierbeck
Simplified TreeView.show_diff() and made the Revision -> View Changes menu item work.
356
        self.treeview.show_diff(revid, parentid)
13 by Scott James Remnant
Keep the focus on the treeview
357
        self.treeview.grab_focus()
46 by Wouter van Heyst
show diff on row activation, LP# 44591
358
352.1.1 by Daniel Schierbeck
Added dropdown menu to Back button.
359
    def _set_revision_cb(self, w, revision_id):
356 by Daniel Schierbeck
Made revision a property on TreeView.
360
        self.treeview.set_revision_id(revision_id)
352.1.1 by Daniel Schierbeck
Added dropdown menu to Back button.
361
330.2.4 by Daniel Schierbeck
Made use of compact view optional.
362
    def _brokenlines_toggled_cb(self, button):
330.2.5 by Daniel Schierbeck
Support persistence of compact view option.
363
        self.compact_view = button.get_active()
364
365
        if self.compact_view:
366
            option = 'yes'
330.2.4 by Daniel Schierbeck
Made use of compact view optional.
367
        else:
330.2.5 by Daniel Schierbeck
Support persistence of compact view option.
368
            option = 'no'
369
370
        self.config.set_user_option('viz-compact-view', option)
330.2.4 by Daniel Schierbeck
Made use of compact view optional.
371
372
        revision = self.treeview.get_revision()
373
374
        self.treeview.destroy()
375
        self.paned.pack1(self.construct_top(), resize=True, shrink=False)
376
377
        gobject.idle_add(self.set_revision, revision.revision_id)
368 by Daniel Schierbeck
Merged with mainline.
378
365 by Daniel Schierbeck
Fixed locks and made tagging work.
379
    def _tag_revision_cb(self, w):
380
        dialog = AddTagDialog(self.branch.repository, self.treeview.get_revision().revision_id, self.branch)
381
        response = dialog.run()
382
        if response != gtk.RESPONSE_NONE:
383
            dialog.hide()
384
        
385
            if response == gtk.RESPONSE_OK:
386
                try:
387
                    self.branch.lock_write()
388
                    self.branch.tags.set_tag(dialog.tagname, dialog._revid)
389
                finally:
390
                    self.branch.unlock()
391
            
392
            dialog.destroy()
393
348 by Daniel Schierbeck
Added toggle item for revision number column.
394
    def _col_visibility_changed(self, col, property):
395
        self.treeview.set_property(property + '-column-visible', col.get_active())
351 by Daniel Schierbeck
Added option to hide the toolbar.
396
397
    def _toolbar_visibility_changed(self, col):
398
        if col.get_active():
399
            self.toolbar.show() 
400
        else:
401
            self.toolbar.hide()
371.1.1 by Daniel Schierbeck
Added About dialog to the viz.
402
403
    def _show_about_cb(self, w):
404
        dialog = AboutDialog()
405
        dialog.connect('response', lambda d,r: d.destroy())
406
        dialog.run()