/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 revisionview.py

  • Committer: Jelmer Vernooij
  • Date: 2011-11-02 11:11:06 UTC
  • mfrom: (734.1.55 gtk3)
  • Revision ID: jelmer@samba.org-20111102111106-7l0vso8eg24dpf87
Merge gtk3 support from Curtis.

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
# along with this program; if not, write to the Free Software
16
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
17
 
18
 
import pygtk
19
 
pygtk.require("2.0")
20
 
import gtk
21
 
import pango
22
 
import gobject
 
18
from gi.repository import Gtk
 
19
from gi.repository import Pango
 
20
from gi.repository import GObject
23
21
import webbrowser
24
22
 
25
23
from bzrlib import trace
53
51
            webbrowser._tryorder.insert(0, '%s "%%s"' % cmd)
54
52
    webbrowser.open(uri)
55
53
 
56
 
if getattr(gtk, 'link_button_set_uri_hook', None) is not None:
57
 
    # Not available before PyGtk-2.10
58
 
    gtk.link_button_set_uri_hook(_open_link)
59
54
 
60
 
class BugsTab(gtk.VBox):
 
55
class BugsTab(Gtk.VBox):
61
56
 
62
57
    def __init__(self):
63
 
        super(BugsTab, self).__init__(False, 6)
 
58
        super(BugsTab, self).__init__(homogeneous=False, spacing=6)
64
59
 
65
 
        table = gtk.Table(rows=2, columns=2)
 
60
        table = Gtk.Table(rows=2, columns=2)
66
61
 
67
62
        table.set_row_spacings(6)
68
63
        table.set_col_spacing(0, 16)
69
64
 
70
 
        image = gtk.Image()
 
65
        image = Gtk.Image()
71
66
        image.set_from_file(icon_path("bug.png"))
72
 
        table.attach(image, 0, 1, 0, 1, gtk.FILL)
 
67
        table.attach(image, 0, 1, 0, 1, Gtk.AttachOptions.FILL)
73
68
 
74
 
        align = gtk.Alignment(0.0, 0.1)
75
 
        self.label = gtk.Label()
 
69
        align = Gtk.Alignment.new(0.0, 0.1, 0, 0)
 
70
        self.label = Gtk.Label()
76
71
        align.add(self.label)
77
 
        table.attach(align, 1, 2, 0, 1, gtk.FILL)
 
72
        table.attach(align, 1, 2, 0, 1, Gtk.AttachOptions.FILL)
78
73
 
79
74
        treeview = self.construct_treeview()
80
 
        table.attach(treeview, 1, 2, 1, 2, gtk.FILL | gtk.EXPAND)
 
75
        table.attach(treeview, 1, 2, 1, 2, Gtk.AttachOptions.FILL | Gtk.AttachOptions.EXPAND)
81
76
 
82
77
        self.set_border_width(6)
83
 
        self.pack_start(table, expand=False)
 
78
        self.pack_start(table, False, True, 0)
84
79
 
85
80
        self.clear()
86
81
        self.show_all()
108
103
                              "%d %s." % (self.num_bugs, label))
109
104
 
110
105
    def construct_treeview(self):
111
 
        self.bugs = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING)
112
 
        self.treeview = gtk.TreeView(self.bugs)
 
106
        self.bugs = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_STRING)
 
107
        self.treeview = Gtk.TreeView(model=self.bugs)
113
108
        self.treeview.set_headers_visible(False)
114
109
 
115
 
        uri_column = gtk.TreeViewColumn('Bug URI', gtk.CellRendererText(), text=0)
 
110
        uri_column = Gtk.TreeViewColumn('Bug URI', Gtk.CellRendererText(), text=0)
116
111
        self.treeview.append_column(uri_column)
117
112
 
118
113
        self.treeview.connect('row-activated', self.on_row_activated)
119
114
 
120
 
        win = gtk.ScrolledWindow()
121
 
        win.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
122
 
        win.set_shadow_type(gtk.SHADOW_IN)
 
115
        win = Gtk.ScrolledWindow()
 
116
        win.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
 
117
        win.set_shadow_type(Gtk.ShadowType.IN)
123
118
        win.add(self.treeview)
124
119
 
125
120
        return win
144
139
        _open_link(self, uri)
145
140
 
146
141
 
147
 
class SignatureTab(gtk.VBox):
 
