/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
1
# -*- coding: UTF-8 -*-
2
"""Revision history view.
3
4
"""
5
6
__copyright__ = "Copyright © 2005 Canonical Ltd."
7
__author__    = "Daniel Schierbeck <daniel.schierbeck@gmail.com>"
8
314 by Daniel Schierbeck
Moved branch locking into treeview.
9
import sys
10
import string
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
11
import gtk
12
import gobject
13
import pango
14
import re
303 by Daniel Schierbeck
Made basic signaling work.
15
import treemodel
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
16
17
from linegraph import linegraph, same_branch
18
from graphcell import CellRendererGraph
19
from treemodel import TreeModel
330.4.3 by Daniel Schierbeck
Switched to using NULL_REVISION instead of None.
20
from bzrlib.revision import NULL_REVISION
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
21
423.1.13 by Gary van der Merwe
Move viz loading msg from branchwin to treeview.
22
class TreeView(gtk.VBox):
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
23
346 by Daniel Schierbeck
Added revno-column-visible property to treeview.
24
    __gproperties__ = {
352 by Daniel Schierbeck
Added branch property to treeview.
25
        'branch': (gobject.TYPE_PYOBJECT,
26
                   'Branch',
27
                   'The Bazaar branch being visualized',
28
                   gobject.PARAM_CONSTRUCT_ONLY | gobject.PARAM_WRITABLE),
29
356 by Daniel Schierbeck
Made revision a property on TreeView.
30
        'revision': (gobject.TYPE_PYOBJECT,
31
                     'Revision',
32
                     'The currently selected revision',
33
                     gobject.PARAM_READWRITE),
34
395.1.2 by Daniel Schierbeck
Added revision-number property to the TreeView.
35
        'revision-number': (gobject.TYPE_STRING,
36
                            'Revision number',
37
                            'The number of the selected revision',
38
                            '',
39
                            gobject.PARAM_READABLE),
40
395.1.1 by Daniel Schierbeck
Cleaned up code in the TreeView, removing instance variables.
41
        'children': (gobject.TYPE_PYOBJECT,
42
                     'Child revisions',
43
                     'Children of the currently selected revision',
44
                     gobject.PARAM_READABLE),
45
46
        'parents': (gobject.TYPE_PYOBJECT,
47
                    'Parent revisions',
48
                    'Parents to the currently selected revision',
49
                    gobject.PARAM_READABLE),
50
346 by Daniel Schierbeck
Added revno-column-visible property to treeview.
51
        'revno-column-visible': (gobject.TYPE_BOOLEAN,
52
                                 'Revision number',
53
                                 'Show revision number column',
54
                                 True,
357 by Daniel Schierbeck
Added support for showing the date column in the viz.
55
                                 gobject.PARAM_READWRITE),
56
57
        'date-column-visible': (gobject.TYPE_BOOLEAN,
360 by Daniel Schierbeck
Fixed wrong text in date property.
58
                                 'Date',
59
                                 'Show date column',
357 by Daniel Schierbeck
Added support for showing the date column in the viz.
60
                                 False,
401.1.3 by Daniel Schierbeck
Made the compact view toggling cleaner.
61
                                 gobject.PARAM_READWRITE),
62
63
        'compact': (gobject.TYPE_BOOLEAN,
64
                    'Compact view',
65
                    'Break ancestry lines to save space',
66
                    True,
67
                    gobject.PARAM_CONSTRUCT | gobject.PARAM_READWRITE)
357 by Daniel Schierbeck
Added support for showing the date column in the viz.
68
346 by Daniel Schierbeck
Added revno-column-visible property to treeview.
69
    }
70
307 by Daniel Schierbeck
Made load notification work again.
71
    __gsignals__ = {
345 by Daniel Schierbeck
Made treeview columns instance variables.
72
        'revisions-loaded': (gobject.SIGNAL_RUN_FIRST, 
73
                             gobject.TYPE_NONE,
74
                             ()),
75
        'revision-selected': (gobject.SIGNAL_RUN_FIRST,
76
                              gobject.TYPE_NONE,
423.7.4 by Daniel Schierbeck
Made revisionview and branchview update when a tag is added.
77
                              ()),
423.1.17 by Gary van der Merwe
Reuse the viz treeview in the revision browser.
78
        'revision-activated': (gobject.SIGNAL_RUN_FIRST,
79
                              gobject.TYPE_NONE,
80
                              (gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT)),
423.7.4 by Daniel Schierbeck
Made revisionview and branchview update when a tag is added.
81
        'tag-added': (gobject.SIGNAL_RUN_FIRST,
82
                              gobject.TYPE_NONE,
83
                              (gobject.TYPE_STRING, gobject.TYPE_STRING))
307 by Daniel Schierbeck
Made load notification work again.
84
    }
