/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to branchview/treeview.py

  • Committer: Aaron Bentley
  • Date: 2008-02-23 04:55:56 UTC
  • mfrom: (423.1.16 trunk)
  • Revision ID: aaron@aaronbentley.com-20080223045556-xl3kf2v61crquq83
MergeĀ fromĀ mainline

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
from treemodel import TreeModel
20
20
from bzrlib.revision import NULL_REVISION
21
21
 
22
 
class TreeView(gtk.ScrolledWindow):
 
22
class TreeView(gtk.VBox):
23
23
 
24
24
    __gproperties__ = {
25
25
        'branch': (gobject.TYPE_PYOBJECT,
74
74
                             ()),
75
75
        'revision-selected': (gobject.SIGNAL_RUN_FIRST,
76
76
                              gobject.TYPE_NONE,
77
 
                              ())
 
77
                              ()),
 
78
        'tag-added': (gobject.SIGNAL_RUN_FIRST,
 
79
                              gobject.TYPE_NONE,
 
80
                              (gobject.TYPE_STRING, gobject.TYPE_STRING))
78
81
    }
79
82
 
80
83
    def __init__(self, branch, start, maxnum, compact=True):
87
90
        :param broken_line_length: After how much lines to break 
88
91
                                   branches.
89
92
        """
90
 
        gtk.ScrolledWindow.__init__(self)
91
 
 
92
 
        self.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
93
 
        self.set_shadow_type(gtk.SHADOW_IN)
94
 
 
95
 
        self.construct_treeview()
96
 
 
97
 
        self.iter   = None
 
93
        gtk.VBox.__init__(self, spacing=0)
 
94
 
 
95
        self.pack_start(self.construct_loading_msg(), expand=False, fill=True)
 
96
        self.connect('revisions-loaded', 
 
97
                lambda x: self.loading_msg_box.hide())
 
98
 
 
99
        self.scrolled_window = gtk.ScrolledWindow()
 
100
        self.scrolled_window.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
 
101
        self.scrolled_window.set_shadow_type(gtk.SHADOW_IN)
 
102
        self.scrolled_window.show()
 
103
        self.pack_start(self.scrolled_window, expand=True, fill=True)
 
104
 
 
105
        self.scrolled_window.add(self.construct_treeview())
 
106
        
 
107
 
 
108
        self.iter = None
98
109
        self.branch = branch
 
110
        self.revision = None
99
111
 
100
112
        self.start = start
101
113
        self.maxnum = maxnum
167
179
        :return: list of revision ids.
168
180
        """
169
181
        return self.get_property('parents')
 
182
 
 
183
    def add_tag(self, tag, revid=None):
 
184
        if revid is None: revid = self.revision.revision_id
 
185
 
 
186
        try:
 
187
            self.branch.unlock()
 
188
 
 
189
            try:
 
190
                self.branch.lock_write()
 
191
                self.model.add_tag(tag, revid)
 
192
            finally:
 
193
                self.branch.unlock()
 
194
 
 
195
        finally:
 
196
            self.branch.lock_read()
 
197
 
 
198
        self.emit('tag-added', tag, revid)
170
199
        
171
200
    def refresh(self):
 
201
        self.loading_msg_box.show()
172
202
        gobject.idle_add(self.populate, self.get_revision())
173
203
 
174
204
    def update(self):
233
263
                                                        self.maxnum, 
234
264
                                                        broken_line_length)
235
265
 
236
 
        self.model = TreeModel(self.branch.repository, linegraphdata)
 
266
        self.model = TreeModel(self.branch, linegraphdata)
237
267
        self.graph_cell.columns_len = columns_len
238
268
        width = self.graph_cell.get_size(self.treeview)[2]
239
269
        if width > 500:
297
327
 
298
328
        self.treeview.set_property('fixed-height-mode', True)
299
329
 
300
 
        self.add(self.treeview)
301
330
        self.treeview.show()
302
331
 
303
332
        cell = gtk.CellRendererText()
317
346
        self.graph_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
