102 lines
3.9 KiB
Python
102 lines
3.9 KiB
Python
from wrapper.toxcore_enums_and_consts import *
|
|
from PyQt5 import QtCore, QtGui, QtWidgets
|
|
from utils.util import *
|
|
from ui.widgets import DataLabel
|
|
|
|
|
|
class ContactItem(QtWidgets.QWidget):
|
|
"""
|
|
Contact in friends list
|
|
"""
|
|
|
|
def __init__(self, settings, parent=None, kind='friend'):
|
|
QtWidgets.QWidget.__init__(self, parent)
|
|
mode = settings['compact_mode']
|
|
self.setBaseSize(QtCore.QSize(250, 40 if mode else 70))
|
|
self.avatar_label = QtWidgets.QLabel(self)
|
|
size = 32 if mode else 64
|
|
self.avatar_label.setGeometry(QtCore.QRect(3, 4, size, size))
|
|
self.avatar_label.setScaledContents(False)
|
|
self.avatar_label.setAlignment(QtCore.Qt.AlignCenter)
|
|
self.name = DataLabel(self)
|
|
self.name.setGeometry(QtCore.QRect(50 if mode else 75, 3 if mode else 10, 150, 15 if mode else 25))
|
|
font = QtGui.QFont()
|
|
font.setFamily(settings['font'])
|
|
font.setPointSize(10 if mode else 12)
|
|
font.setBold(True)
|
|
self.name.setFont(font)
|
|
self.status_message = DataLabel(self)
|
|
self.status_message.setGeometry(QtCore.QRect(50 if mode else 75, 20 if mode else 30, 170, 15 if mode else 20))
|
|
font.setPointSize(10)
|
|
font.setBold(False)
|
|
self.status_message.setFont(font)
|
|
self.kind = DataLabel(self)
|
|
self.kind.setGeometry(QtCore.QRect(50 if mode else 75, 38 if mode else 48, 190, 15 if mode else 20))
|
|
font.setBold(True)
|
|
self.kind.setFont(font)
|
|
self.connection_status = StatusCircle(self)
|
|
self.connection_status.setGeometry(QtCore.QRect(230, -2 if mode else 5, 32, 32))
|
|
self.messages = UnreadMessagesCount(settings, self)
|
|
self.messages.setGeometry(QtCore.QRect(20 if mode else 52, 20 if mode else 50, 30, 20))
|
|
|
|
|
|
class StatusCircle(QtWidgets.QWidget):
|
|
"""
|
|
Connection status
|
|
"""
|
|
def __init__(self, parent):
|
|
QtWidgets.QWidget.__init__(self, parent)
|
|
self.setGeometry(0, 0, 32, 32)
|
|
self.label = QtWidgets.QLabel(self)
|
|
self.label.setGeometry(QtCore.QRect(0, 0, 32, 32))
|
|
self.unread = False
|
|
|
|
def update(self, status, unread_messages=None):
|
|
if unread_messages is None:
|
|
unread_messages = self.unread
|
|
else:
|
|
self.unread = unread_messages
|
|
if status == TOX_USER_STATUS['NONE']:
|
|
name = 'online'
|
|
elif status == TOX_USER_STATUS['AWAY']:
|
|
name = 'idle'
|
|
elif status == TOX_USER_STATUS['BUSY']:
|
|
name = 'busy'
|
|
else:
|
|
name = 'offline'
|
|
if unread_messages:
|
|
name += '_notification'
|
|
self.label.setGeometry(QtCore.QRect(0, 0, 32, 32))
|
|
else:
|
|
self.label.setGeometry(QtCore.QRect(2, 0, 32, 32))
|
|
pixmap = QtGui.QPixmap(join_path(get_images_directory(), '{}.png'.format(name)))
|
|
self.label.setPixmap(pixmap)
|
|
|
|
|
|
class UnreadMessagesCount(QtWidgets.QWidget):
|
|
|
|
def __init__(self, settings, parent=None):
|
|
super().__init__(parent)
|
|
self._settings = settings
|
|
self.resize(30, 20)
|
|
self.label = QtWidgets.QLabel(self)
|
|
self.label.setGeometry(QtCore.QRect(0, 0, 30, 20))
|
|
self.label.setVisible(False)
|
|
font = QtGui.QFont()
|
|
font.setFamily(settings['font'])
|
|
font.setPointSize(12)
|
|
font.setBold(True)
|
|
self.label.setFont(font)
|
|
self.label.setAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignCenter)
|
|
color = settings['unread_color']
|
|
self.label.setStyleSheet('QLabel { color: white; background-color: ' + color + '; border-radius: 10; }')
|
|
|
|
def update(self, messages_count):
|
|
color = self._settings['unread_color']
|
|
self.label.setStyleSheet('QLabel { color: white; background-color: ' + color + '; border-radius: 10; }')
|
|
if messages_count:
|
|
self.label.setVisible(True)
|
|
self.label.setText(str(messages_count))
|
|
else:
|
|
self.label.setVisible(False)
|