Fix readonly on richtext and encoding issue

review525002
This commit is contained in:
Cédric Krier committed 2012-09-25 20:37:41 +02:00
1 parent 3e47c94097
commit 6ad0d2ddc1
2 files changed
+27 -10

No files matched your search

@@ -151,7 +151,8 @@ class RichTextBox(TextBox):
self.action_prop_font, tag)
self.tool_ids['markup'] = self.tools['markup'].connect('toggled',
self.edit_text_markup)
self.text_buffer.connect_after('insert-text', self.persist_style)
self.insert_text_id = self.text_buffer.connect_after('insert-text',
self.persist_style)
# Tooltip text
self.tools['bold'].set_tooltip_text(_('Change text to bold'))
self.tools['italic'].set_tooltip_text(_('Change text to italic'))
@@ -170,15 +171,15 @@ class RichTextBox(TextBox):
_('Change the background text'))
self.tools['markup'].set_tooltip_text(_('Change the markup text view'))
# Packing widgets
tool_bar = gtk.Toolbar()
self.tool_bar = gtk.Toolbar()
tool_bar.set_style(gtk.TOOLBAR_ICONS)
self.tool_bar.set_style(gtk.TOOLBAR_ICONS)
for tag in tags:
tool_bar.insert(self.tools[tag], -1)
self.tool_bar.insert(self.tools[tag], -1)
separator = gtk.SeparatorToolItem
for local in (3, 6, 11, 14):
tool_bar.insert(separator(), local)
self.widget.pack_start(tool_bar, False)
self.tool_bar.insert(separator(), local)
self.widget.pack_start(self.tool_bar, False)
self.widget.connect('enter-notify-event', self.enter)
def get_value_markup(self):
@@ -195,10 +196,18 @@ class RichTextBox(TextBox):
return False
def set_value(self, record, field):
# Popup for font_family and size should not trigger set_value from
# Form.leave otherwise the selection is lost
for tag in ('font_family', 'size'):
tool = self.tools[tag]
if (hasattr(tool.child.props, 'popup_shown')
and tool.child.props.popup_shown):
return
if self.modified:
field.set_client(record, self.get_value_markup())
def set_buffer(self, value):
self.text_buffer.handler_block(self.insert_text_id)
if self.tools['markup'].get_active():
super(RichTextBox, self).set_buffer(value)
else:
@@ -208,6 +217,7 @@ class RichTextBox(TextBox):
text_buffer.serialize(text_buffer,
"application/x-gtk-text-buffer-rich-text",
text_buffer.get_start_iter(), text_buffer.get_end_iter()))
self.text_buffer.handler_unblock(self.insert_text_id)
def _focus_out(self):
if not self.focus_out:
@@ -221,6 +231,12 @@ class RichTextBox(TextBox):
return
super(RichTextBox, self)._focus_out()
def _readonly_set(self, value):
super(RichTextBox, self)._readonly_set(value)
self.tool_bar.set_sensitive(not value)
if value and self.tools['markup'].get_active():
self.tools['markup'].set_active(False)
def edit_text_markup(self, widget):
'''on/off all buttons and call the appropriate parser'''
tags = [tag for tag in self.tools if tag != 'markup']
@@ -234,7 +250,7 @@ class RichTextBox(TextBox):
for tag in tags:
self.tools[tag].set_sensitive(True)
text = self.text_buffer.get_text(self.text_buffer.get_start_iter(),
self.text_buffer.get_end_iter())
self.text_buffer.get_end_iter()).decode('utf-8')
self.set_buffer(text)
def parser_to_text_markup(self, buffer_):
@@ -288,7 +304,7 @@ class RichTextBox(TextBox):
if not imark.forward_to_tag_toggle(None):
break
text = text_buffer.get_text(text_buffer.get_start_iter(),
text_buffer.get_end_iter())
text_buffer.get_end_iter()).decode('utf-8')
return formalize_text_markup(text)
def parser_from_text_markup(self, text):
@@ -68,7 +68,8 @@ class TextBox(WidgetInterface, TranslateMixin):
def translate_widget_get(widget):
textview = widget.get_child()
buf = textview.get_buffer()
return buf.get_text(buf.get_start_iter(), buf.get_end_iter(), False)
return buf.get_text(buf.get_start_iter(), buf.get_end_iter(),
False).decode('utf-8')
@staticmethod
def translate_widget_set_readonly(widget, value):
@@ -128,7 +129,7 @@ class TextBox(WidgetInterface, TranslateMixin):
buf = self.textview.get_buffer()
iter_start = buf.get_start_iter()
iter_end = buf.get_end_iter()
return buf.get_text(iter_start, iter_end, False)
return buf.get_text(iter_start, iter_end, False).decode('utf-8')
def set_value(self, record, field):
field.set_client(record, self.get_value())