85
401.1.3 by Daniel Schierbeck
Made the compact view toggling cleaner.
86
    def __init__(self, branch, start, maxnum, compact=True):
322 by Jelmer Vernooij
Add docstrings.
87
        """Create a new TreeView.
88
89
        :param branch: Branch object for branch to show.
90
        :param start: Revision id of top revision.
91
        :param maxnum: Maximum number of revisions to display, 
92
                       None for no limit.
329 by Jelmer Vernooij
Make broken_line_length setting from higher up.
93
        :param broken_line_length: After how much lines to break 
94
                                   branches.
322 by Jelmer Vernooij
Add docstrings.
95
        """
423.1.13 by Gary van der Merwe
Move viz loading msg from branchwin to treeview.
96
        gtk.VBox.__init__(self, spacing=0)
97
98
        self.pack_start(self.construct_loading_msg(), expand=False, fill=True)
99
        self.connect('revisions-loaded', 
100
                lambda x: self.loading_msg_box.hide())
101
102
        self.scrolled_window = gtk.ScrolledWindow()
103
        self.scrolled_window.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
104
        self.scrolled_window.set_shadow_type(gtk.SHADOW_IN)
105
        self.scrolled_window.show()
106
        self.pack_start(self.scrolled_window, expand=True, fill=True)
107
108
        self.scrolled_window.add(self.construct_treeview())
109
        
303 by Daniel Schierbeck
Made basic signaling work.
110
423.7.3 by Daniel Schierbeck
Moved tag writing logic inside the branchview treemodel.
111
        self.iter = None
316 by Daniel Schierbeck
Removed viz.TreeView.set_branch()
112
        self.branch = branch
423.7.3 by Daniel Schierbeck
Moved tag writing logic inside the branchview treemodel.
113
        self.revision = None
316 by Daniel Schierbeck
Removed viz.TreeView.set_branch()
114
401.1.1 by Daniel Schierbeck
Added update() method to TreeView.
115
        self.start = start
116
        self.maxnum = maxnum
401.1.3 by Daniel Schierbeck
Made the compact view toggling cleaner.
117
        self.compact = compact
401.1.1 by Daniel Schierbeck
Added update() method to TreeView.
118
119
        gobject.idle_add(self.populate)
316 by Daniel Schierbeck
Removed viz.TreeView.set_branch()
120
392 by Daniel Schierbeck
Fixed performance issue by only releasing the branch lock when the treeview is destroyed. This will surely fuck up the tagging code.
121
        self.connect("destroy", lambda x: self.branch.unlock())
122
347 by Daniel Schierbeck
Added property getter and setter method to the treeview.
123
    def do_get_property(self, property):
124
        if property.name == 'revno-column-visible':
352 by Daniel Schierbeck
Added branch property to treeview.
125
            return self.revno_column.get_visible()
357 by Daniel Schierbeck
Added support for showing the date column in the viz.
126
        elif property.name == 'date-column-visible':
127
            return self.date_column.get_visible()
401.1.3 by Daniel Schierbeck
Made the compact view toggling cleaner.
128
        elif property.name == 'compact':
129
            return self.compact
352 by Daniel Schierbeck
Added branch property to treeview.
130
        elif property.name == 'branch':
131
            return self.branch
356 by Daniel Schierbeck
Made revision a property on TreeView.
132
        elif property.name == 'revision':
395.1.1 by Daniel Schierbeck
Cleaned up code in the TreeView, removing instance variables.
133
            return self.model.get_value(self.iter, treemodel.REVISION)
395.1.2 by Daniel Schierbeck
Added revision-number property to the TreeView.
134
        elif property.name == 'revision-number':
135
            return self.model.get_value(self.iter, treemodel.REVNO)
395.1.1 by Daniel Schierbeck
Cleaned up code in the TreeView, removing instance variables.
136
        elif property.name == 'children':