318
347
        self.graph_column.pack_start(self.graph_cell, expand=False)
319
348
        self.graph_column.add_attribute(self.graph_cell, "node", treemodel.NODE)
 
349
        self.graph_column.add_attribute(self.graph_cell, "tags", treemodel.TAGS)
320
350
        self.graph_column.add_attribute(self.graph_cell, "in-lines", treemodel.LAST_LINES)
321
351
        self.graph_column.add_attribute(self.graph_cell, "out-lines", treemodel.LINES)
322
352
        self.treeview.append_column(self.graph_column)
324
354
        cell = gtk.CellRendererText()
325
355
        cell.set_property("width-chars", 65)
326
356
        cell.set_property("ellipsize", pango.ELLIPSIZE_END)
327
 
        self.msg_column = gtk.TreeViewColumn("Message")
328
 
        self.msg_column.set_resizable(True)
329
 
        self.msg_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
330
 
        self.msg_column.set_fixed_width(cell.get_size(self.treeview)[2])
331
 
        self.msg_column.pack_start(cell, expand=True)
332
 
        self.msg_column.add_attribute(cell, "markup", treemodel.MESSAGE)
333
 
        self.treeview.append_column(self.msg_column)
 
357
        self.summary_column = gtk.TreeViewColumn("Summary")
 
358
        self.summary_column.set_resizable(True)
 
359
        self.summary_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
 
360
        self.summary_column.set_fixed_width(cell.get_size(self.treeview)[2])
 
361
        self.summary_column.pack_start(cell, expand=True)
 
362
        self.summary_column.add_attribute(cell, "markup", treemodel.SUMMARY)
 
363
        self.treeview.append_column(self.summary_column)
334
364
 
335
365
        cell = gtk.CellRendererText()
336
366
        cell.set_property("width-chars", 15)
340
370
        self.committer_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
341
371
        self.committer_column.set_fixed_width(cell.get_size(self.treeview)[2])
342
372
        self.committer_column.pack_start(cell, expand=True)
343
 
        self.committer_column.add_attribute(cell, "text", treemodel.COMMITER)
 
373
        self.committer_column.add_attribute(cell, "text", treemodel.COMMITTER)
344
374
        self.treeview.append_column(self.committer_column)
345
375
 
346
376
        cell = gtk.CellRendererText()
354
384
        self.date_column.pack_start(cell, expand=True)
355
385
        self.date_column.add_attribute(cell, "text", treemodel.TIMESTAMP)
356
386
        self.treeview.append_column(self.date_column)
 
387
        
 
388
        return self.treeview
 
389
    
 
390
    def construct_loading_msg(self):
 
391
        image_loading = gtk.image_new_from_stock(gtk.STOCK_REFRESH,
 
392
                                                 gtk.ICON_SIZE_BUTTON)
 
393
        image_loading.show()
 
394
        
 
395
        label_loading = gtk.Label(_("Please wait, loading ancestral graph..."))
 
396
        label_loading.set_alignment(0.0, 0.5)
 
397
        label_loading.show()
 
398
        
 
399
        self.loading_msg_box = gtk.HBox()
 
400
        self.loading_msg_box.set_spacing(5)
 
401
        self.loading_msg_box.set_border_width(5)        
 
402
        self.loading_msg_box.pack_start(image_loading, False, False)
 
403
        self.loading_msg_box.pack_start(label_loading, True, True)
 
404
        self.loading_msg_box.show()
 
405
        
 
406
        return self.loading_msg_box
357
407
 
358
408
    def _on_selection_changed(self, treeview):
359
409
        """callback for when the treeview changes."""
368
418
            menu = RevisionPopupMenu(self.branch.repository, 
369
419
                [self.get_revision().revision_id],
370
420
                self.branch)
 
421
            menu.connect('tag-added', lambda w, t, r: self.add_tag(t, r))
371
422
            menu.popup(None, None, None, event.button, event.get_time())
372
423
 
373
424
    def _on_revision_activated(self, widget, path, col):