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