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):