Add option to make DataFormWidget read-only
This commit is contained in:
parent
ac6eae8965
commit
06848eaeaf
|
@ -22,6 +22,8 @@ from gajim.gtkgui_helpers import scale_pixbuf_from_data
|
|||
from gajim.common import app
|
||||
from gajim.common.i18n import _
|
||||
|
||||
from gajim.gtk.util import MultiLineLabel
|
||||
|
||||
|
||||
class DataFormWidget(Gtk.ScrolledWindow):
|
||||
|
||||
|
@ -32,6 +34,7 @@ class DataFormWidget(Gtk.ScrolledWindow):
|
|||
self.set_hexpand(True)
|
||||
self.set_vexpand(True)
|
||||
self.get_style_context().add_class('data-form-widget')
|
||||
self.set_overlay_scrolling(False)
|
||||
|
||||
self._form_node = form_node
|
||||
|
||||
|
@ -91,7 +94,7 @@ class FormGrid(Gtk.Grid):
|
|||
if form_node.title is not None:
|
||||
self.title = form_node.title
|
||||
self._add_row(Title(form_node.title))
|
||||
if form_node.instructions is not None:
|
||||
if form_node.instructions:
|
||||
self.instructions = form_node.instructions
|
||||
self._add_row(Instructions(form_node.instructions))
|
||||
|
||||
|
@ -194,6 +197,7 @@ class Field:
|
|||
self._field = field
|
||||
self._form_grid = form_grid
|
||||
self._validate_source_id = None
|
||||
self._read_only = options.get('read-only', False)
|
||||
|
||||
self._label = Gtk.Label(label=field.label)
|
||||
self._label.set_single_line_mode(False)
|
||||
|
@ -213,6 +217,10 @@ class Field:
|
|||
self._warning_box.set_size_request(16, -1)
|
||||
self._warning_box.add(self._warning_image)
|
||||
|
||||
@property
|
||||
def read_only(self):
|
||||
return self._read_only
|
||||
|
||||
def add(self, form_grid, row_number):
|
||||
form_grid.attach(self._label, 0, row_number, 1, 1)
|
||||
form_grid.attach_next_to(self._widget,
|
||||
|
@ -262,6 +270,11 @@ class BooleanField(Field):
|
|||
def __init__(self, field, form_grid, options):
|
||||
Field.__init__(self, field, form_grid, options)
|
||||
|
||||
if self.read_only:
|
||||
label = _('Yes') if field.value else _('No')
|
||||
self._widget = Gtk.Label(label=label)
|
||||
self._widget.set_xalign(0)
|
||||
else:
|
||||
self._widget = Gtk.CheckButton()
|
||||
self._widget.set_active(field.value)
|
||||
self._widget.connect('toggled', self._toggled)
|
||||
|
@ -465,6 +478,10 @@ class TextSingleField(Field):
|
|||
def __init__(self, field, form_grid, options):
|
||||
Field.__init__(self, field, form_grid, options)
|
||||
|
||||
if self.read_only:
|
||||
self._widget = Gtk.Label(label=field.value)
|
||||
self._widget.set_xalign(0)
|
||||
else:
|
||||
self._widget = Gtk.Entry()
|
||||
self._widget.set_text(field.value)
|
||||
self._widget.connect('changed', self._changed)
|
||||
|
@ -498,6 +515,12 @@ class TextMultiField(Field):
|
|||
self._widget.set_min_content_height(100)
|
||||
self._widget.set_max_content_height(300)
|
||||
|
||||
if self.read_only:
|
||||
self._textview = MultiLineLabel(label=field.value)
|
||||
self._textview.set_selectable(True)
|
||||
self._textview.set_xalign(0)
|
||||
self._textview.set_yalign(0)
|
||||
else:
|
||||
self._textview = Gtk.TextView()
|
||||
self._textview.set_wrap_mode(Gtk.WrapMode.WORD_CHAR)
|
||||
self._textview.get_buffer().set_text(field.value)
|
||||
|
|
|
@ -31,6 +31,7 @@ from functools import wraps
|
|||
from gi.repository import Gdk
|
||||
from gi.repository import Gtk
|
||||
from gi.repository import GLib
|
||||
from gi.repository import Pango
|
||||
import cairo
|
||||
|
||||
from gajim.common import app
|
||||
|
@ -606,3 +607,19 @@ def format_fingerprint(fingerprint):
|
|||
buf += '{0} '.format(fingerprint[w:w + wordsize])
|
||||
buf = textwrap.fill(buf, width=36)
|
||||
return buf.rstrip().upper()
|
||||
|
||||
|
||||
def find_widget(name, container):
|
||||
for child in container.get_children():
|
||||
if Gtk.Buildable.get_name(child) == name:
|
||||
return child
|
||||
if isinstance(child, Gtk.Box):
|
||||
return find_widget(name, child)
|
||||
|
||||
|
||||
class MultiLineLabel(Gtk.Label):
|
||||
def __init__(self, *args, **kwargs):
|
||||
Gtk.Label.__init__(self, *args, **kwargs)
|
||||
self.set_line_wrap(True)
|
||||
self.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR)
|
||||
self.set_single_line_mode(False)
|
||||
|
|
Loading…
Reference in New Issue