/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()
112
        ui.ui_factory.set_nested_progress_bar_widget(loading_msg_widget.get_progress_bar)
113
        self.pack_start(loading_msg_widget, expand=False, fill=True)
114
423.1.13 by Gary van der Merwe
Move viz loading msg from branchwin to treeview.
115
        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.
116
        self.scrolled_window.set_policy(gtk.POLICY_AUTOMATIC,
117
                                        gtk.POLICY_AUTOMATIC)
423.1.13 by Gary van der Merwe
Move viz loading msg from branchwin to treeview.
118
        self.scrolled_window.set_shadow_type(gtk.SHADOW_IN)
119
        self.scrolled_window.show()
120
        self.pack_start(self.scrolled_window, expand=True, fill=True)
121
122
        self.scrolled_window.add(self.construct_treeview())
303 by Daniel Schierbeck
Made basic signaling work.
123
423.7.3 by Daniel Schierbeck
Moved tag writing logic inside the branchview treemodel.
124
        self.iter = None
316 by Daniel Schierbeck
Removed viz.TreeView.set_branch()
125
        self.branch = branch
423.7.3 by Daniel Schierbeck
Moved tag writing logic inside the branchview treemodel.
126
        self.revision = None
316 by Daniel Schierbeck
Removed viz.TreeView.set_branch()
127
401.1.1 by Daniel Schierbeck
Added update() method to TreeView.
128
        self.start = start
129
        self.maxnum = maxnum
401.1.3 by Daniel Schierbeck
Made the compact view toggling cleaner.
130
        self.compact = compact
401.1.1 by Daniel Schierbeck
Added update() method to TreeView.
131
132
        gobject.idle_add(self.populate)
316 by Daniel Schierbeck
Removed viz.TreeView.set_branch()
133
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.
134
        self.connect("destroy", lambda x: self.branch.unlock())
135
347 by Daniel Schierbeck
Added property getter and setter method to the treeview.
136
    def do_get_property(self, property):
137
        if property.name == 'revno-column-visible':
352 by Daniel Schierbeck
Added branch property to treeview.
138
            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.
139
        elif property.name == 'graph-column-visible':
140
            return self.graph_column.get_visible()
357 by Daniel Schierbeck
Added support for showing the date column in the viz.
141
        elif property.name == 'date-column-visible':
142
            return self.date_column.get_visible()
401.1.3 by Daniel Schierbeck
Made the compact view toggling cleaner.
143
        elif property.name == 'compact':
144
            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.
145
        elif property.name == 'mainline-only':
146
            return self.mainline_only
352 by Daniel Schierbeck
Added branch property to treeview.
147
        elif property.name == 'branch':
148
            return self.branch
356 by Daniel Schierbeck
Made revision a property on TreeView.
149
        elif property.name == 'revision':
395.1.1 by Daniel Schierbeck
Cleaned up code in the TreeView, removing instance variables.
150
            return self.model.get_value(self.iter, treemodel.REVISION)
395.1.2 by Daniel Schierbeck
Added revision-number property to the TreeView.
151
        elif property.name == 'revision-number':
152
            return self.model.get_value(self.iter, treemodel.REVNO)
395.1.1 by Daniel Schierbeck
Cleaned up code in the TreeView, removing instance variables.
153
        elif property.name == 'children':
154
            return self.model.get_value(self.iter, treemodel.CHILDREN)
155
        elif property.name == 'parents':
156
            return self.model.get_value(self.iter, treemodel.PARENTS)
347 by Daniel Schierbeck
Added property getter and setter method to the treeview.
157
        else:
158
            raise AttributeError, 'unknown property %s' % property.name
159
160
    def do_set_property(self, property, value):
161
        if property.name == 'revno-column-visible':
162
            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.
163
        elif property.name == 'graph-column-visible':
164
            self.graph_column.set_visible(value)
357 by Daniel Schierbeck
Added support for showing the date column in the viz.
165
        elif property.name == 'date-column-visible':
166
            self.date_column.set_visible(value)
401.1.3 by Daniel Schierbeck
Made the compact view toggling cleaner.
167
        elif property.name == 'compact':
168
            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.
169
        elif property.name == 'mainline-only':