142
class SignatureTab(Gtk.VBox):
148
143
 
149
144
    def __init__(self, repository):
150
145
        self.key = None
151
146
        self.revision = None
152
147
        self.repository = repository
153
148
 
154
 
        super(SignatureTab, self).__init__(False, 6)
155
 
        signature_box = gtk.Table(rows=3, columns=3)
 
149
        super(SignatureTab, self).__init__(homogeneous=False, spacing=6)
 
150
        signature_box = Gtk.Table(rows=3, columns=3)
156
151
        signature_box.set_col_spacing(0, 16)
157
152
        signature_box.set_col_spacing(1, 12)
158
153
        signature_box.set_row_spacings(6)
159
154
 
160
 
        self.signature_image = gtk.Image()
161
 
        signature_box.attach(self.signature_image, 0, 1, 0, 1, gtk.FILL)
 
155
        self.signature_image = Gtk.Image()
 
156
        signature_box.attach(self.signature_image, 0, 1, 0, 1, Gtk.AttachOptions.FILL)
162
157
 
163
 
        align = gtk.Alignment(0.0, 0.1)
164
 
        self.signature_label = gtk.Label()
 
158
        align = Gtk.Alignment.new(0.0, 0.1, 0.0, 0.0)
 
159
        self.signature_label = Gtk.Label()
165
160
        align.add(self.signature_label)
166
 
        signature_box.attach(align, 1, 3, 0, 1, gtk.FILL)
 
161
        signature_box.attach(align, 1, 3, 0, 1, Gtk.AttachOptions.FILL)
167
162
 
168
 
        align = gtk.Alignment(0.0, 0.5)
169
 
        self.signature_key_id_label = gtk.Label()
 
163
        align = Gtk.Alignment.new(0.0, 0.5, 0.0, 0.0)
 
164
        self.signature_key_id_label = Gtk.Label()
170
165
        self.signature_key_id_label.set_markup("<b>Key Id:</b>")
171
166
        align.add(self.signature_key_id_label)
172
 
        signature_box.attach(align, 1, 2, 1, 2, gtk.FILL, gtk.FILL)
 
167
        signature_box.attach(align, 1, 2, 1, 2, Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL)
173
168
 
174
 
        align = gtk.Alignment(0.0, 0.5)
175
 
        self.signature_key_id = gtk.Label()
 
169
        align = Gtk.Alignment.new(0.0, 0.5, 0.0, 0.0)
 
170
        self.signature_key_id = Gtk.Label()
176
171
        self.signature_key_id.set_selectable(True)
177
172
        align.add(self.signature_key_id)
178
 
        signature_box.attach(align, 2, 3, 1, 2, gtk.EXPAND | gtk.FILL, gtk.FILL)
 
173
        signature_box.attach(align, 2, 3, 1, 2, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL)
179
174
 
180
 
        align = gtk.Alignment(0.0, 0.5)
181
 
        self.signature_fingerprint_label = gtk.Label()
 
175
        align = Gtk.Alignment.new(0.0, 0.5, 0.0, 0.0)
 
176
        self.signature_fingerprint_label = Gtk.Label()
182
177
        self.signature_fingerprint_label.set_markup("<b>Fingerprint:</b>")
183
178
        align.add(self.signature_fingerprint_label)
184
 
        signature_box.attach(align, 1, 2, 2, 3, gtk.FILL, gtk.FILL)
 
179
        signature_box.attach(align, 1, 2, 2, 3, Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL)
185
180
 
186
 
        align = gtk.Alignment(0.0, 0.5)
187
 
        self.signature_fingerprint = gtk.Label()
 
181
        align = Gtk.Alignment.new(0.0, 0.5, 0.0, 0.0)
 
182
        self.signature_fingerprint = Gtk.Label()
188
183
        self.signature_fingerprint.set_selectable(True)
189
184
        align.add(self.signature_fingerprint)
190
 
        signature_box.attach(align, 2, 3, 2, 3, gtk.EXPAND | gtk.FILL, gtk.FILL)
 
185
        signature_box.attach(align, 2, 3, 2, 3, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL)
191
186
 
192
 
        align = gtk.Alignment(0.0, 0.5)
193
 
        self.signature_trust_label = gtk.Label()
 
187
        align = Gtk.Alignment.new(0.0, 0.5, 0.0, 0.0)
 
188
        self.signature_trust_label = Gtk.Label()
