Philipp Hörist pushed to branch mainwindow at gajim / gajim
Commits:
9813f847 by lovetox at 2021-04-30T10:45:52+02:00
Add start of MessageLabel impl
- - - - -
db76bece by lovetox at 2021-04-30T14:05:20+02:00
Add Links to MessageLabel
- - - - -
3 changed files:
- gajim/common/styling.py
- gajim/gtk/conversation/plain_widget.py
- gajim/gtk/util.py
Changes:
=====================================
gajim/common/styling.py
=====================================
@@ -3,6 +3,8 @@
from dataclasses import dataclass
from dataclasses import field
+from gi.repository import GLib
+
PRE = '`'
STRONG = '*'
STRIKE = '~'
@@ -41,23 +43,28 @@ class StyleObject:
text: str
+class URIMarkup:
+ def get_markup_string(self):
+ return f'<a href="{self.text}">{self.text}</a>'
+
+
@dataclass
-class Uri(StyleObject):
+class Uri(StyleObject, URIMarkup):
name: str = field(default='uri', init=False)
@dataclass
-class Address(StyleObject):
+class Address(StyleObject, URIMarkup):
name: str = field(default='address', init=False)
@dataclass
-class XMPPAddress(StyleObject):
+class XMPPAddress(StyleObject, URIMarkup):
name: str = field(default='xmppadr', init=False)
@dataclass
-class MailAddress(StyleObject):
+class MailAddress(StyleObject, URIMarkup):
name: str = field(default='mailadr', init=False)
@@ -135,7 +142,7 @@ def process(text, nested=False):
blocks = _parse_blocks(text, nested)
for block in blocks:
if isinstance(block, PlainBlock):
- offset = block.start
+ offset = 0
for line in block.text.splitlines(keepends=True):
block.spans += _parse_line(line, offset)
block.uris += _parse_uris(line, offset)
=====================================
gajim/gtk/conversation/plain_widget.py
=====================================
@@ -29,6 +29,7 @@
from gajim.common.i18n import _
from .util import get_cursor
+from .util import make_pango_attribute
URI_TAGS = ['uri', 'address', 'xmppadr', 'mailadr']
@@ -42,11 +43,38 @@ def __init__(self, account):
self._account = account
- self._textview = MessageTextview(self._account)
- self.add(self._textview)
+ # self._text_widget = MessageTextview(self._account)
+ self._text_widget = MessageLabel(self._account)
+ self.add(self._text_widget)
def add_content(self, block):
- self._textview.print_text_with_styling(block)
+ self._text_widget.print_text_with_styling(block)
+
+
+class MessageLabel(Gtk.Label):
+ def __init__(self, account):
+ Gtk.Label.__init__(self)
+ self.set_hexpand(True)
+ self.set_selectable(True)
+ self.set_line_wrap(True)
+ self.set_xalign(0)
+ self.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR)
+ self.set_track_visited_links(False)
+
+ self._account = account
+
+ def print_text_with_styling(self, block):
+ text = GLib.markup_escape_text(block.text.strip())
+ for uri in block.uris:
+ text = text.replace(uri.text, uri.get_markup_string())
+
+ attr_list = Pango.AttrList()
+ for span in block.spans:
+ attr = make_pango_attribute(span.name, span.start, span.end)
+ attr_list.insert(attr)
+
+ self.set_markup(text)
+ self.set_attributes(attr_list)
class MessageTextview(Gtk.TextView):
=====================================
gajim/gtk/util.py
=====================================
@@ -906,3 +906,21 @@ def refresh(self):
account_class = app.css_config.get_dynamic_class(self._account)
self.get_style_context().add_class(account_class)
self.set_tooltip_text(_('Account: %s') % label)
+
+
+def make_pango_attribute(name, start, end):
+ if name == 'strong':
+ attr = Pango.attr_weight_new(Pango.Weight.BOLD)
+ if name == 'strike':
+ attr = Pango.attr_strikethrough_new(True)
+ if name == 'emphasis':
+ attr = Pango.attr_style_new(Pango.Style.ITALIC)
+ if name == 'pre':
+ attr = Pango.attr_family_new('monospace')
+
+ else:
+ ValueError('unknown attribute %s', name)
+
+ attr.start_index = start
+ attr.end_index = end
+ return attr
View it on GitLab:
https://dev.gajim.org/gajim/gajim/-/compare/d74e7bf5d74c4dcfd85a27bb1694b3d16c03b271...db76bece42103e48577ca2cd961c1c9299d9c116
--
View it on GitLab:
https://dev.gajim.org/gajim/gajim/-/compare/d74e7bf5d74c4dcfd85a27bb1694b3d16c03b271...db76bece42103e48577ca2cd961c1c9299d9c116
You're receiving this email because of your account on dev.gajim.org.
_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits