changeset baf8965e135f in tryton:default
details: https://hg.tryton.org/tryton?cmd=changeset;node=baf8965e135f
description:
        Add HTML editor

        issue8004
        review54481002
diffstat:

 CHANGELOG                                           |   1 +
 tryton/gui/window/view_form/view/form.py            |   3 +-
 tryton/gui/window/view_form/view/form_gtk/url.py    |  55 +++++++++++++++++++++
 tryton/gui/window/view_form/view/form_gtk/widget.py |   3 +
 4 files changed, 61 insertions(+), 1 deletions(-)

diffs (115 lines):

diff -r 1c799b2c601c -r baf8965e135f CHANGELOG
--- a/CHANGELOG Sat Mar 30 00:50:18 2019 +0100
+++ b/CHANGELOG Sat Mar 30 16:04:45 2019 +0100
@@ -1,3 +1,4 @@
+* Support HTML widget
 * Use locale format for data import and export
 * Add day view on calendar
 * Add CSV exports into print toolbar
diff -r 1c799b2c601c -r baf8965e135f tryton/gui/window/view_form/view/form.py
--- a/tryton/gui/window/view_form/view/form.py  Sat Mar 30 00:50:18 2019 +0100
+++ b/tryton/gui/window/view_form/view/form.py  Sat Mar 30 16:04:45 2019 +0100
@@ -25,7 +25,7 @@
 from .form_gtk.one2many import One2Many
 from .form_gtk.many2many import Many2Many
 from .form_gtk.many2one import Many2One
-from .form_gtk.url import Email, URL, CallTo, SIP
+from .form_gtk.url import Email, URL, CallTo, SIP, HTML
 from .form_gtk.image import Image as Image2
 from .form_gtk.progressbar import ProgressBar
 from .form_gtk.one2one import One2One
@@ -158,6 +158,7 @@
         'dict': DictWidget,
         'email': Email,
         'float': Float,
+        'html': HTML,
         'image': Image2,
         'integer': Integer,
         'many2many': Many2Many,
diff -r 1c799b2c601c -r baf8965e135f 
tryton/gui/window/view_form/view/form_gtk/url.py
--- a/tryton/gui/window/view_form/view/form_gtk/url.py  Sat Mar 30 00:50:18 
2019 +0100
+++ b/tryton/gui/window/view_form/view/form_gtk/url.py  Sat Mar 30 16:04:45 
2019 +0100
@@ -1,11 +1,20 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+import gettext
 import webbrowser
+from urllib.parse import urljoin, urlencode
 
 from gi.repository import Gtk
 
 from .char import Char
+from .widget import Widget, TranslateMixin
 import tryton.common as common
+from tryton.config import CONFIG
+from tryton.common.common import selection
+from tryton.common.underline import set_underline
+from tryton.rpc import CONNECTION
+
+_ = gettext.gettext
 
 
 class URL(Char):
@@ -111,3 +120,49 @@
         else:
             self.tooltips.set_tip(self.button, '')
             self.tooltips.disable()
+
+
+class HTML(Widget, TranslateMixin):
+    "HTML"
+
+    def __init__(self, view, attrs):
+        super().__init__(view, attrs)
+        self.widget = Gtk.HBox()
+        self.mnemonic_widget = self.button = Gtk.LinkButton()
+        self.button.set_label(set_underline(attrs['string']))
+        self.button.set_use_underline(True)
+        self.button.set_alignment(0, 0.5)
+        self.widget.pack_start(
+            self.button, expand=False, fill=False, padding=0)
+
+        if attrs.get('translate'):
+            self.widget.pack_start(
+                self.translate_button(), expand=False, fill=False, padding=0)
+
+    def uri(self, language=None):
+        if not self.record or self.record.id < 0:
+            uri = ''
+        else:
+            path = ['ir/html', self.model_name, str(self.record.id),
+                self.field_name]
+            params = {
+                'language': language or CONFIG['client.lang'],
+                'title': CONFIG['client.title'],
+                }
+            uri = urljoin(
+                CONNECTION.url + '/', '/'.join(path) + '?' + urlencode(params))
+        return uri
+
+    def display(self):
+        super().display()
+        self.button.set_uri(self.uri())
+
+    def _readonly_set(self, value):
+        super()._readonly_set(value)
+        self.button.set_sensitive(not value)
+
+    def translate_dialog(self, languages):
+        languages = {l['name']: l['code'] for l in languages}
+        result = selection(_('Choose a language'), languages)
+        if result:
+            webbrowser.open(self.uri(language=result[1]), new=2)
diff -r 1c799b2c601c -r baf8965e135f 
tryton/gui/window/view_form/view/form_gtk/widget.py
--- a/tryton/gui/window/view_form/view/form_gtk/widget.py       Sat Mar 30 
00:50:18 2019 +0100
+++ b/tryton/gui/window/view_form/view/form_gtk/widget.py       Sat Mar 30 
16:04:45 2019 +0100
@@ -302,6 +302,9 @@
         except RPCException:
             return
 
+        self.translate_dialog(languages)
+
+    def translate_dialog(self, languages):
         TranslateDialog(self, languages, self._readonly)
 
     def translate_widget(self):

Reply via email to