Enforce text fields size
issue3879 review13281002
This commit is contained in:
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)
|
||||
Reference in new issue
Block a user