137
            return self.model.get_value(self.iter, treemodel.CHILDREN)
138
        elif property.name == 'parents':
139
            return self.model.get_value(self.iter, treemodel.PARENTS)
347 by Daniel Schierbeck
Added property getter and setter method to the treeview.
140
        else:
141
            raise AttributeError, 'unknown property %s' % property.name
142
143
    def do_set_property(self, property, value):
144
        if property.name == 'revno-column-visible':
145
            self.revno_column.set_visible(value)
357 by Daniel Schierbeck
Added support for showing the date column in the viz.
146
        elif property.name == 'date-column-visible':
147
            self.date_column.set_visible(value)
401.1.3 by Daniel Schierbeck
Made the compact view toggling cleaner.
148
        elif property.name == 'compact':
149
            self.compact = value
352 by Daniel Schierbeck
Added branch property to treeview.
150
        elif property.name == 'branch':
151
            self.branch = value
356 by Daniel Schierbeck
Made revision a property on TreeView.
152
        elif property.name == 'revision':
153
            self.set_revision_id(value.revision_id)
347 by Daniel Schierbeck
Added property getter and setter method to the treeview.
154
        else:
155
            raise AttributeError, 'unknown property %s' % property.name
156
303 by Daniel Schierbeck
Made basic signaling work.
157
    def get_revision(self):
322 by Jelmer Vernooij
Add docstrings.
158
        """Return revision id of currently selected revision, or None."""
395.1.1 by Daniel Schierbeck
Cleaned up code in the TreeView, removing instance variables.
159
        return self.get_property('revision')
160
161
    def set_revision(self, revision):
162
        self.set_property('revision', revision)
303 by Daniel Schierbeck
Made basic signaling work.
163
356 by Daniel Schierbeck
Made revision a property on TreeView.
164
    def set_revision_id(self, revid):
322 by Jelmer Vernooij
Add docstrings.
165
        """Change the currently selected revision.
166
167
        :param revid: Revision id of revision to display.
168
        """
305 by Daniel Schierbeck
Moved revision selection to the new view.
169
        self.treeview.set_cursor(self.index[revid])
170
        self.treeview.grab_focus()
171
303 by Daniel Schierbeck
Made basic signaling work.
172
    def get_children(self):
322 by Jelmer Vernooij
Add docstrings.
173
        """Return the children of the currently selected revision.
174
175
        :return: list of revision ids.
176
        """
395.1.1 by Daniel Schierbeck
Cleaned up code in the TreeView, removing instance variables.
177
        return self.get_property('children')
303 by Daniel Schierbeck
Made basic signaling work.
178
179
    def get_parents(self):
322 by Jelmer Vernooij
Add docstrings.
180
        """Return the parents of the currently selected revision.
181
182
        :return: list of revision ids.
183
        """
395.1.1 by Daniel Schierbeck
Cleaned up code in the TreeView, removing instance variables.
184
        return self.get_property('parents')
423.7.3 by Daniel Schierbeck
Moved tag writing logic inside the branchview treemodel.
185
186
    def add_tag(self, tag, revid=None):
187
        if revid is None: revid = self.revision.revision_id
188
189
        try:
190
            self.branch.unlock()
191
192
            try:
193
                self.branch.lock_write()
194
                self.model.add_tag(tag, revid)
195
            finally:
196
                self.branch.unlock()
197
198
        finally:
199
            self.branch.lock_read()
423.7.4 by Daniel Schierbeck
Made revisionview and branchview update when a tag is added.
200
201
        self.emit('tag-added', tag, revid)
316 by Daniel Schierbeck
Removed viz.TreeView.set_branch()
202
        
401.1.2 by Daniel Schierbeck
Allowed the treeview to be refreshed.
203
    def refresh(self):
423.1.13 by Gary van der Merwe
Move viz loading msg from branchwin to treeview.
204
        self.loading_msg_box.show()
401.1.2 by Daniel Schierbeck
Allowed the treeview to be refreshed.
205
        gobject.idle_add(self.populate, self.get_revision())
401.1.1 by Daniel Schierbeck
Added update() method to TreeView.
206
404 by Daniel Schierbeck
Made the refresh use proper locking.
207
    def update(self):
208
        try:
209
            self.branch.unlock()