194
189
        self.signature_trust_label.set_markup("<b>Trust:</b>")
195
190
        align.add(self.signature_trust_label)
196
 
        signature_box.attach(align, 1, 2, 3, 4, gtk.FILL, gtk.FILL)
 
191
        signature_box.attach(align, 1, 2, 3, 4, Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL)
197
192
 
198
 
        align = gtk.Alignment(0.0, 0.5)
199
 
        self.signature_trust = gtk.Label()
 
193
        align = Gtk.Alignment.new(0.0, 0.5, 0.0, 0.0)
 
194
        self.signature_trust = Gtk.Label()
200
195
        self.signature_trust.set_selectable(True)
201
196
        align.add(self.signature_trust)
202
 
        signature_box.attach(align, 2, 3, 3, 4, gtk.EXPAND | gtk.FILL, gtk.FILL)
 
197
        signature_box.attach(align, 2, 3, 3, 4, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL)
203
198
 
204
199
        self.set_border_width(6)
205
 
        self.pack_start(signature_box, expand=False)
 
200
        self.pack_start(signature_box, False, True, 0)
206
201
        self.show_all()
207
202
 
208
203
    def set_revision(self, revision):
292
287
        self.signature_trust.set_text('This key is ' + trust_text)
293
288
 
294
289
 
295
 
class RevisionView(gtk.Notebook):
 
