Enforce text fields size

issue3879
review13281002
This commit is contained in:
Cédric Krier committed 2015-02-11 00:12:00 +01:00
1 parent 4c5f7521c7
commit f5454bf7f8
1 file changed
+30 -8
@@ -23,10 +23,7 @@ class TextBox(Widget, TranslateMixin):
self.scrolledwindow.set_shadow_type(gtk.SHADOW_ETCHED_IN)
self.scrolledwindow.set_size_request(-1, 80)
self.textview = gtk.TextView()
self.textview.set_wrap_mode(gtk.WRAP_WORD)
# TODO better tab solution
self.textview.set_accepts_tab(False)
self.textview = self._get_textview()
self.textview.connect('focus-out-event',
lambda x, y: self._focus_out())
self.textview.connect('key-press-event', self.send_modified)
@@ -43,6 +40,17 @@ class TextBox(Widget, TranslateMixin):
self.button = self.translate_button()
hbox.pack_start(self.button, False, False)
def _get_textview(self):
if self.attrs.get('size'):
textbuffer = TextBufferLimitSize(int(self.attrs['size']))
textview = gtk.TextView(textbuffer)
else:
textview = gtk.TextView()
textview.set_wrap_mode(gtk.WRAP_WORD)
# TODO better tab solution
textview.set_accepts_tab(False)
return textview
def translate_widget(self):
scrolledwindow = gtk.ScrolledWindow()
scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC,
@@ -50,10 +58,7 @@ class TextBox(Widget, TranslateMixin):
scrolledwindow.set_shadow_type(gtk.SHADOW_ETCHED_IN)
scrolledwindow.set_size_request(-1, 80)
textview = gtk.TextView()
textview.set_wrap_mode(gtk.WRAP_WORD)
textview.set_accepts_tab(False)
textview = self._get_textview()
scrolledwindow.add(textview)
return scrolledwindow
@@ -170,3 +175,20 @@ class TextBox(Widget, TranslateMixin):
elif spell:
spell.detach()
del spell
class TextBufferLimitSize(gtk.TextBuffer):
__gsignals__ = {
'insert-text': 'override',
}
def __init__(self, max_length):
super(TextBufferLimitSize, self).__init__()
self.max_length = max_length
def do_insert_text(self, iter, text, length):
free_chars = self.max_length - self.get_char_count()
# Slice operation needs an unicode string to work as expected
text = text.decode('utf-8')[0:free_chars].encode('utf-8')
length = len(text)
return gtk.TextBuffer.do_insert_text(self, iter, text, length)