From 4dcb82b149a585a79fe5850279b2880cb811f6fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Wed, 29 Feb 2012 14:04:06 +0100 Subject: [PATCH] Better translation dialog box Display the fuzzy value and mark which language is edited. review243003 --- CHANGELOG | 1 + .../window/view_form/view/form_gtk/char.py | 5 +++ .../view_form/view/form_gtk/interface.py | 45 ++++++++++++++++--- .../window/view_form/view/form_gtk/textbox.py | 6 +++ 4 files changed, 50 insertions(+), 7 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 0c73986c9d..ca4ea73f0a 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -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 diff --git a/tryton/gui/window/view_form/view/form_gtk/char.py b/tryton/gui/window/view_form/view/form_gtk/char.py index 21c5d1f27c..c999f2228a 100644 --- a/tryton/gui/window/view_form/view/form_gtk/char.py +++ b/tryton/gui/window/view_form/view/form_gtk/char.py @@ -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() diff --git a/tryton/gui/window/view_form/view/form_gtk/interface.py b/tryton/gui/window/view_form/view/form_gtk/interface.py index d2bb6ff198..7bbf0e571a 100644 --- a/tryton/gui/window/view_form/view/form_gtk/interface.py +++ b/tryton/gui/window/view_form/view/form_gtk/interface.py @@ -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 diff --git a/tryton/gui/window/view_form/view/form_gtk/textbox.py b/tryton/gui/window/view_form/view/form_gtk/textbox.py index aa81298c0d..1efbe6e891 100644 --- a/tryton/gui/window/view_form/view/form_gtk/textbox.py +++ b/tryton/gui/window/view_form/view/form_gtk/textbox.py @@ -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()