170
            self.mainline_only = value
352 by Daniel Schierbeck
Added branch property to treeview.
171
        elif property.name == 'branch':
172
            self.branch = value
356 by Daniel Schierbeck
Made revision a property on TreeView.
173
        elif property.name == 'revision':
174
            self.set_revision_id(value.revision_id)
347 by Daniel Schierbeck
Added property getter and setter method to the treeview.
175
        else:
176
            raise AttributeError, 'unknown property %s' % property.name
177
303 by Daniel Schierbeck
Made basic signaling work.
178
    def get_revision(self):
322 by Jelmer Vernooij
Add docstrings.
179
        """Return revision id of currently selected revision, or None."""
395.1.1 by Daniel Schierbeck
Cleaned up code in the TreeView, removing instance variables.
180
        return self.get_property('revision')
181
182
    def set_revision(self, revision):
183
        self.set_property('revision', revision)
303 by Daniel Schierbeck
Made basic signaling work.
184
356 by Daniel Schierbeck
Made revision a property on TreeView.
185
    def set_revision_id(self, revid):
322 by Jelmer Vernooij
Add docstrings.
186
        """Change the currently selected revision.
187
188
        :param revid: Revision id of revision to display.
189
        """
305 by Daniel Schierbeck
Moved revision selection to the new view.
190
        self.treeview.set_cursor(self.index[revid])
191
        self.treeview.grab_focus()
192
303 by Daniel Schierbeck
Made basic signaling work.
193
    def get_children(self):
322 by Jelmer Vernooij
Add docstrings.
194
        """Return the children of the currently selected revision.
195
196
        :return: list of revision ids.
197
        """
395.1.1 by Daniel Schierbeck
Cleaned up code in the TreeView, removing instance variables.
198
        return self.get_property('children')
303 by Daniel Schierbeck
Made basic signaling work.
199
200
    def get_parents(self):
322 by Jelmer Vernooij
Add docstrings.
201
        """Return the parents of the currently selected revision.
202
203
        :return: list of revision ids.
204
        """
395.1.1 by Daniel Schierbeck
Cleaned up code in the TreeView, removing instance variables.
205
        return self.get_property('parents')
423.7.3 by Daniel Schierbeck
Moved tag writing logic inside the branchview treemodel.
206
207
    def add_tag(self, tag, revid=None):
208
        if revid is None: revid = self.revision.revision_id
209
210
        try:
211
            self.branch.unlock()
212
213
            try:
214
                self.branch.lock_write()
215
                self.model.add_tag(tag, revid)
216
            finally:
217
                self.branch.unlock()
218
219
        finally:
220
            self.branch.lock_read()
423.7.4 by Daniel Schierbeck
Made revisionview and branchview update when a tag is added.
221
222
        self.emit('tag-added', tag, revid)
316 by Daniel Schierbeck
Removed viz.TreeView.set_branch()
223
        
401.1.2 by Daniel Schierbeck
Allowed the treeview to be refreshed.
224
    def refresh(self):
225
        gobject.idle_add(self.populate, self.get_revision())
401.1.1 by Daniel Schierbeck
Added update() method to TreeView.
226
404 by Daniel Schierbeck
Made the refresh use proper locking.
227
    def update(self):
228
        try:
229
            self.branch.unlock()
230
            try:
231
                self.branch.lock_write()
232
                self.branch.update()
233
            finally:
234
                self.branch.unlock()
235
        finally:
236
            self.branch.lock_read()
237
304 by Daniel Schierbeck
Made forward/back buttons work again.
238
    def back(self):
322 by Jelmer Vernooij
Add docstrings.
239
        """Signal handler for the Back button."""
395.1.1 by Daniel Schierbeck
Cleaned up code in the TreeView, removing instance variables.
240
        parents = self.get_parents()
304 by Daniel Schierbeck
Made forward/back buttons work again.
241
        if not len(parents):
242
            return
243
244
        for parent_id in parents:
245
            parent_index = self.index[parent_id]
246
            parent = self.model[parent_index][treemodel.REVISION]
395.1.1 by Daniel Schierbeck
Cleaned up code in the TreeView, removing instance variables.
247
            if same_branch(self.get_revision(), parent):
