Don't switch markup to retrieve markup value
issue2769 review511003
This commit is contained in:
1 parent
1968eaeeaf
commit
eba6376ff5
2 files changed
+43
-47
No files matched your search
@@ -5,7 +5,6 @@ import gtk
|
||||
import pango
|
||||
import re
|
||||
from gettext import gettext as _
|
||||
from functools import wraps
|
||||
from textbox import TextBox
|
||||
from tryton.common import get_toplevel_window
|
||||
|
||||
@@ -62,21 +61,6 @@ def formalize_text_markup(text):
|
||||
return '\n'.join(lines)
|
||||
|
||||
|
||||
def active_markup(func):
|
||||
"Decorator to activate markup"
|
||||
@wraps(func)
|
||||
def wrapper(self, *args, **kwargs):
|
||||
active = self.tools['markup'].get_active()
|
||||
if not active:
|
||||
self.tools['markup'].set_active(True)
|
||||
try:
|
||||
return func(self, *args, **kwargs)
|
||||
finally:
|
||||
if not active:
|
||||
self.tools['markup'].set_active(False)
|
||||
return wrapper
|
||||
|
||||
|
||||
class RichTextBox(TextBox):
|
||||
'''Implements a rich text editor as widget to Tryton Client'''
|
||||
|
||||
@@ -187,7 +171,6 @@ class RichTextBox(TextBox):
|
||||
self.tools['markup'].set_tooltip_text(_('Change the markup text view'))
|
||||
# Packing widgets
|
||||
tool_bar = gtk.Toolbar()
|
||||
tool_bar.connect('enter-notify-event', self.enter)
|
||||
|
||||
tool_bar.set_style(gtk.TOOLBAR_ICONS)
|
||||
for tag in tags:
|
||||
@@ -196,19 +179,35 @@ class RichTextBox(TextBox):
|
||||
for local in (3, 6, 11, 14):
|
||||
tool_bar.insert(separator(), local)
|
||||
self.widget.pack_start(tool_bar, False)
|
||||
self.widget.connect('enter-notify-event', self.enter)
|
||||
|
||||
def get_value_markup(self):
|
||||
if self.tools['markup'].get_active():
|
||||
return self.get_value()
|
||||
else:
|
||||
return self.parser_to_text_markup(self.text_buffer)
|
||||
|
||||
@property
|
||||
@active_markup
|
||||
def modified(self):
|
||||
return super(RichTextBox, self).modified
|
||||
if self.record and self.field:
|
||||
return (formalize_text_markup(self.field.get_client(self.record) or
|
||||
'') != self.get_value_markup())
|
||||
return False
|
||||
|
||||
@active_markup
|
||||
def set_value(self, record, field):
|
||||
super(RichTextBox, self).set_value(record, field)
|
||||
if self.modified:
|
||||
field.set_client(record, self.get_value_markup())
|
||||
|
||||
@active_markup
|
||||
def display(self, record, field):
|
||||
super(RichTextBox, self).display(record, field)
|
||||
def set_buffer(self, value):
|
||||
if self.tools['markup'].get_active():
|
||||
super(RichTextBox, self).set_buffer(value)
|
||||
else:
|
||||
text_buffer, deserial = self.parser_from_text_markup(value)
|
||||
self.text_buffer.deserialize(self.text_buffer, deserial,
|
||||
self.text_buffer.get_start_iter(),
|
||||
text_buffer.serialize(text_buffer,
|
||||
"application/x-gtk-text-buffer-rich-text",
|
||||
text_buffer.get_start_iter(), text_buffer.get_end_iter()))
|
||||
|
||||
def _focus_out(self):
|
||||
if not self.focus_out:
|
||||
@@ -228,21 +227,24 @@ class RichTextBox(TextBox):
|
||||
if widget.get_active():
|
||||
for tag in tags:
|
||||
self.tools[tag].set_sensitive(False)
|
||||
self.parser_to_text_markup()
|
||||
text = self.parser_to_text_markup(self.text_buffer)
|
||||
self.start_tags.clear()
|
||||
self.end_tags.clear()
|
||||
else:
|
||||
for tag in tags:
|
||||
self.tools[tag].set_sensitive(True)
|
||||
self.parser_from_text_markup()
|
||||
text = self.text_buffer.get_text(self.text_buffer.get_start_iter(),
|
||||
self.text_buffer.get_end_iter())
|
||||
self.set_buffer(text)
|
||||
|
||||
def parser_to_text_markup(self):
|
||||
def parser_to_text_markup(self, buffer_):
|
||||
'''Parser from rich text view to text markup'''
|
||||
text_buffer = gtk.TextBuffer(self.table_tag)
|
||||
deserial = text_buffer.register_deserialize_tagset()
|
||||
text_buffer.deserialize(text_buffer, deserial,
|
||||
text_buffer.get_start_iter(), self.text_buffer.serialize(
|
||||
self.text_buffer, "application/x-gtk-text-buffer-rich-text",
|
||||
self.text_buffer.get_start_iter(),
|
||||
self.text_buffer.get_end_iter()))
|
||||
text_buffer.get_start_iter(), buffer_.serialize(
|
||||
buffer_, "application/x-gtk-text-buffer-rich-text",
|
||||
buffer_.get_start_iter(), buffer_.get_end_iter()))
|
||||
locks = {'bold': False, 'italic': False, 'underline': False,
|
||||
'left': False, 'right': False, 'center': False, 'fill': False}
|
||||
for prop in self.font_props:
|
||||
@@ -287,15 +289,11 @@ class RichTextBox(TextBox):
|
||||
break
|
||||
text = text_buffer.get_text(text_buffer.get_start_iter(),
|
||||
text_buffer.get_end_iter())
|
||||
self.start_tags.clear()
|
||||
self.end_tags.clear()
|
||||
self.text_buffer.set_text(formalize_text_markup(text))
|
||||
return formalize_text_markup(text)
|
||||
|
||||
def parser_from_text_markup(self):
|
||||
def parser_from_text_markup(self, text):
|
||||
'''Parser from text markup to rich text view'''
|
||||
text_buffer = gtk.TextBuffer(self.table_tag)
|
||||
text = self.text_buffer.get_text(self.text_buffer.get_start_iter(),
|
||||
self.text_buffer.get_end_iter())
|
||||
text_buffer.set_text(text)
|
||||
tags = []
|
||||
open_re = '<(?P<tag>\w{1,4})(?P<attrs> .+?)?>'
|
||||
@@ -346,11 +344,7 @@ class RichTextBox(TextBox):
|
||||
text_buffer.apply_tag_by_name(value, line, end)
|
||||
self.text_buffer.set_text('')
|
||||
deserial = self.text_buffer.register_deserialize_tagset()
|
||||
self.text_buffer.deserialize(self.text_buffer, deserial,
|
||||
self.text_buffer.get_start_iter(),
|
||||
text_buffer.serialize(text_buffer,
|
||||
"application/x-gtk-text-buffer-rich-text",
|
||||
text_buffer.get_start_iter(), text_buffer.get_end_iter()))
|
||||
return text_buffer, deserial
|
||||
|
||||
def gen_tag(self, val, tag):
|
||||
'''
|
||||
|
||||
@@ -133,16 +133,18 @@ class TextBox(WidgetInterface, TranslateMixin):
|
||||
def set_value(self, record, field):
|
||||
field.set_client(record, self.get_value())
|
||||
|
||||
def display(self, record, field):
|
||||
super(TextBox, self).display(record, field)
|
||||
value = field and field.get(record)
|
||||
if not value:
|
||||
value = ''
|
||||
def set_buffer(self, value):
|
||||
buf = self.textview.get_buffer()
|
||||
buf.delete(buf.get_start_iter(), buf.get_end_iter())
|
||||
iter_start = buf.get_start_iter()
|
||||
buf.insert(iter_start, value)
|
||||
|
||||
def display(self, record, field):
|
||||
super(TextBox, self).display(record, field)
|
||||
value = field and field.get(record)
|
||||
if not value:
|
||||
value = ''
|
||||
self.set_buffer(value)
|
||||
if gtkspell:
|
||||
spell = None
|
||||
try:
|
||||
|
||||
Reference in new issue
Block a user