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