Better translation dialog box

Display the fuzzy value and mark which language is edited.

review243003
This commit is contained in:
Cédric Krier committed 2012-02-29 14:04:06 +01:00
1 parent 52bd81b773
commit 4dcb82b149
4 files changed
+50 -7

No files matched your search

+1
View File
@@ -1,3 +1,4 @@
* Better translation dialog box
* Add the richtext widget for WYSIWYG Editor on text fields
* Add a record pool to prefetch more records
* Add Time widget
@@ -62,6 +62,11 @@ class Char(WidgetInterface, TranslateMixin):
def translate_widget_get(widget):
return widget.get_text()
@staticmethod
def translate_widget_set_readonly(widget, value):
widget.set_editable(not value)
widget.props.sensitive = not value
def _color_widget(self):
if self.autocomplete:
return self.entry.get_child()
@@ -185,8 +185,10 @@ class TranslateDialog(NoModal):
'clicked', self.accel_group, gtk.keysyms.Return,
gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
tooltips = common.Tooltips()
self.widgets = {}
table = gtk.Table(len(languages), 2)
table = gtk.Table(len(languages), 4)
table.set_homogeneous(False)
table.set_col_spacings(3)
table.set_row_spacings(2)
@@ -202,6 +204,7 @@ class TranslateDialog(NoModal):
context = rpc.CONTEXT.copy()
context['language'] = language['code']
context['fuzzy_translation'] = False
try:
value = rpc.execute('model', self.widget.record.model_name,
'read', self.widget.record.id, [self.widget.field_name],
@@ -209,11 +212,31 @@ class TranslateDialog(NoModal):
except TrytonServerError, exception:
common.process_exception(exception)
return
context['fuzzy_translation'] = True
try:
fuzzy_value = rpc.execute('model',
self.widget.record.model_name, 'read',
self.widget.record.id, [self.widget.field_name],
context)[self.widget.field_name]
except TrytonServerError, exception:
common.process_exception(exception)
return
widget = self.widget.translate_widget()
self.widgets[language['code']] = (widget, value)
self.widget.translate_widget_set(widget, value)
self.widget.translate_widget_set(widget, fuzzy_value)
self.widget.translate_widget_set_readonly(widget, True)
table.attach(widget, 1, 2, i, i + 1)
editing = gtk.CheckButton()
editing.connect('toggled', self.editing_toggled, widget)
tooltips.set_tip(editing, _('Edit'))
table.attach(editing, 2, 3, i, i + 1, xoptions=gtk.FILL)
fuzzy = gtk.CheckButton()
fuzzy.set_active(value != fuzzy_value)
fuzzy.props.sensitive = False
tooltips.set_tip(fuzzy, _('Fuzzy'))
table.attach(fuzzy, 4, 5, i, i + 1, xoptions=gtk.FILL)
self.widgets[language['code']] = (widget, editing, fuzzy)
tooltips.enable()
vbox = gtk.VBox()
vbox.pack_start(table, False, True)
viewport = gtk.Viewport()
@@ -233,19 +256,23 @@ class TranslateDialog(NoModal):
self.win.show_all()
common.center_window(self.win, self.parent, self.sensible_widget)
def editing_toggled(self, editing, widget):
self.widget.translate_widget_set_readonly(widget,
not editing.get_active())
def response(self, win, response):
if response == gtk.RESPONSE_OK:
for code, widget in self.widgets.iteritems():
widget, old_value = widget
new_value = self.widget.translate_widget_get(widget)
if new_value == old_value:
widget, editing, fuzzy = widget
if not editing.get_active():
continue
value = self.widget.translate_widget_get(widget)
context = rpc.CONTEXT.copy()
context['language'] = code
context['fuzzy_translation'] = False
args = ('model', self.widget.record.model_name, 'write',
self.widget.record.id, {
self.widget.field_name: new_value,
self.widget.field_name: value,
}, context)
try:
rpc.execute(*args)
@@ -307,3 +334,7 @@ class TranslateMixin:
@staticmethod
def translate_widget_get(widget):
raise NotImplemented
@staticmethod
def translate_widget_set_readonly(widget, value):
raise NotImplemented
@@ -70,6 +70,12 @@ class TextBox(WidgetInterface, TranslateMixin):
buf = textview.get_buffer()
return buf.get_text(buf.get_start_iter(), buf.get_end_iter(), False)
@staticmethod
def translate_widget_set_readonly(widget, value):
textview = widget.get_child()
textview.set_editable(not value)
textview.props.sensitive = not value
def grab_focus(self):
return self.textview.grab_focus()