395.1.2 by Daniel Schierbeck
Added revision-number property to the TreeView.
248
                self.set_revision(parent)
304 by Daniel Schierbeck
Made forward/back buttons work again.
249
                break
250
        else:
395.1.2 by Daniel Schierbeck
Added revision-number property to the TreeView.
251
            self.set_revision_id(parents[0])
304 by Daniel Schierbeck
Made forward/back buttons work again.
252
253
    def forward(self):
322 by Jelmer Vernooij
Add docstrings.
254
        """Signal handler for the Forward button."""
395.1.1 by Daniel Schierbeck
Cleaned up code in the TreeView, removing instance variables.
255
        children = self.get_children()
304 by Daniel Schierbeck
Made forward/back buttons work again.
256
        if not len(children):
257
            return
258
259
        for child_id in children:
260
            child_index = self.index[child_id]
261
            child = self.model[child_index][treemodel.REVISION]
395.1.1 by Daniel Schierbeck
Cleaned up code in the TreeView, removing instance variables.
262
            if same_branch(child, self.get_revision()):
395.1.2 by Daniel Schierbeck
Added revision-number property to the TreeView.
263
                self.set_revision(child)
304 by Daniel Schierbeck
Made forward/back buttons work again.
264
                break
265
        else:
395.1.2 by Daniel Schierbeck
Added revision-number property to the TreeView.
266
            self.set_revision_id(children[0])
304 by Daniel Schierbeck
Made forward/back buttons work again.
267
401.1.2 by Daniel Schierbeck
Allowed the treeview to be refreshed.
268
    def populate(self, revision=None):
322 by Jelmer Vernooij
Add docstrings.
269
        """Fill the treeview with contents.
270
271
        :param start: Revision id of revision to start with.
272
        :param maxnum: Maximum number of revisions to display, or None 
273
                       for no limit.
329 by Jelmer Vernooij
Make broken_line_length setting from higher up.
274
        :param broken_line_length: After how much lines branches \
275
                       should be broken.
322 by Jelmer Vernooij
Add docstrings.
276
        """
401.1.3 by Daniel Schierbeck
Made the compact view toggling cleaner.
277
511.5.6 by Jelmer Vernooij
Simplify progress bar code, use embedded progress bar inside viz window.
278
        self.progress_bar = ui.ui_factory.nested_progress_bar()
279
        self.progress_bar.update(msg="Loading ancestry graph", total_cnt=5)
475.2.1 by Chad MILLER
Make "vizualize" use the GUI progress bar defined in the parent 'ui' module.
280
281
        try:
282
            if self.compact:
283
                broken_line_length = 32
284
            else:
285
                broken_line_length = None
286
            
287
            show_graph = self.graph_column.get_visible()
288
289
            self.branch.lock_read()