210
            try:
211
                self.branch.lock_write()
212
                self.branch.update()
213
            finally:
214
                self.branch.unlock()
215
        finally:
216
            self.branch.lock_read()
217
304 by Daniel Schierbeck
Made forward/back buttons work again.
218
    def back(self):
322 by Jelmer Vernooij
Add docstrings.
219
        """Signal handler for the Back button."""
395.1.1 by Daniel Schierbeck
Cleaned up code in the TreeView, removing instance variables.
220
        parents = self.get_parents()
304 by Daniel Schierbeck
Made forward/back buttons work again.
221
        if not len(parents):
222
            return
223
224
        for parent_id in parents:
225
            parent_index = self.index[parent_id]
226
            parent = self.model[parent_index][treemodel.REVISION]
395.1.1 by Daniel Schierbeck
Cleaned up code in the TreeView, removing instance variables.
227
            if same_branch(self.get_revision(), parent):
395.1.2 by Daniel Schierbeck
Added revision-number property to the TreeView.
228
                self.set_revision(parent)
304 by Daniel Schierbeck
Made forward/back buttons work again.
229
                break
230
        else:
395.1.2 by Daniel Schierbeck
Added revision-number property to the TreeView.
231
            self.set_revision_id(parents[0])
304 by Daniel Schierbeck
Made forward/back buttons work again.
232
233
    def forward(self):
322 by Jelmer Vernooij
Add docstrings.
234
        """Signal handler for the Forward button."""
395.1.1 by Daniel Schierbeck
Cleaned up code in the TreeView, removing instance variables.
235
        children = self.get_children()
304 by Daniel Schierbeck
Made forward/back buttons work again.
236
        if not len(children):
237
            return
238
239
        for child_id in children:
240
            child_index = self.index[child_id]
241
            child = self.model[child_index][treemodel.REVISION]
395.1.1 by Daniel Schierbeck
Cleaned up code in the TreeView, removing instance variables.
242
            if same_branch(child, self.get_revision()):
395.1.2 by Daniel Schierbeck
Added revision-number property to the TreeView.
243
                self.set_revision(child)
304 by Daniel Schierbeck
Made forward/back buttons work again.
244
                break
245
        else:
395.1.2 by Daniel Schierbeck
Added revision-number property to the TreeView.
246
            self.set_revision_id(children[0])
304 by Daniel Schierbeck
Made forward/back buttons work again.
247
401.1.2 by Daniel Schierbeck
Allowed the treeview to be refreshed.
248
    def populate(self, revision=None):
322 by Jelmer Vernooij
Add docstrings.
249
        """Fill the treeview with contents.
250
251
        :param start: Revision id of revision to start with.
252
        :param maxnum: Maximum number of revisions to display, or None 
253
                       for no limit.
329 by Jelmer Vernooij
Make broken_line_length setting from higher up.
254
        :param broken_line_length: After how much lines branches \
255
                       should be broken.
322 by Jelmer Vernooij
Add docstrings.
256
        """
401.1.3 by Daniel Schierbeck
Made the compact view toggling cleaner.
257
258
        if self.compact:
259
            broken_line_length = 32
260
        else:
261
            broken_line_length = None
262
392 by Daniel Schierbeck
Fixed performance issue by only releasing the branch lock when the treeview is destroyed. This will surely fuck up the tagging code.
263
        self.branch.lock_read()
264
        (linegraphdata, index, columns_len) = linegraph(self.branch.repository,
401.1.1 by Daniel Schierbeck
Added update() method to TreeView.
265
                                                        self.start,
266
                                                        self.maxnum, 
401.1.3 by Daniel Schierbeck
Made the compact view toggling cleaner.
267
                                                        broken_line_length)
392 by Daniel Schierbeck
Fixed performance issue by only releasing the branch lock when the treeview is destroyed. This will surely fuck up the tagging code.
268
423.5.1 by Ali Sabil
Added tags visualization in the graph
269
        self.model = TreeModel(self.branch, linegraphdata)
392 by Daniel Schierbeck
Fixed performance issue by only releasing the branch lock when the treeview is destroyed. This will surely fuck up the tagging code.
270
        self.graph_cell.columns_len = columns_len
271
        width = self.graph_cell.get_size(self.treeview)[2]
