From 0dbd17f119efe0c7f8fecea4d45502cad7cc41a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Fri, 29 Aug 2008 18:59:04 +0200 Subject: [PATCH] Handle spell attributes on textarea Add option for spell checking --- share/tryton/tryton.glade | 8 +++ tryton/config.py | 1 + tryton/gui/main.py | 2 + .../window/view_form/view/form_gtk/textbox.py | 56 +++++++++++++++++-- 4 files changed, 61 insertions(+), 6 deletions(-) diff --git a/share/tryton/tryton.glade b/share/tryton/tryton.glade index 91b1891015..b2cefdbd06 100644 --- a/share/tryton/tryton.glade +++ b/share/tryton/tryton.glade @@ -694,6 +694,14 @@ + + + True + Activate spell checking + True + + + True diff --git a/tryton/config.py b/tryton/config.py index 188aabc0fa..4295fb479e 100644 --- a/tryton/config.py +++ b/tryton/config.py @@ -73,6 +73,7 @@ class ConfigManager(object): 'client.form_tab': 'left', 'client.form_tab_orientation': 90, 'client.tree_width': True, + 'client.spellcheck': False, 'client.lang': 'en_US', 'client.actions': { 'odt': {0: find_path(['ooffice', 'ooffice2'], '%s'), diff --git a/tryton/gui/main.py b/tryton/gui/main.py index 461a711c19..0ddcab6702 100644 --- a/tryton/gui/main.py +++ b/tryton/gui/main.py @@ -168,6 +168,8 @@ class Main(object): 'opt_form_toolbar'), 'on_opt_tree_width_activate': (fnc_menuitem, 'client.tree_width', 'opt_tree_width'), + 'on_opt_spellcheck_activate': (fnc_menuitem, 'client.spellcheck', + 'opt_spellcheck'), } self.glade.get_widget('menubar_'+(CONFIG['client.toolbar'] or \ 'both')).set_active(True) 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 582f9c925d..6e898afaad 100644 --- a/tryton/gui/window/view_form/view/form_gtk/textbox.py +++ b/tryton/gui/window/view_form/view/form_gtk/textbox.py @@ -2,6 +2,13 @@ import gtk from interface import WidgetInterface import tryton.rpc as rpc +from tryton.config import CONFIG + +HAS_GTKSPELL = True +try: + import gtkspell +except: + HAS_GTKSPELL = False class TextBox(WidgetInterface): @@ -23,12 +30,6 @@ class TextBox(WidgetInterface): self.textview.set_accepts_tab(False) self.textview.connect('focus-in-event', lambda x, y: self._focus_in()) self.textview.connect('focus-out-event', lambda x, y: self._focus_out()) - try: - import gtkspell - gtkspell.Spell(self.textview).set_language( - rpc.CONTEXT.get('language', 'en_US')) - except: - pass self.scrolledwindow.add(self.textview) self.scrolledwindow.show_all() @@ -41,6 +42,27 @@ class TextBox(WidgetInterface): super(TextBox, self)._readonly_set(value) self.textview.set_editable(not value) self.textview.set_sensitive(not value) + if HAS_GTKSPELL: + spell = None + try: + spell = gtkspell.get_from_text_view(self.textview) + except: + pass + if spell: + spell.detach() + del spell + if not value and self.attrs.get('spell') \ + and CONFIG['client.spellcheck']: + language = self._view.model.expr_eval(self.attrs['spell']) + try: + spell = gtkspell.Spell(self.textview) + try: + spell.set_language(language) + except: + spell.detach() + del spell + except: + pass def _color_widget(self): return self.textview @@ -61,3 +83,25 @@ class TextBox(WidgetInterface): buf.delete(buf.get_start_iter(), buf.get_end_iter()) iter_start = buf.get_start_iter() buf.insert(iter_start, value) + + if HAS_GTKSPELL: + spell = None + try: + spell = gtkspell.get_from_text_view(self.textview) + except: + pass + if spell: + spell.detach() + del spell + + if self.attrs.get('spell') and CONFIG['client.spellcheck']: + language = self._view.model.expr_eval(self.attrs['spell']) + try: + spell = gtkspell.Spell(self.textview) + try: + spell.set_language(language) + except: + spell.detach() + del spell + except: + pass