511.5.3 by Jelmer Vernooij
Merge Chad's progress bar in viz patch.
290
            (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.
291
                                                            self.start,
292
                                                            self.maxnum, 
293
                                                            broken_line_length,
294
                                                            show_graph,
475.2.2 by Chad MILLER
Big diff, few changes. :(
295
                                                            self.mainline_only,
511.5.6 by Jelmer Vernooij
Simplify progress bar code, use embedded progress bar inside viz window.
296
                                                            self.progress_bar)
475.2.1 by Chad MILLER
Make "vizualize" use the GUI progress bar defined in the parent 'ui' module.
297
298
            self.model = TreeModel(self.branch, linegraphdata)
299
            self.graph_cell.columns_len = columns_len
300
            width = self.graph_cell.get_size(self.treeview)[2]
301
            if width > 500:
302
                width = 500
303
            self.graph_column.set_fixed_width(width)
304
            self.graph_column.set_max_width(width)
305
            self.index = index
306
            self.treeview.set_model(self.model)
307
308
            if not revision or revision == NULL_REVISION:
309
                self.treeview.set_cursor(0)
310
            else:
311
                self.set_revision(revision)
312
313
            return False
314
        finally:
511.5.6 by Jelmer Vernooij
Simplify progress bar code, use embedded progress bar inside viz window.
315
            self.progress_bar.finished()
304 by Daniel Schierbeck
Made forward/back buttons work again.
316
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
317
    def construct_treeview(self):
318
        self.treeview = gtk.TreeView()
319
320
        self.treeview.set_rules_hint(True)
330.1.2 by Daniel Schierbeck
Replaced literal column index with equivalent symbol.
321
        self.treeview.set_search_column(treemodel.REVNO)
330.5.2 by Szilveszter Farkas (Phanatic)
Fixed set_tooltip_column() related issue.
322
        
330.5.5 by Szilveszter Farkas (Phanatic)
Use better fix by John.
323
        # Fix old PyGTK bug - by JAM
324
        set_tooltip = getattr(self.treeview, 'set_tooltip_column', None)
325
        if set_tooltip is not None:
423.4.3 by Daniel Schierbeck
Made the MESSAGE column be the tooltip column.
326
            set_tooltip(treemodel.MESSAGE)
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
327
531.7.4 by Scott Scriven
The 'vis' treeview was updating twice per cursor motion. Fixed.
328
        self._prev_cursor_path = None
391 by Daniel Schierbeck
Moved away from the changed signal on the treeview.
329
        self.treeview.connect("cursor-changed",
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
330
                self._on_selection_changed)
331
332
        self.treeview.connect("row-activated", 
333
                self._on_revision_activated)
334
335
        self.treeview.connect("button-release-event", 
336
                self._on_revision_selected)
337
338
        self.treeview.set_property('fixed-height-mode', True)
339
340
        self.treeview.show()
341
342
        cell = gtk.CellRendererText()
343
        cell.set_property("width-chars", 15)
344
        cell.set_property("ellipsize", pango.ELLIPSIZE_END)
345 by Daniel Schierbeck
Made treeview columns instance variables.
345
        self.revno_column = gtk.TreeViewColumn("Revision No")
496.2.1 by Daniel Schierbeck
Made the columns have more suitable sizes.
346
        self.revno_column.set_resizable(False)
345 by Daniel Schierbeck
Made treeview columns instance variables.
347
        self.revno_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
348
        self.revno_column.set_fixed_width(cell.get_size(self.treeview)[2])
349
        self.revno_column.pack_start(cell, expand=True)
350
        self.revno_column.add_attribute(cell, "text", treemodel.REVNO)
351
        self.treeview.append_column(self.revno_column)
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
352
353
        self.graph_cell = CellRendererGraph()
354
        self.graph_column = gtk.TreeViewColumn()
496.2.1 by Daniel Schierbeck
Made the columns have more suitable sizes.
355
        self.graph_column.set_resizable(False)
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
356
        self.graph_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
496.2.1 by Daniel Schierbeck
Made the columns have more suitable sizes.
357
        self.graph_column.pack_start(self.graph_cell, expand=True)
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
358
        self.graph_column.add_attribute(self.graph_cell, "node", treemodel.NODE)
423.5.1 by Ali Sabil
Added tags visualization in the graph
359
        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.
360
        self.graph_column.add_attribute(self.graph_cell, "in-lines", treemodel.LAST_LINES)
361
        self.graph_column.add_attribute(self.graph_cell, "out-lines", treemodel.LINES)
362
        self.treeview.append_column(self.graph_column)
363
364
        cell = gtk.CellRendererText()
365
        cell.set_property("width-chars", 65)
366
        cell.set_property("ellipsize", pango.ELLIPSIZE_END)
423.4.1 by Daniel Schierbeck
Renamed the MESSAGE column to SUMMARY.
367
        self.summary_column = gtk.TreeViewColumn("Summary")
496.2.1 by Daniel Schierbeck
Made the columns have more suitable sizes.
368
        self.summary_column.set_resizable(False)
369
        self.summary_column.set_expand(True)
423.4.1 by Daniel Schierbeck
Renamed the MESSAGE column to SUMMARY.
370
        self.summary_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
371
        self.summary_column.set_fixed_width(cell.get_size(self.treeview)[2])
372
        self.summary_column.pack_start(cell, expand=True)
373
        self.summary_column.add_attribute(cell, "markup", treemodel.SUMMARY)
374
        self.treeview.append_column(self.summary_column)
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
375
376
        cell = gtk.CellRendererText()
377
        cell.set_property("width-chars", 15)
378
        cell.set_property("ellipsize", pango.ELLIPSIZE_END)
345 by Daniel Schierbeck
Made treeview columns instance variables.
379
        self.committer_column = gtk.TreeViewColumn("Committer")
496.2.1 by Daniel Schierbeck
Made the columns have more suitable sizes.
380
        self.committer_column.set_resizable(False)
345 by Daniel Schierbeck
Made treeview columns instance variables.
381
        self.committer_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
496.2.1 by Daniel Schierbeck
Made the columns have more suitable sizes.
382
        self.committer_column.set_fixed_width(200)
345 by Daniel Schierbeck
Made treeview columns instance variables.
383
        self.committer_column.pack_start(cell, expand=True)
423.4.4 by Daniel Schierbeck
Renamed COMMITER column into the correct COMMITTER.
384
        self.committer_column.add_attribute(cell, "text", treemodel.COMMITTER)
345 by Daniel Schierbeck
Made treeview columns instance variables.
385
        self.treeview.append_column(self.committer_column)
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
386
357 by Daniel Schierbeck
Added support for showing the date column in the viz.
387
        cell = gtk.CellRendererText()
359 by Daniel Schierbeck
Simplified date format.
388
        cell.set_property("width-chars", 20)
357 by Daniel Schierbeck
Added support for showing the date column in the viz.
389
        cell.set_property("ellipsize", pango.ELLIPSIZE_END)
390
        self.date_column = gtk.TreeViewColumn("Date")
391
        self.date_column.set_visible(False)
496.2.1 by Daniel Schierbeck
Made the columns have more suitable sizes.
392
        self.date_column.set_resizable(False)
357 by Daniel Schierbeck
Added support for showing the date column in the viz.
393
        self.date_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
496.2.1 by Daniel Schierbeck
Made the columns have more suitable sizes.
394
        self.date_column.set_fixed_width(130)
357 by Daniel Schierbeck
Added support for showing the date column in the viz.
395
        self.date_column.pack_start(cell, expand=True)
396
        self.date_column.add_attribute(cell, "text", treemodel.TIMESTAMP)
397
        self.treeview.append_column(self.date_column)
423.1.13 by Gary van der Merwe
Move viz loading msg from branchwin to treeview.
398
        
399
        return self.treeview
511.5.6 by Jelmer Vernooij
Simplify progress bar code, use embedded progress bar inside viz window.
400
    
391 by Daniel Schierbeck
Moved away from the changed signal on the treeview.
401
    def _on_selection_changed(self, treeview):
303 by Daniel Schierbeck
Made basic signaling work.
402
        """callback for when the treeview changes."""
391 by Daniel Schierbeck
Moved away from the changed signal on the treeview.
403
        (path, focus) = treeview.get_cursor()
531.7.4 by Scott Scriven
The 'vis' treeview was updating twice per cursor motion. Fixed.
404
        if (path is not None) and (path != self._prev_cursor_path):
405
            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.
406
            self.iter = self.model.get_iter(path)
310 by Daniel Schierbeck
Moved to using custom signal for handling revision selections.
407
            self.emit('revision-selected')
408
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
409
    def _on_revision_selected(self, widget, event):
523.3.1 by Jelmer Vernooij
Rename RevisionPopupMenu -> RevisionMenu.
410
        from bzrlib.plugins.gtk.revisionmenu import RevisionMenu
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
411
        if event.button == 3:
523.3.1 by Jelmer Vernooij
Rename RevisionPopupMenu -> RevisionMenu.
412
            menu = RevisionMenu(self.branch.repository, 
312 by Daniel Schierbeck
Made right-clicking work again.
413
                [self.get_revision().revision_id],
301 by Daniel Schierbeck
Initial work on extracting the TreeView from the branch window.
414
                self.branch)
423.7.8 by Daniel Schierbeck
Made the revision popup menu correctly add tags.
415
            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.
416
            menu.popup(None, None, None, event.button, event.get_time())
417
418
    def _on_revision_activated(self, widget, path, col):
423.1.17 by Gary van der Merwe
Reuse the viz treeview in the revision browser.
419
        self.emit('revision-activated', path, col)