403 by Daniel Schierbeck
Set a maximum width on the graph column.
272
        if width > 500:
273
            width = 500
392 by Daniel Schierbeck
Fixed performance issue by only releasing the branch lock when the treeview is destroyed. This will surely fuck up the tagging code.
274
        self.graph_column.set_fixed_width(width)
275
        self.graph_column.set_max_width(width)
276
        self.index = index
277
        self.treeview.set_model(self.model)
401.1.2 by Daniel Schierbeck
Allowed the treeview to be refreshed.
278
279
        if revision is None:
280
            self.treeview.set_cursor(0)
281
        else:
282
            self.set_revision(revision)
283
392 by Daniel Schierbeck
Fixed performance issue by only releasing the branch lock when the treeview is destroyed. This will surely fuck up the tagging code.
284
        self.emit('revisions-loaded')
304 by Daniel Schierbeck
Made forward/back buttons work again.
285
286
        return False
287
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
288
    def construct_treeview(self):
289
        self.treeview = gtk.TreeView()
290
291
        self.treeview.set_rules_hint(True)
330.1.2 by Daniel Schierbeck
Replaced literal column index with equivalent symbol.
292
        self.treeview.set_search_column(treemodel.REVNO)
330.5.2 by Szilveszter Farkas (Phanatic)
Fixed set_tooltip_column() related issue.
293
        
330.5.5 by Szilveszter Farkas (Phanatic)
Use better fix by John.
294
        # Fix old PyGTK bug - by JAM
295
        set_tooltip = getattr(self.treeview, 'set_tooltip_column', None)
296
        if set_tooltip is not None:
423.4.3 by Daniel Schierbeck
Made the MESSAGE column be the tooltip column.
297
            set_tooltip(treemodel.MESSAGE)
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
298
391 by Daniel Schierbeck
Moved away from the changed signal on the treeview.
299
        self.treeview.connect("cursor-changed",
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
300
                self._on_selection_changed)
301
302
        self.treeview.connect("row-activated", 
303
                self._on_revision_activated)
304
305
        self.treeview.connect("button-release-event", 
306
                self._on_revision_selected)
307
308
        self.treeview.set_property('fixed-height-mode', True)
309
310
        self.treeview.show()
311
312
        cell = gtk.CellRendererText()
313
        cell.set_property("width-chars", 15)
314
        cell.set_property("ellipsize", pango.ELLIPSIZE_END)
345 by Daniel Schierbeck
Made treeview columns instance variables.
315
        self.revno_column = gtk.TreeViewColumn("Revision No")
316
        self.revno_column.set_resizable(True)
317
        self.revno_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
318
        self.revno_column.set_fixed_width(cell.get_size(self.treeview)[2])
319
        self.revno_column.pack_start(cell, expand=True)
320
        self.revno_column.add_attribute(cell, "text", treemodel.REVNO)
321
        self.treeview.append_column(self.revno_column)
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
322
323
        self.graph_cell = CellRendererGraph()
324
        self.graph_column = gtk.TreeViewColumn()
325
        self.graph_column.set_resizable(True)
326
        self.graph_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
327
        self.graph_column.pack_start(self.graph_cell, expand=False)
328
        self.graph_column.add_attribute(self.graph_cell, "node", treemodel.NODE)
423.5.1 by Ali Sabil
Added tags visualization in the graph
329
        self.graph_column.add_attribute(self.graph_cell, "tags", treemodel.TAGS)
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
330
        self.graph_column.add_attribute(self.graph_cell, "in-lines", treemodel.LAST_LINES)
331
        self.graph_column.add_attribute(self.graph_cell, "out-lines", treemodel.LINES)
332
        self.treeview.append_column(self.graph_column)
333
334
        cell = gtk.CellRendererText()
335
        cell.set_property("width-chars", 65)
336
        cell.set_property("ellipsize", pango.ELLIPSIZE_END)
423.4.1 by Daniel Schierbeck
Renamed the MESSAGE column to SUMMARY.
337
        self.summary_column = gtk.TreeViewColumn("Summary")
338
        self.summary_column.set_resizable(True)
339
        self.summary_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
340
        self.summary_column.set_fixed_width(cell.get_size(self.treeview)[2])
341
        self.summary_column.pack_start(cell, expand=True)
342
        self.summary_column.add_attribute(cell, "markup", treemodel.SUMMARY)