290
class RevisionView(Gtk.Notebook):
296
291
    """ Custom widget for commit log details.
297
292
 
298
293
    A variety of bzr tools may need to implement such a thing. This is a
301
296
 
302
297
    __gproperties__ = {
303
298
        'branch': (
304
 
            gobject.TYPE_PYOBJECT,
 
299
            GObject.TYPE_PYOBJECT,
305
300
            'Branch',
306
301
            'The branch holding the revision being displayed',
307
 
            gobject.PARAM_CONSTRUCT_ONLY | gobject.PARAM_WRITABLE
 
302
            GObject.PARAM_CONSTRUCT_ONLY | GObject.PARAM_WRITABLE
308
303
        ),
309
304
 
310
305
        'revision': (
311
 
            gobject.TYPE_PYOBJECT,
 
306
            GObject.TYPE_PYOBJECT,
312
307
            'Revision',
313
308
            'The revision being displayed',
314
 
            gobject.PARAM_READWRITE
 
309
            GObject.PARAM_READWRITE
315
310
        ),
316
311
 
317
312
        'children': (
318
 
            gobject.TYPE_PYOBJECT,
 
313
            GObject.TYPE_PYOBJECT,
319
314
            'Children',
320
315
            'Child revisions',
321
 
            gobject.PARAM_READWRITE
 
316
            GObject.PARAM_READWRITE
322
317
        ),
323
318
 
324
319
        'file-id': (
325
 
            gobject.TYPE_PYOBJECT,
 
320
            GObject.TYPE_PYOBJECT,
326
321
            'File Id',
327
322
            'The file id',
328
 
            gobject.PARAM_READWRITE
 
323
            GObject.PARAM_READWRITE
329
324
        )
330
325
    }
331
326
 
332
327
    def __init__(self, branch=None, repository=None):
333
 
        gtk.Notebook.__init__(self)
 
328
        super(RevisionView, self).__init__()
334
329
 
335
330
        self._revision = None
336
331
        self._branch = branch
338
333
            self._repository = branch.repository
339
334
        else:
340
335
            self._repository = repository
 
336
        self.signature_table = None
341
337
 
342
338
        self._create_general()
343
339
        self._create_relations()
477
473
        self._add_tags()
478
474
 
479
475
    def _update_signature(self, widget, param):
 
476
        if not has_seahorse:
 
477
            return
480
478
        if self.get_current_page() == PAGE_SIGNATURE:
481
479
            self.signature_table.set_revision(self._revision)
482
480
 
491
489
                                      self.children_table)
492
490
 
493
491
    def _switch_page_cb(self, notebook, page, page_num):
 
492
        if not has_seahorse:
 
493
            return
494
494
        if page_num == PAGE_SIGNATURE:
495
495
            self.signature_table.set_revision(self._revision)
496
496
 
530
530
        table.resize(max(len(revids), 1), 2)
531
531
 
532
532
        for idx, revid in enumerate(revids):
533
 
            align = gtk.Alignment(0.0, 0.0, 1, 1)
 
533
            align = Gtk.Alignment.new(0.0, 0.0, 1, 1)
534
534
            widgets.append(align)
535
535
            table.attach(align, 1, 2, idx, idx + 1,
536
 
                                      gtk.EXPAND | gtk.FILL, gtk.FILL)
 
536
                                      Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL)
537
537
            align.show()
538
538
 
539
 
            hbox = gtk.HBox(False, spacing=6)
 
539
            hbox = Gtk.HBox(homogeneous=False, spacing=6)
540
540
            align.add(hbox)
541
541
            hbox.show()
542
542
 
543
 
            image = gtk.Image()
 
543
            image = Gtk.Image()
544
544
            image.set_from_stock(
545
 
                gtk.STOCK_FIND, gtk.ICON_SIZE_SMALL_TOOLBAR)
 
545
                Gtk.STOCK_FIND, Gtk.IconSize.SMALL_TOOLBAR)
546
546
            image.show()
547
547
 
548
548
            if self._show_callback is not None:
549
 
                button = gtk.Button()
 
549
                button = Gtk.Button()
550
550
                button.add(image)
551
551
                button.connect("clicked", self._show_clicked_cb,
552
552
                               self._revision.revision_id, revid)
553
 
                hbox.pack_start(button, expand=False, fill=True)
 
553
                hbox.pack_start(button, False, True, 0)
554
554
                button.show()
555
555
 
556
 
            button = gtk.Button()
557
 
            revid_label = gtk.Label(str(revid))
558
 
            revid_label.set_ellipsize(pango.ELLIPSIZE_MIDDLE)
 
556
            button = Gtk.Button()
 
557
            revid_label = Gtk.Label(label=str(revid))
 
558
            revid_label.set_ellipsize(Pango.EllipsizeMode.MIDDLE)
559
559
            revid_label.set_alignment(0.0, 0.5)
560
560
            button.add(revid_label)
561
561
            button.connect("clicked",
562
 
                    lambda w, r: self.set_revision(self._repository.get_revision(r)), revid)
 
562
                    lambda w, r: self.set_revision(
 
563
                        self._repository.get_revision(r)), revid)
563
564
            button.set_use_underline(False)
564
 
            hbox.pack_start(button, expand=True, fill=True)
 
565
            hbox.pack_start(button, True, True, 0)
565
566
            button.show_all()
566
567
 
567
568
    def _create_general(self):
568
 
        vbox = gtk.VBox(False, 6)
 
569
        vbox = Gtk.VBox(homogeneous=False, spacing=6)
569
570
        vbox.set_border_width(6)
570
 
        vbox.pack_start(self._create_headers(), expand=False, fill=True)
571
 
        vbox.pack_start(self._create_message_view())
572
 
        self.append_page(vbox, tab_label=gtk.Label("General"))
 
571
        vbox.pack_start(self._create_headers(), False, True, 0)
 
572
        vbox.pack_start(self._create_message_view(), True, True, 0)
 
573
        self.append_page(vbox, Gtk.Label(label="General"))
573
574
        vbox.show()
574
575
 
575
576
    def _create_relations(self):
576
 
        vbox = gtk.VBox(False, 6)
 
577
        vbox = Gtk.VBox(homogeneous=False, spacing=6)
577
578
        vbox.set_border_width(6)
578
 
        vbox.pack_start(self._create_parents(), expand=False, fill=True)
579
 
        vbox.pack_start(self._create_children(), expand=False, fill=True)
580
 
        self.append_page(vbox, tab_label=gtk.Label("Relations"))
 
579
        vbox.pack_start(self._create_parents(), False, True, 0)
 
580
        vbox.pack_start(self._create_children(), False, True, 0)
 
581
        self.append_page(vbox, Gtk.Label(label="Relations"))
581
582
        vbox.show()
582
583
 
583
584
    def _create_signature(self):
584
585
        self.signature_table = SignatureTab(self._repository)
585
 
        self.append_page(self.signature_table, tab_label=gtk.Label('Signature'))
 
586
        self.append_page(
 
587
            self.signature_table, Gtk.Label(label='Signature'))
586
588
        self.connect_after('notify::revision', self._update_signature)
587
589
 
588
590
    def _create_headers(self):
589
591
        self.avatarsbox = AvatarsBox()
590
592
        
591
 
        self.table = gtk.Table(rows=5, columns=2)
 
593
        self.table = Gtk.Table(rows=5, columns=2)
592
594
        self.table.set_row_spacings(6)
593
595
        self.table.set_col_spacings(6)
594
596
        self.table.show()
595
597
        
596
 
        self.avatarsbox.pack_start(self.table)
 
598
        self.avatarsbox.pack_start(self.table, True, True, 0)
597
599
        self.avatarsbox.show()
598
600
 
599
601
        row = 0
600
602
 
601
 
        label = gtk.Label()
 
603
        label = Gtk.Label()
602
604
        label.set_alignment(1.0, 0.5)
603
605
        label.set_markup("<b>Revision Id:</b>")
604
 
        self.table.attach(label, 0, 1, row, row+1, gtk.FILL, gtk.FILL)
 
606
        self.table.attach(label, 0, 1, row, row+1, Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL)
605
607
        label.show()
606
608
 
607
 
        revision_id = gtk.Label()
608
 
        revision_id.set_ellipsize(pango.ELLIPSIZE_MIDDLE)
 
609
        revision_id = Gtk.Label()
 
610
        revision_id.set_ellipsize(Pango.EllipsizeMode.MIDDLE)
609
611
        revision_id.set_alignment(0.0, 0.5)
610
612
        revision_id.set_selectable(True)
611
613
        self.connect('notify::revision', 
612
614
                lambda w, p: revision_id.set_text(self._revision.revision_id))
613
 
        self.table.attach(revision_id, 1, 2, row, row+1, gtk.EXPAND | gtk.FILL, gtk.FILL)
 
615
        self.table.attach(revision_id, 1, 2, row, row+1, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL)
614
616
        revision_id.show()
615
617
 
616
618
        row += 1
617
 
        self.author_label = gtk.Label()
 
619
        self.author_label = Gtk.Label()
618
620
        self.author_label.set_alignment(1.0, 0.5)
619
621
        self.author_label.set_markup("<b>Author:</b>")
620
 
        self.table.attach(self.author_label, 0, 1, row, row+1, gtk.FILL, gtk.FILL)
 
622
        self.table.attach(self.author_label, 0, 1, row, row+1, Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL)
621
623
        self.author_label.show()
622
624
 
623
 
        self.author = gtk.Label()
624
 
        self.author.set_ellipsize(pango.ELLIPSIZE_END)
 
625
        self.author = Gtk.Label()
 
626
        self.author.set_ellipsize(Pango.EllipsizeMode.END)
625
627
        self.author.set_alignment(0.0, 0.5)
626
628
        self.author.set_selectable(True)
627
 
        self.table.attach(self.author, 1, 2, row, row+1, gtk.EXPAND | gtk.FILL, gtk.FILL)
 
629
        self.table.attach(self.author, 1, 2, row, row+1, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL)
628
630
        self.author.show()
629
631
        self.author.hide()
630
632
 
631
633
        row += 1
632
 
        label = gtk.Label()
 
634
        label = Gtk.Label()
633
635
        label.set_alignment(1.0, 0.5)
634
636
        label.set_markup("<b>Committer:</b>")
635
 
        self.table.attach(label, 0, 1, row, row+1, gtk.FILL, gtk.FILL)
 
637
        self.table.attach(label, 0, 1, row, row+1, Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL)
636
638
        label.show()
637
639
 
638
 
        self.committer = gtk.Label()
639
 
        self.committer.set_ellipsize(pango.ELLIPSIZE_END)
 
640
        self.committer = Gtk.Label()
 
641
        self.committer.set_ellipsize(Pango.EllipsizeMode.END)
640
642
        self.committer.set_alignment(0.0, 0.5)
641
643
        self.committer.set_selectable(True)
642
 
        self.table.attach(self.committer, 1, 2, row, row+1, gtk.EXPAND | gtk.FILL, gtk.FILL)
 
644
        self.table.attach(self.committer, 1, 2, row, row+1, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL)
643
645
        self.committer.show()
644
646
 
645
647
        row += 1
646
 
        self.branchnick_label = gtk.Label()
 
648
        self.branchnick_label = Gtk.Label()
647
649
        self.branchnick_label.set_alignment(1.0, 0.5)
648
650
        self.branchnick_label.set_markup("<b>Branch nick:</b>")
649
 
        self.table.attach(self.branchnick_label, 0, 1, row, row+1, gtk.FILL, gtk.FILL)
 
651
        self.table.attach(self.branchnick_label, 0, 1, row, row+1, Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL)
650
652
        self.branchnick_label.show()
651
653
 
652
 
        self.branchnick = gtk.Label()
653
 
        self.branchnick.set_ellipsize(pango.ELLIPSIZE_MIDDLE)
 
654
        self.branchnick = Gtk.Label()
 
655
        self.branchnick.set_ellipsize(Pango.EllipsizeMode.MIDDLE)
654
656
        self.branchnick.set_alignment(0.0, 0.5)
655
657
        self.branchnick.set_selectable(True)
656
 
        self.table.attach(self.branchnick, 1, 2, row, row+1, gtk.EXPAND | gtk.FILL, gtk.FILL)
 
658
        self.table.attach(self.branchnick, 1, 2, row, row+1, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL)
657
659
        self.branchnick.show()
658
660
 
659
661
        row += 1
660
 
        label = gtk.Label()
 
662
        label = Gtk.Label()
661
663
        label.set_alignment(1.0, 0.5)
662
664
        label.set_markup("<b>Timestamp:</b>")
663
 
        self.table.attach(label, 0, 1, row, row+1, gtk.FILL, gtk.FILL)
 
665
        self.table.attach(label, 0, 1, row, row+1, Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL)
664
666
        label.show()
665
667
 
666
 
        self.timestamp = gtk.Label()
667
 
        self.timestamp.set_ellipsize(pango.ELLIPSIZE_END)
 
668
        self.timestamp = Gtk.Label()
 
669
        self.timestamp.set_ellipsize(Pango.EllipsizeMode.END)
668
670
        self.timestamp.set_alignment(0.0, 0.5)
669
671
        self.timestamp.set_selectable(True)
670
 
        self.table.attach(self.timestamp, 1, 2, row, row+1, gtk.EXPAND | gtk.FILL, gtk.FILL)
 
672
        self.table.attach(self.timestamp, 1, 2, row, row+1, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL)
671
673
        self.timestamp.show()
672
674
 
673
675
        row += 1
674
 
        self.tags_label = gtk.Label()
 
676
        self.tags_label = Gtk.Label()
675
677
        self.tags_label.set_alignment(1.0, 0.5)
676
678
        self.tags_label.set_markup("<b>Tags:</b>")
677
 
        self.table.attach(self.tags_label, 0, 1, row, row+1, gtk.FILL, gtk.FILL)
 
679
        self.table.attach(self.tags_label, 0, 1, row, row+1, Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL)
678
680
        self.tags_label.show()
679
681
 
680
 
        self.tags_list = gtk.Label()
681
 
        self.tags_list.set_ellipsize(pango.ELLIPSIZE_MIDDLE)
 
682
        self.tags_list = Gtk.Label()
 
683
        self.tags_list.set_ellipsize(Pango.EllipsizeMode.MIDDLE)
682
684
        self.tags_list.set_alignment(0.0, 0.5)
683
 
        self.table.attach(self.tags_list, 1, 2, row, row+1, gtk.EXPAND | gtk.FILL, gtk.FILL)
 
685
        self.table.attach(self.tags_list, 1, 2, row, row+1, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL)
684
686
        self.tags_list.show()
685
687
 
686
688
        self.connect('notify::revision', self._add_tags)
687
689
 
688
 
        self.avatarsbox.show()
689
690
        return self.avatarsbox
690
691
    
691
692
    def _create_parents(self):
692
 
        hbox = gtk.HBox(True, 3)
 
693
        hbox = Gtk.HBox(homogeneous=True, spacing=3)
693
694
        
694
695
        self.parents_table = self._create_parents_or_children_table(
695
696
            "<b>Parents:</b>")
696
697
        self.parents_widgets = []
697
 
        hbox.pack_start(self.parents_table)
 
698
        hbox.pack_start(self.parents_table, True, True, 0)
698
699
 
699
700
        hbox.show()
700
701
        return hbox
701
702
 
702
703
    def _create_children(self):
703
 
        hbox = gtk.HBox(True, 3)
 
704
        hbox = Gtk.HBox(homogeneous=True, spacing=3)
704
705
        self.children_table = self._create_parents_or_children_table(
705
706
            "<b>Children:</b>")
706
707
        self.children_widgets = []
707
 
        hbox.pack_start(self.children_table)
 
708
        hbox.pack_start(self.children_table, True, True, 0)
708
709
        hbox.show()
709
710
        return hbox
710
711
        
711
712
    def _create_parents_or_children_table(self, text):
712
 
        table = gtk.Table(rows=1, columns=2)
 
713
        table = Gtk.Table(rows=1, columns=2)
713
714
        table.set_row_spacings(3)
714
715
        table.set_col_spacings(6)
715
716
        table.show()
716
717
 
717
 
        label = gtk.Label()
 
718
        label = Gtk.Label()
718
719
        label.set_markup(text)
719
 
        align = gtk.Alignment(0.0, 0.5)
 
720
        align = Gtk.Alignment.new(0.0, 0.5, 0, 0)
720
721
        align.add(label)
721
 
        table.attach(align, 0, 1, 0, 1, gtk.FILL, gtk.FILL)
 
722
        table.attach(align, 0, 1, 0, 1, Gtk.AttachOptions.FILL, Gtk.AttachOptions.FILL)
722
723
        label.show()
723
724
        align.show()
724
725
 
725
726
        return table
726
727
 
727
728
    def _create_message_view(self):
728
 
        msg_buffer = gtk.TextBuffer()
 
729
        msg_buffer = Gtk.TextBuffer()
729
730
        self.connect('notify::revision',
730
731
                lambda w, p: msg_buffer.set_text(self._revision.message))
731
 
        window = gtk.ScrolledWindow()
732
 
        window.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
733
 
        window.set_shadow_type(gtk.SHADOW_IN)
734
 
        tv = gtk.TextView(msg_buffer)
 
732
        window = Gtk.ScrolledWindow()
 
733
        window.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
 
734
        window.set_shadow_type(Gtk.ShadowType.IN)
 
735
        tv = Gtk.TextView(buffer=msg_buffer)
735
736
        tv.set_editable(False)
736
 
        tv.set_wrap_mode(gtk.WRAP_WORD)
 
737
        tv.set_wrap_mode(Gtk.WrapMode.WORD)
737
738
 
738
 
        tv.modify_font(pango.FontDescription("Monospace"))
 
739
        tv.modify_font(Pango.FontDescription("Monospace"))
739
740
        tv.show()
740
741
        window.add(tv)
741
742
        window.show()
744
745
    def _create_bugs(self):
745
746
        self.bugs_page = BugsTab()
746
747
        self.connect_after('notify::revision', self._update_bugs) 
747
 
        self.append_page(self.bugs_page, tab_label=gtk.Label('Bugs'))
 
748
        self.append_page(self.bugs_page, Gtk.Label(label='Bugs'))
748
749
 
749
750
    def _create_file_info_view(self):
750
 
        self.file_info_box = gtk.VBox(False, 6)
 
751
        self.file_info_box = Gtk.VBox(homogeneous=False, spacing=6)
751
752
        self.file_info_box.set_border_width(6)
752
 
        self.file_info_buffer = gtk.TextBuffer()
753
 
        window = gtk.ScrolledWindow()
754
 
        window.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
755
 
        window.set_shadow_type(gtk.SHADOW_IN)
756
 
        tv = gtk.TextView(self.file_info_buffer)
 
753
        self.file_info_buffer = Gtk.TextBuffer()
 
754
        window = Gtk.ScrolledWindow()
 
755
        window.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
 
756
        window.set_shadow_type(Gtk.ShadowType.IN)
 
757
        tv = Gtk.TextView(buffer=self.file_info_buffer)
757
758
        tv.set_editable(False)
758
 
        tv.set_wrap_mode(gtk.WRAP_WORD)
759
 
        tv.modify_font(pango.FontDescription("Monospace"))
 
759
        tv.set_wrap_mode(Gtk.WrapMode.WORD)
 
760
        tv.modify_font(Pango.FontDescription("Monospace"))
760
761
        tv.show()
761
762
        window.add(tv)
762
763
        window.show()
763
 
        self.file_info_box.pack_start(window)
 
764
        self.file_info_box.pack_start(window, True, True, 0)
764
765
        self.file_info_box.hide() # Only shown when there are per-file messages
765
 
        self.append_page(self.file_info_box, tab_label=gtk.Label('Per-file'))
 
766
        self.append_page(self.file_info_box, Gtk.Label(label='Per-file'))
766
767