diff --git a/test/gtk/htmltextview.py b/test/gtk/htmltextview.py index a49bc68970a64d232de7957dd049e0e09bf03919..6b296c7798342ef7110bde1e7bd1568eb3bf9dd7 100644 --- a/test/gtk/htmltextview.py +++ b/test/gtk/htmltextview.py @@ -1,17 +1,14 @@ -import sys -import os from unittest.mock import MagicMock -sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))) - -from gi.repository import Gtk, Gdk +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk from gajim.common import app from gajim.common import configpaths configpaths.init() from gajim.common import caps_cache -from gajim.gtk.util import get_cursor from gajim.conversation_textview import ConversationTextview from gajim.gui_interface import Interface @@ -20,168 +17,192 @@ app.plugin_manager = MagicMock() app.logger = MagicMock() app.interface = Interface() -change_cursor = None -htmlview = ConversationTextview(None) - - -def on_textview_motion_notify_event(widget, event): - """ - Change the cursor to a hand when we are over a mail or an url - """ - global change_cursor - w = htmlview.tv.get_window(Gtk.TextWindowType.TEXT) - device = w.get_display().get_device_manager().get_client_pointer() - pointer = w.get_device_position(device) - x = pointer[1] - y = pointer[2] - tags = htmlview.tv.get_iter_at_location(x, y)[1].get_tags() - if change_cursor: - w.set_cursor(get_cursor('XTERM')) - change_cursor = None - for tag in tags: - try: - if tag.is_anchor: - w.set_cursor(get_cursor('HAND2')) - change_cursor = tag - except Exception: - pass - -htmlview.tv.connect('motion_notify_event', on_textview_motion_notify_event) - -def handler(texttag, widget, event, iter_, kind): - if event.type == Gdk.EventType.BUTTON_PRESS: - pass - - -htmlview.print_real_text(None, xhtml='<div>' -'<span style="color: red; text-decoration:underline">Hello</span><br/>\n' - ' <img src="http://images.slashdot.org/topics/topicsoftware.gif"/><br/>\n' -'<span style="font-size: 500%; font-family: serif">World</span>\n' - '</div>\n') -htmlview.print_real_text(None, xhtml='<hr />') -htmlview.print_real_text(None, xhtml=''' -<body xmlns='http://www.w3.org/1999/xhtml'> - <p xmlns='http://www.w3.org/1999/xhtml'>a:b - <a href='http://google.com/' xmlns='http://www.w3.org/1999/xhtml'>Google - </a> - </p><br/> -</body>''') -htmlview.print_real_text(None, xhtml=''' - <body xmlns='http://www.w3.org/1999/xhtml'> - <p style='font-size:large'> - <span style='font-style: italic'>O - <span style='font-size:larger'>M</span>G</span>, - I'm <span style='color:green'>green</span> - with <span style='font-weight: bold'>envy</span>! - </p> - </body> - ''') -htmlview.print_real_text(None, xhtml='<hr />') -htmlview.print_real_text(None, xhtml=''' -<body xmlns='http://www.w3.org/1999/xhtml'> + +XHTML = [ + ''' + <div> + <span style="color: red; text-decoration:underline">Hello</span> + <br/>\n + <img src="http://images.slashdot.org/topics/topicsoftware.gif"/> + <br/>\n + <span style="font-size: 500%; font-family: serif">World</span>\n + </div> + \n + ''', + + ''' + <hr /> + ''', + + ''' + <body xmlns='http://www.w3.org/1999/xhtml'> + <p xmlns='http://www.w3.org/1999/xhtml'>a:b + <a href='http://google.com/' xmlns='http://www.w3.org/1999/xhtml'>Google</a> + </p> + <br/> + </body> + ''', + + ''' + <body xmlns='http://www.w3.org/1999/xhtml'> + <p style='font-size:large'> + <span style='font-style: italic'>O + <span style='font-size:larger'>M</span>G + </span>, I'm <span style='color:green'>green</span>with + <span style='font-weight: bold'>envy</span>! + </p> + </body> + ''', + + ''' + <hr /> + ''', + + ''' + <body xmlns='http://www.w3.org/1999/xhtml'> http://test.com/ testing links autolinkifying -</body> - ''') -htmlview.print_real_text(None, xhtml='<hr />') -htmlview.print_real_text(None, xhtml=''' -<body xmlns='http://www.w3.org/1999/xhtml'> - <p>As Emerson said in his essay <span style=' - font-style: italic; background-color:cyan'>Self-Reliance</span>:</p> - <p style='margin-left: 5px; margin-right: 2%'> - "A foolish consistency is the hobgoblin of little minds." - </p> -</body> - ''') -htmlview.print_real_text(None, xhtml='<hr />') -htmlview.print_real_text(None, xhtml=''' -<body xmlns='http://www.w3.org/1999/xhtml'> - <p style='text-align:center'> - Hey, are you licensed to <a href='http://www.jabber.org/'>Jabber</a>? - </p> - <p style='text-align:right'> - <img src='http://www.xmpp.org/images/psa-license.jpg' - alt='A License to Jabber' width='50%' height='50%'/> - </p> -</body> - ''') -htmlview.print_real_text(None, xhtml='<hr />') -htmlview.print_real_text(None, xhtml=''' -<body xmlns='http://www.w3.org/1999/xhtml'> - <ul style='background-color:rgb(120,140,100)'> - <li> One </li> - <li> Two </li> - <li> Three </li> - </ul><hr /><pre style="background-color:rgb(120,120,120)">def fac(n): -def faciter(n,acc): -if n==0: return acc -return faciter(n-1, acc*n) -if n<0: raise ValueError('Must be non-negative') -return faciter(n,1)</pre> -</body> - ''') -htmlview.print_real_text(None, xhtml='<hr />') -htmlview.print_real_text(None, xhtml=''' -<body xmlns='http://www.w3.org/1999/xhtml'> - <ol style='background-color:rgb(120,140,100)'> - <li> One </li> - <li> Two is nested: <ul style='background-color:rgb(200,200,100)'> - <li> One </li> - <li style='font-size:50%'> Two </li> - <li style='font-size:200%'> Three </li> - <li style='font-size:9999pt'> Four </li> - </ul></li> - <li> Three </li></ol> -</body> - ''') -htmlview.print_real_text(None, xhtml='<hr />') -htmlview.print_real_text(None, xhtml=''' -<body xmlns='http://www.w3.org/1999/xhtml'> -<p> - <strong> - <a href='xmpp:example@example.org'>xmpp link</a> - </strong>: </p> -<div xmlns='http://www.w3.org/1999/xhtml'> - <cite style='margin: 7px;' title='xmpp:examples@example.org'> - <p> - <strong>examples@example.org wrote:</strong> - </p> - <p>this cite - bla bla bla, smile- :-) …</p> - </cite> - <div> - <p>some text</p> - </div> -</div> -<p/> -<p>#232/1</p> -</body> -''') -htmlview.print_real_text(None, xhtml='<hr />') -htmlview.print_real_text(None, xhtml=''' -<body xmlns='http://www.w3.org/1999/xhtml'> -<br/> -<img src='data:image/png;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw\ -AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz\ -ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp\ -a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl\ -ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis\ -F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH\ -hhx4dbgYKAAA7' alt='Larry'/> -</body> -''') -htmlview.tv.show() -sw = Gtk.ScrolledWindow() -sw.set_property('hscrollbar-policy', Gtk.PolicyType.AUTOMATIC) -sw.set_property('vscrollbar-policy', Gtk.PolicyType.AUTOMATIC) -sw.set_property('border-width', 0) -sw.add(htmlview.tv) -sw.show() -frame = Gtk.Frame() -frame.set_shadow_type(Gtk.ShadowType.IN) -frame.show() -frame.add(sw) -win = Gtk.Window() -win.add(frame) -win.set_default_size(400, 300) + </body> + ''', + + ''' + <hr /> + ''', + + ''' + <body xmlns='http://www.w3.org/1999/xhtml'> + <p>As Emerson said in his essay <span style=' + font-style: italic; background-color:cyan'>Self-Reliance</span>:</p> + <p style='margin-left: 5px; margin-right: 2%'> + "A foolish consistency is the hobgoblin of little minds." + </p> + </body> + ''', + + ''' + <hr /> + ''', + + ''' + <body xmlns='http://www.w3.org/1999/xhtml'> + <p style='text-align:center'> + Hey, are you licensed to <a href='http://www.jabber.org/'>Jabber</a>? + </p> + <p style='text-align:right'> + <img src='http://www.xmpp.org/images/psa-license.jpg' + alt='A License to Jabber' width='50%' height='50%'/> + </p> + </body> + ''', + + ''' + <hr /> + ''', + + ''' + <body xmlns='http://www.w3.org/1999/xhtml'> + <ul style='background-color:rgb(120,140,100)'> + <li> One </li> + <li> Two </li> + <li> Three </li> + </ul> + <hr /> + <pre style="background-color:rgb(120,120,120)">def fac(n): + def faciter(n,acc): + if n==0: return acc + return faciter(n-1, acc*n) + if n<0: raise ValueError('Must be non-negative') + return faciter(n,1)</pre> + </body> + ''', + + ''' + <hr /> + ''', + + ''' + <body xmlns='http://www.w3.org/1999/xhtml'> + <ol style='background-color:rgb(120,140,100)'> + <li> One </li> + <li> + Two is nested: + <ul style='background-color:rgb(200,200,100)'> + <li> One </li> + <li style='font-size:50%'> Two </li> + <li style='font-size:200%'> Three </li> + <li style='font-size:9999pt'> Four </li> + </ul> + </li> + <li> Three </li> + </ol> + </body> + ''', + + ''' + <hr /> + ''', + + ''' + <body xmlns='http://www.w3.org/1999/xhtml'> + <p> + <strong> + <a href='xmpp:example@example.org'>xmpp link</a> + </strong>: + </p> + <div xmlns='http://www.w3.org/1999/xhtml'> + <cite style='margin: 7px;' title='xmpp:examples@example.org'> + <p> + <strong>examples@example.org wrote:</strong> + </p> + <p>this cite - bla bla bla, smile- :-) …</p> + </cite> + <div> + <p>some text</p> + </div> + </div> + <p/> + <p>#232/1</p> + </body> + ''', + + ''' + <hr /> + ''', + + ''' + <body xmlns='http://www.w3.org/1999/xhtml'> + <br/> + <img src='data:image/png;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw\ + AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz\ + ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp\ + a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl\ + ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis\ + F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH\ + hhx4dbgYKAAA7' alt='Larry'/> + </body> + ''', + +] + + +class TextviewWindow(Gtk.Window): + def __init__(self): + Gtk.Window.__init__(self, title="Textview Test") + self.set_default_size(600, 600) + + self._textview = ConversationTextview(None) + + scrolled = Gtk.ScrolledWindow() + scrolled.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) + scrolled.add(self._textview.tv) + self.add(scrolled) + self.show() + self._print_xhtml() + + def _print_xhtml(self): + for xhtml in XHTML: + self._textview.print_real_text(None, xhtml=xhtml) + +win = TextviewWindow() +win.connect("destroy", Gtk.main_quit) win.show_all() -win.connect('destroy', lambda win: Gtk.main_quit()) Gtk.main()