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