Philipp Hörist pushed to branch master at gajim / gajim

Commits:

2 changed files:

Changes:

  • gajim/gtk/dataform.py
    ... ... @@ -22,6 +22,8 @@ from gajim.gtkgui_helpers import scale_pixbuf_from_data
    22 22
     from gajim.common import app
    
    23 23
     from gajim.common.i18n import _
    
    24 24
     
    
    25
    +from gajim.gtk.util import MultiLineLabel
    
    26
    +
    
    25 27
     
    
    26 28
     class DataFormWidget(Gtk.ScrolledWindow):
    
    27 29
     
    
    ... ... @@ -32,6 +34,7 @@ class DataFormWidget(Gtk.ScrolledWindow):
    32 34
             self.set_hexpand(True)
    
    33 35
             self.set_vexpand(True)
    
    34 36
             self.get_style_context().add_class('data-form-widget')
    
    37
    +        self.set_overlay_scrolling(False)
    
    35 38
     
    
    36 39
             self._form_node = form_node
    
    37 40
     
    
    ... ... @@ -91,7 +94,7 @@ class FormGrid(Gtk.Grid):
    91 94
             if form_node.title is not None:
    
    92 95
                 self.title = form_node.title
    
    93 96
                 self._add_row(Title(form_node.title))
    
    94
    -        if form_node.instructions is not None:
    
    97
    +        if form_node.instructions:
    
    95 98
                 self.instructions = form_node.instructions
    
    96 99
                 self._add_row(Instructions(form_node.instructions))
    
    97 100
     
    
    ... ... @@ -194,6 +197,7 @@ class Field:
    194 197
             self._field = field
    
    195 198
             self._form_grid = form_grid
    
    196 199
             self._validate_source_id = None
    
    200
    +        self._read_only = options.get('read-only', False)
    
    197 201
     
    
    198 202
             self._label = Gtk.Label(label=field.label)
    
    199 203
             self._label.set_single_line_mode(False)
    
    ... ... @@ -213,6 +217,10 @@ class Field:
    213 217
             self._warning_box.set_size_request(16, -1)
    
    214 218
             self._warning_box.add(self._warning_image)
    
    215 219
     
    
    220
    +    @property
    
    221
    +    def read_only(self):
    
    222
    +        return self._read_only
    
    223
    +
    
    216 224
         def add(self, form_grid, row_number):
    
    217 225
             form_grid.attach(self._label, 0, row_number, 1, 1)
    
    218 226
             form_grid.attach_next_to(self._widget,
    
    ... ... @@ -262,9 +270,14 @@ class BooleanField(Field):
    262 270
         def __init__(self, field, form_grid, options):
    
    263 271
             Field.__init__(self, field, form_grid, options)
    
    264 272
     
    
    265
    -        self._widget = Gtk.CheckButton()
    
    266
    -        self._widget.set_active(field.value)
    
    267
    -        self._widget.connect('toggled', self._toggled)
    
    273
    +        if self.read_only:
    
    274
    +            label = _('Yes') if field.value else _('No')
    
    275
    +            self._widget = Gtk.Label(label=label)
    
    276
    +            self._widget.set_xalign(0)
    
    277
    +        else:
    
    278
    +            self._widget = Gtk.CheckButton()
    
    279
    +            self._widget.set_active(field.value)
    
    280
    +            self._widget.connect('toggled', self._toggled)
    
    268 281
     
    
    269 282
         def _toggled(self, _widget):
    
    270 283
             self._field.value = self._widget.get_active()
    
    ... ... @@ -465,9 +478,13 @@ class TextSingleField(Field):
    465 478
         def __init__(self, field, form_grid, options):
    
    466 479
             Field.__init__(self, field, form_grid, options)
    
    467 480
     
    
    468
    -        self._widget = Gtk.Entry()
    
    469
    -        self._widget.set_text(field.value)
    
    470
    -        self._widget.connect('changed', self._changed)
    
    481
    +        if self.read_only:
    
    482
    +            self._widget = Gtk.Label(label=field.value)
    
    483
    +            self._widget.set_xalign(0)
    
    484
    +        else:
    
    485
    +            self._widget = Gtk.Entry()
    
    486
    +            self._widget.set_text(field.value)
    
    487
    +            self._widget.connect('changed', self._changed)
    
    471 488
     
    
    472 489
         def _changed(self, _widget):
    
    473 490
             self._field.value = self._widget.get_text()
    
    ... ... @@ -498,10 +515,16 @@ class TextMultiField(Field):
    498 515
             self._widget.set_min_content_height(100)
    
    499 516
             self._widget.set_max_content_height(300)
    
    500 517
     
    
    501
    -        self._textview = Gtk.TextView()
    
    502
    -        self._textview.set_wrap_mode(Gtk.WrapMode.WORD_CHAR)
    
    503
    -        self._textview.get_buffer().set_text(field.value)
    
    504
    -        self._textview.get_buffer().connect('changed', self._changed)
    
    518
    +        if self.read_only:
    
    519
    +            self._textview = MultiLineLabel(label=field.value)
    
    520
    +            self._textview.set_selectable(True)
    
    521
    +            self._textview.set_xalign(0)
    
    522
    +            self._textview.set_yalign(0)
    
    523
    +        else:
    
    524
    +            self._textview = Gtk.TextView()
    
    525
    +            self._textview.set_wrap_mode(Gtk.WrapMode.WORD_CHAR)
    
    526
    +            self._textview.get_buffer().set_text(field.value)
    
    527
    +            self._textview.get_buffer().connect('changed', self._changed)
    
    505 528
     
    
    506 529
             self._widget.add(self._textview)
    
    507 530
     
    

  • gajim/gtk/util.py
    ... ... @@ -31,6 +31,7 @@ from functools import wraps
    31 31
     from gi.repository import Gdk
    
    32 32
     from gi.repository import Gtk
    
    33 33
     from gi.repository import GLib
    
    34
    +from gi.repository import Pango
    
    34 35
     import cairo
    
    35 36
     
    
    36 37
     from gajim.common import app
    
    ... ... @@ -606,3 +607,19 @@ def format_fingerprint(fingerprint):
    606 607
             buf += '{0} '.format(fingerprint[w:w + wordsize])
    
    607 608
         buf = textwrap.fill(buf, width=36)
    
    608 609
         return buf.rstrip().upper()
    
    610
    +
    
    611
    +
    
    612
    +def find_widget(name, container):
    
    613
    +    for child in container.get_children():
    
    614
    +        if Gtk.Buildable.get_name(child) == name:
    
    615
    +            return child
    
    616
    +        if isinstance(child, Gtk.Box):
    
    617
    +            return find_widget(name, child)
    
    618
    +
    
    619
    +
    
    620
    +class MultiLineLabel(Gtk.Label):
    
    621
    +    def __init__(self, *args, **kwargs):
    
    622
    +        Gtk.Label.__init__(self, *args, **kwargs)
    
    623
    +        self.set_line_wrap(True)
    
    624
    +        self.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR)
    
    625
    +        self.set_single_line_mode(False)