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