343
        self.treeview.append_column(self.summary_column)
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
344
345
        cell = gtk.CellRendererText()
346
        cell.set_property("width-chars", 15)
347
        cell.set_property("ellipsize", pango.ELLIPSIZE_END)
345 by Daniel Schierbeck
Made treeview columns instance variables.
348
        self.committer_column = gtk.TreeViewColumn("Committer")
349
        self.committer_column.set_resizable(True)
350
        self.committer_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
351
        self.committer_column.set_fixed_width(cell.get_size(self.treeview)[2])
352
        self.committer_column.pack_start(cell, expand=True)
423.4.4 by Daniel Schierbeck
Renamed COMMITER column into the correct COMMITTER.
353
        self.committer_column.add_attribute(cell, "text", treemodel.COMMITTER)
345 by Daniel Schierbeck
Made treeview columns instance variables.
354
        self.treeview.append_column(self.committer_column)
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
355
357 by Daniel Schierbeck
Added support for showing the date column in the viz.
356
        cell = gtk.CellRendererText()
359 by Daniel Schierbeck
Simplified date format.
357
        cell.set_property("width-chars", 20)
357 by Daniel Schierbeck
Added support for showing the date column in the viz.
358
        cell.set_property("ellipsize", pango.ELLIPSIZE_END)
359
        self.date_column = gtk.TreeViewColumn("Date")
360
        self.date_column.set_visible(False)
361
        self.date_column.set_resizable(True)
362
        self.date_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
363
        self.date_column.set_fixed_width(cell.get_size(self.treeview)[2])
364
        self.date_column.pack_start(cell, expand=True)
365
        self.date_column.add_attribute(cell, "text", treemodel.TIMESTAMP)
366
        self.treeview.append_column(self.date_column)
423.1.13 by Gary van der Merwe
Move viz loading msg from branchwin to treeview.
367
        
368
        return self.treeview
369
    
370
    def construct_loading_msg(self):
371
        image_loading = gtk.image_new_from_stock(gtk.STOCK_REFRESH,
372
                                                 gtk.ICON_SIZE_BUTTON)
373
        image_loading.show()
374
        
375
        label_loading = gtk.Label(_("Please wait, loading ancestral graph..."))
376
        label_loading.set_alignment(0.0, 0.5)
377
        label_loading.show()
378
        
379
        self.loading_msg_box = gtk.HBox()
380
        self.loading_msg_box.set_spacing(5)
381
        self.loading_msg_box.set_border_width(5)        
382
        self.loading_msg_box.pack_start(image_loading, False, False)
383
        self.loading_msg_box.pack_start(label_loading, True, True)
384
        self.loading_msg_box.show()
385
        
386
        return self.loading_msg_box
357 by Daniel Schierbeck
Added support for showing the date column in the viz.
387
391 by Daniel Schierbeck
Moved away from the changed signal on the treeview.
388
    def _on_selection_changed(self, treeview):
303 by Daniel Schierbeck
Made basic signaling work.
389
        """callback for when the treeview changes."""
391 by Daniel Schierbeck
Moved away from the changed signal on the treeview.
390
        (path, focus) = treeview.get_cursor()
391
        if path is not None:
395.1.1 by Daniel Schierbeck
Cleaned up code in the TreeView, removing instance variables.
392
            self.iter = self.model.get_iter(path)
310 by Daniel Schierbeck
Moved to using custom signal for handling revision selections.
393
            self.emit('revision-selected')
394
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
395
    def _on_revision_selected(self, widget, event):
396
        from bzrlib.plugins.gtk.revisionmenu import RevisionPopupMenu
397
        if event.button == 3:
398
            menu = RevisionPopupMenu(self.branch.repository, 
312 by Daniel Schierbeck
Made right-clicking work again.
399
                [self.get_revision().revision_id],
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
400
                self.branch)
423.7.8 by Daniel Schierbeck
Made the revision popup menu correctly add tags.
401
            menu.connect('tag-added', lambda w, t, r: self.add_tag(t, r))
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
402
            menu.popup(None, None, None, event.button, event.get_time())
403
404
    def _on_revision_activated(self, widget, path, col):
423.1.17 by Gary van der Merwe
Reuse the viz treeview in the revision browser.
405
        self.emit('revision-activated', path, col)