links in messages
This commit is contained in:
parent
51ec1af369
commit
cc8c5f7e99
3 changed files with 33 additions and 5 deletions
|
@ -49,5 +49,5 @@ Plugin's methods should not raise exceptions.
|
||||||
|
|
||||||
#Examples
|
#Examples
|
||||||
|
|
||||||
You can find example of a plugin in [official repo](https://github.com/ingvar1995/toxygen_plugins)
|
You can find examples in [official repo](https://github.com/ingvar1995/toxygen_plugins)
|
||||||
|
|
||||||
|
|
|
@ -8,9 +8,12 @@ from file_transfers import TOX_FILE_TRANSFER_STATE
|
||||||
from util import curr_directory, convert_time
|
from util import curr_directory, convert_time
|
||||||
from messages import FILE_TRANSFER_MESSAGE_STATUS
|
from messages import FILE_TRANSFER_MESSAGE_STATUS
|
||||||
from widgets import DataLabel, create_menu
|
from widgets import DataLabel, create_menu
|
||||||
|
import cgi
|
||||||
|
|
||||||
|
|
||||||
class MessageEdit(QtGui.QTextEdit):
|
class MessageEdit(QtGui.QTextBrowser):
|
||||||
|
|
||||||
|
# TODO: add anchor clicked with tox: support and unfocus links
|
||||||
|
|
||||||
def __init__(self, text, width, parent=None):
|
def __init__(self, text, width, parent=None):
|
||||||
super(MessageEdit, self).__init__(parent)
|
super(MessageEdit, self).__init__(parent)
|
||||||
|
@ -18,7 +21,8 @@ class MessageEdit(QtGui.QTextEdit):
|
||||||
self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
|
self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
|
||||||
self.setWordWrapMode(QtGui.QTextOption.WrapAtWordBoundaryOrAnywhere)
|
self.setWordWrapMode(QtGui.QTextOption.WrapAtWordBoundaryOrAnywhere)
|
||||||
self.document().setTextWidth(width)
|
self.document().setTextWidth(width)
|
||||||
self.setPlainText(text)
|
self.setOpenExternalLinks(True)
|
||||||
|
self.setTextWithLinks(text)
|
||||||
font = QtGui.QFont()
|
font = QtGui.QFont()
|
||||||
font.setFamily("Times New Roman")
|
font.setFamily("Times New Roman")
|
||||||
font.setPixelSize(14)
|
font.setPixelSize(14)
|
||||||
|
@ -28,10 +32,33 @@ class MessageEdit(QtGui.QTextEdit):
|
||||||
self.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse | QtCore.Qt.LinksAccessibleByMouse)
|
self.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse | QtCore.Qt.LinksAccessibleByMouse)
|
||||||
|
|
||||||
def contextMenuEvent(self, event):
|
def contextMenuEvent(self, event):
|
||||||
menu = create_menu(self.createStandardContextMenu())
|
menu = create_menu(self.createStandardContextMenu(event.pos()))
|
||||||
|
menu.popup(event.globalPos())
|
||||||
menu.exec_(event.globalPos())
|
menu.exec_(event.globalPos())
|
||||||
del menu
|
del menu
|
||||||
|
|
||||||
|
def setTextWithLinks(self, text):
|
||||||
|
text = cgi.escape(text)
|
||||||
|
exp = QtCore.QRegExp(
|
||||||
|
'('
|
||||||
|
'(?:\\b)((www\\.)|(http[s]?|ftp)://)'
|
||||||
|
'\\w+\\S+)'
|
||||||
|
'|(?:\\b)(file:///)([\\S| ]*)'
|
||||||
|
'|(?:\\b)(tox:[a-zA-Z\\d]{76}$)'
|
||||||
|
'|(?:\\b)(mailto:\\S+@\\S+\\.\\S+)'
|
||||||
|
'|(?:\\b)(tox:\\S+@\\S+)')
|
||||||
|
offset = exp.indexIn(text, 0)
|
||||||
|
while offset != -1:
|
||||||
|
url = exp.cap()
|
||||||
|
if exp.cap(2) == 'www.':
|
||||||
|
html = '<a href="http://{0}">{0}</a>'.format(url)
|
||||||
|
else:
|
||||||
|
html = '<a href="{0}">{0}</a>'.format(url)
|
||||||
|
text = text[:offset] + html + text[offset + len(exp.cap()):]
|
||||||
|
offset += len(html)
|
||||||
|
offset = exp.indexIn(text, offset)
|
||||||
|
self.setHtml(text)
|
||||||
|
|
||||||
|
|
||||||
class MessageItem(QtGui.QWidget):
|
class MessageItem(QtGui.QWidget):
|
||||||
"""
|
"""
|
||||||
|
@ -67,7 +94,7 @@ class MessageItem(QtGui.QWidget):
|
||||||
if message_type == TOX_MESSAGE_TYPE['ACTION']:
|
if message_type == TOX_MESSAGE_TYPE['ACTION']:
|
||||||
self.name.setStyleSheet("QLabel { color: #4169E1; }")
|
self.name.setStyleSheet("QLabel { color: #4169E1; }")
|
||||||
self.message.setStyleSheet("QTextEdit { color: #4169E1; }")
|
self.message.setStyleSheet("QTextEdit { color: #4169E1; }")
|
||||||
else:
|
else: # TODO: replace with regex
|
||||||
if text[0] == '>':
|
if text[0] == '>':
|
||||||
self.message.setStyleSheet("QTextEdit { color: green; }")
|
self.message.setStyleSheet("QTextEdit { color: green; }")
|
||||||
if text[-1] == '<':
|
if text[-1] == '<':
|
||||||
|
|
|
@ -351,6 +351,7 @@ class MainWindow(QtGui.QMainWindow):
|
||||||
|
|
||||||
self.account_name.setGeometry(QtCore.QRect(100, 30, self.width() - 520, 25))
|
self.account_name.setGeometry(QtCore.QRect(100, 30, self.width() - 520, 25))
|
||||||
self.account_status.setGeometry(QtCore.QRect(100, 50, self.width() - 520, 25))
|
self.account_status.setGeometry(QtCore.QRect(100, 50, self.width() - 520, 25))
|
||||||
|
self.messageEdit.setFocus()
|
||||||
self.profile.update()
|
self.profile.update()
|
||||||
|
|
||||||
def keyPressEvent(self, event):
|
def keyPressEvent(self, event):
|
||||||
|
|
Loading…
Reference in a new issue