/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

Merge signatures tab.

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
import gobject
23
23
import subprocess
24
24
 
 
25
from bzrlib.plugins.gtk import icon_path
25
26
from bzrlib.osutils import format_date
26
27
from bzrlib.util.bencode import bdecode
27
28
 
54
55
        self.show_all()
55
56
 
56
57
 
 
58
class SignatureTab(gtk.VBox):
 
59
    def __init__(self):
 
60
        from gpg import GPGSubprocess
 
61
        self.gpg = GPGSubprocess()
 
62
        super(SignatureTab, self).__init__(False, 6)
 
63
        signature_box = gtk.Table(rows=1, columns=2)
 
64
        signature_box.set_col_spacing(0, 12)
 
65
 
 
66
        self.signature_image = gtk.Image()
 
67
        signature_box.attach(self.signature_image, 0, 1, 0, 1, gtk.FILL)
 
68
 
 
69
        self.signature_label = gtk.Label()
 
70
        signature_box.attach(self.signature_label, 1, 2, 0, 1, gtk.FILL)
 
71
 
 
72
        signature_info = gtk.Table(rows=1, columns=2)
 
73
        signature_info.set_row_spacings(6)
 
74
        signature_info.set_col_spacings(6)
 
75
 
 
76
        align = gtk.Alignment(1.0, 0.5)
 
77
        label = gtk.Label()
 
78
        label.set_markup("<b>Key Id:</b>")
 
79
        align.add(label)
 
80
        signature_info.attach(align, 0, 1, 0, 1, gtk.FILL, gtk.FILL)
 
81
 
 
82
        align = gtk.Alignment(0.0, 0.5)
 
83
        self.signature_key_id = gtk.Label()
 
84
        self.signature_key_id.set_selectable(True)
 
85
        align.add(self.signature_key_id)
 
86
        signature_info.attach(align, 1, 2, 0, 1, gtk.EXPAND | gtk.FILL, gtk.FILL)
 
87
 
 
88
        self.set_border_width(6)
 
89
        self.pack_start(signature_box, expand=False)
 
90
        self.pack_start(signature_info, expand=False)
 
91
        self.show_all()
 
92
 
 
93
    def show_no_signature(self):
 
94
        self.signature_key_id.set_text("")
 
95
        self.signature_image.set_from_file(icon_path("sign-unknown.png"))
 
96
        self.signature_label.set_text("This revision has not been signed.")
 
97
 
 
98
    def show_signature(self, text):
 
99
        signature = self.gpg.verify(text)
 
100
 
 
101
        if signature.key_id is not None:
 
102
            self.signature_key_id.set_text(signature.key_id)
 
103
 
 
104
        if signature.is_valid():
 
105
            self.signature_image.set_from_file(icon_path("sign-ok.png"))
 
106
            self.signature_label.set_text("This revision has been signed.")
 
107
        else:
 
108
            self.signature_image.set_from_file(icon_path("sign-bad.png"))
 
109
            self.signature_label.set_text("This revision has been signed, " + 
 
110
                    "but the authenticity of the signature cannot be verified.")
 
111
 
 
112
 
57
113
class RevisionView(gtk.Notebook):
58
114
    """ Custom widget for commit log details.
59
115
 
97
153
 
98
154
        self._create_general()
99
155
        self._create_relations()
 
156
        self._create_signature()
100
157
        self._create_file_info_view()
101
158
        self._create_bugs()
102
159
 
222
279
 
223
280
        self._add_tags()
224
281
 
 
282
    def _update_signature(self, widget, param):
 
283
        revid = self._revision.revision_id
 
284
 
 
285
        if self._branch.repository.has_signature_for_revision_id(revid):
 
286
            signature_text = self._branch.repository.get_signature_text(revid)
 
287
            self.signature_table.show_signature(signature_text)
 
288
        else:
 
289
            self.signature_table.show_no_signature()
 
290
 
225
291
    def set_children(self, children):
226
292
        self._add_parents_or_children(children,
227
293
                                      self.children_widgets,
235
301
        """Callback for when the go button for a parent is clicked."""
236
302
 
237
303
    def _add_tags(self, *args):
238
 
        if self._revision is None: return
 
304
        if self._revision is None:
 
305
            return
239
306
 
240
307
        if self._tagdict.has_key(self._revision.revision_id):
241
308
            tags = self._tagdict[self._revision.revision_id]
306
373
        self.append_page(vbox, tab_label=gtk.Label("Relations"))
307
374
        vbox.show()
308
375
 
 
376
    def _create_signature(self):
 
377
        try:
 
378
            self.signature_table = SignatureTab()
 
379
        except ValueError: # No GPG found
 
380
            self.signature_table = None
 
381
            return
 
382
        self.append_page(self.signature_table, tab_label=gtk.Label('Signature'))
 
383
        self.connect_after('notify::revision', self._update_signature)
 
384
 
309
385
    def _create_headers(self):
310
386
        self.table = gtk.Table(rows=5, columns=2)
311
387
        self.table.set_row_spacings(6)
413
489
        self.connect('notify::revision', self._add_tags)
414
490
 
415
491
        return self.table
416
 
 
417
492
    
418
493
    def _create_parents(self):
419
494
        hbox = gtk.HBox(True, 3)
461
536
        tv = gtk.TextView(msg_buffer)
462
537
        tv.set_editable(False)
463
538
        tv.set_wrap_mode(gtk.WRAP_WORD)
 
539
 
464
540
        tv.modify_font(pango.FontDescription("Monospace"))
465
541
        tv.show()
466
542
        window.add(tv)