ui update - long names and statuses, messages update - long data and last message

This commit is contained in:
ingvar1995 2016-04-01 20:44:02 +03:00
parent dd8f0e07e0
commit c2aead6e06
4 changed files with 45 additions and 36 deletions

View file

@ -30,7 +30,7 @@ class MessageItem(QtGui.QWidget):
""" """
def __init__(self, text, time, user='', message_type=TOX_MESSAGE_TYPE['NORMAL'], parent=None): def __init__(self, text, time, user='', message_type=TOX_MESSAGE_TYPE['NORMAL'], parent=None):
QtGui.QWidget.__init__(self, parent) QtGui.QWidget.__init__(self, parent)
self.name = QtGui.QLabel(self) self.name = DataLabel(self)
self.name.setGeometry(QtCore.QRect(0, 2, 95, 20)) self.name.setGeometry(QtCore.QRect(0, 2, 95, 20))
self.name.setTextFormat(QtCore.Qt.PlainText) self.name.setTextFormat(QtCore.Qt.PlainText)
font = QtGui.QFont() font = QtGui.QFont()
@ -39,7 +39,7 @@ class MessageItem(QtGui.QWidget):
font.setBold(True) font.setBold(True)
self.name.setFont(font) self.name.setFont(font)
self.name.setObjectName("name") self.name.setObjectName("name")
self.name.setText(user if len(user) <= 14 else user[:11] + '...') self.name.setText(user)
self.time = QtGui.QLabel(self) self.time = QtGui.QLabel(self)
self.time.setGeometry(QtCore.QRect(parent.width() - 50, 0, 50, 25)) self.time.setGeometry(QtCore.QRect(parent.width() - 50, 0, 50, 25))
@ -65,6 +65,15 @@ class MessageItem(QtGui.QWidget):
self.message.setStyleSheet("QTextEdit { color: red; }") self.message.setStyleSheet("QTextEdit { color: red; }")
class DataLabel(QtGui.QLabel):
def paintEvent(self, event):
painter = QtGui.QPainter(self)
metrics = QtGui.QFontMetrics(self.font())
text = metrics.elidedText(self.text(), QtCore.Qt.ElideRight, self.width())
painter.drawText(self.rect(), self.alignment(), text)
class ContactItem(QtGui.QWidget): class ContactItem(QtGui.QWidget):
""" """
Contact in friends list Contact in friends list
@ -75,7 +84,7 @@ class ContactItem(QtGui.QWidget):
self.avatar_label = QtGui.QLabel(self) self.avatar_label = QtGui.QLabel(self)
self.avatar_label.setGeometry(QtCore.QRect(3, 3, 64, 64)) self.avatar_label.setGeometry(QtCore.QRect(3, 3, 64, 64))
self.avatar_label.setScaledContents(True) self.avatar_label.setScaledContents(True)
self.name = QtGui.QLabel(self) self.name = DataLabel(self)
self.name.setGeometry(QtCore.QRect(70, 10, 170, 25)) self.name.setGeometry(QtCore.QRect(70, 10, 170, 25))
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily("Times New Roman") font.setFamily("Times New Roman")
@ -83,14 +92,14 @@ class ContactItem(QtGui.QWidget):
font.setBold(True) font.setBold(True)
self.name.setFont(font) self.name.setFont(font)
self.name.setObjectName("name") self.name.setObjectName("name")
self.status_message = QtGui.QLabel(self) self.status_message = DataLabel(self)
self.status_message.setGeometry(QtCore.QRect(70, 30, 180, 20)) self.status_message.setGeometry(QtCore.QRect(70, 30, 180, 20))
font.setPointSize(10) font.setPointSize(10)
font.setBold(False) font.setBold(False)
self.status_message.setFont(font) self.status_message.setFont(font)
self.status_message.setObjectName("status_message") self.status_message.setObjectName("status_message")
self.connection_status = StatusCircle(self) self.connection_status = StatusCircle(self)
self.connection_status.setGeometry(QtCore.QRect(218, 5, 32, 32)) self.connection_status.setGeometry(QtCore.QRect(230, 5, 32, 32))
self.connection_status.setObjectName("connection_status") self.connection_status.setObjectName("connection_status")
@ -144,7 +153,7 @@ class FileTransferItem(QtGui.QListWidget):
else: else:
self.setStyleSheet('QWidget { background-color: #B40404; }') self.setStyleSheet('QWidget { background-color: #B40404; }')
self.name = QtGui.QLabel(self) self.name = DataLabel(self)
self.name.setGeometry(QtCore.QRect(1, 15, 95, 20)) self.name.setGeometry(QtCore.QRect(1, 15, 95, 20))
self.name.setTextFormat(QtCore.Qt.PlainText) self.name.setTextFormat(QtCore.Qt.PlainText)
font = QtGui.QFont() font = QtGui.QFont()
@ -152,7 +161,7 @@ class FileTransferItem(QtGui.QListWidget):
font.setPointSize(11) font.setPointSize(11)
font.setBold(True) font.setBold(True)
self.name.setFont(font) self.name.setFont(font)
self.name.setText(user if len(user) <= 14 else user[:11] + '...') self.name.setText(user)
self.name.setStyleSheet('QLabel { color: black; }') self.name.setStyleSheet('QLabel { color: black; }')
self.time = QtGui.QLabel(self) self.time = QtGui.QLabel(self)
@ -190,7 +199,7 @@ class FileTransferItem(QtGui.QListWidget):
if state < 2: if state < 2:
self.pb.setVisible(False) self.pb.setVisible(False)
self.file_name = QtGui.QLabel(self) self.file_name = DataLabel(self)
self.file_name.setGeometry(QtCore.QRect(210, 2, 230, 46)) self.file_name.setGeometry(QtCore.QRect(210, 2, 230, 46))
font.setPointSize(12) font.setPointSize(12)
self.file_name.setFont(font) self.file_name.setFont(font)
@ -202,7 +211,7 @@ class FileTransferItem(QtGui.QListWidget):
else: else:
file_size = '{}KB'.format(file_size) file_size = '{}KB'.format(file_size)
file_data = u'{} {}'.format(file_size, file_name) file_data = u'{} {}'.format(file_size, file_name)
self.file_name.setText(file_data if len(file_data) <= 27 else file_data[:24] + '...') self.file_name.setText(file_data)
self.file_name.setStyleSheet('QLabel { color: black; }') self.file_name.setStyleSheet('QLabel { color: black; }')
self.saved_name = file_name self.saved_name = file_name

View file

@ -18,6 +18,8 @@ class MessageArea(QtGui.QPlainTextEdit):
self.appendPlainText('') self.appendPlainText('')
else: else:
self.parent.send_message() self.parent.send_message()
elif event.key() == QtCore.Qt.Key_Up and not self.toPlainText():
self.appendPlainText(Profile.get_instance().get_last_message())
else: else:
super(self.__class__, self).keyPressEvent(event) super(self.__class__, self).keyPressEvent(event)
@ -148,7 +150,7 @@ class MainWindow(QtGui.QMainWindow):
self.avatar_label = Form.avatar_label = QtGui.QLabel(Form) self.avatar_label = Form.avatar_label = QtGui.QLabel(Form)
self.avatar_label.setGeometry(QtCore.QRect(10, 20, 64, 64)) self.avatar_label.setGeometry(QtCore.QRect(10, 20, 64, 64))
self.avatar_label.setScaledContents(True) self.avatar_label.setScaledContents(True)
self.name = Form.name = QtGui.QLabel(Form) self.name = Form.name = DataLabel(Form)
Form.name.setGeometry(QtCore.QRect(80, 30, 150, 25)) Form.name.setGeometry(QtCore.QRect(80, 30, 150, 25))
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily("Times New Roman") font.setFamily("Times New Roman")
@ -156,8 +158,8 @@ class MainWindow(QtGui.QMainWindow):
font.setBold(True) font.setBold(True)
Form.name.setFont(font) Form.name.setFont(font)
Form.name.setObjectName("name") Form.name.setObjectName("name")
self.status_message = Form.status_message = QtGui.QLabel(Form) self.status_message = Form.status_message = DataLabel(Form)
Form.status_message.setGeometry(QtCore.QRect(80, 60, 190, 20)) Form.status_message.setGeometry(QtCore.QRect(80, 60, 170, 20))
font.setPointSize(12) font.setPointSize(12)
font.setBold(False) font.setBold(False)
Form.status_message.setFont(font) Form.status_message.setFont(font)
@ -179,7 +181,7 @@ class MainWindow(QtGui.QMainWindow):
self.account_avatar = QtGui.QLabel(Form) self.account_avatar = QtGui.QLabel(Form)
self.account_avatar.setGeometry(QtCore.QRect(10, 20, 64, 64)) self.account_avatar.setGeometry(QtCore.QRect(10, 20, 64, 64))
self.account_avatar.setScaledContents(True) self.account_avatar.setScaledContents(True)
self.account_name = QtGui.QLabel(Form) self.account_name = DataLabel(Form)
self.account_name.setGeometry(QtCore.QRect(100, 30, 400, 25)) self.account_name.setGeometry(QtCore.QRect(100, 30, 400, 25))
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily("Times New Roman") font.setFamily("Times New Roman")
@ -187,7 +189,7 @@ class MainWindow(QtGui.QMainWindow):
font.setBold(True) font.setBold(True)
self.account_name.setFont(font) self.account_name.setFont(font)
self.account_name.setObjectName("account_name") self.account_name.setObjectName("account_name")
self.account_status = QtGui.QLabel(Form) self.account_status = DataLabel(Form)
self.account_status.setGeometry(QtCore.QRect(100, 50, 400, 25)) self.account_status.setGeometry(QtCore.QRect(100, 50, 400, 25))
font.setPointSize(12) font.setPointSize(12)
font.setBold(False) font.setBold(False)

View file

@ -26,6 +26,9 @@ class Message(object):
def get_type(self): def get_type(self):
return self._type return self._type
def get_owner(self):
return self._owner
class TextMessage(Message): class TextMessage(Message):
""" """

View file

@ -86,15 +86,8 @@ class Contact(object):
""" """
self._name, self._status_message = name, status_message self._name, self._status_message = name, status_message
self._status, self._widget = None, widget self._status, self._widget = None, widget
if type(self) is Profile: self._widget.name.setText(name)
self._widget.name.setText(name if len(name) <= 12 else name[:9] + '...') self._widget.status_message.setText(status_message)
else:
self._widget.name.setText(name if len(name) <= 20 else name[:17] + '...')
if type(self) is Profile:
text = self._status_message if len(self._status_message) <= 20 else self._status_message[:17] + '...'
else:
text = self._status_message if len(self._status_message) <= 30 else self._status_message[:27] + '...'
self._widget.status_message.setText(text)
self._tox_id = tox_id self._tox_id = tox_id
self.load_avatar() self.load_avatar()
@ -107,10 +100,7 @@ class Contact(object):
def set_name(self, value): def set_name(self, value):
self._name = value.decode('utf-8') self._name = value.decode('utf-8')
if type(self) is Profile: self._widget.name.setText(self._name)
self._widget.name.setText(self._name if len(self._name) <= 12 else self._name[:9] + '...')
else:
self._widget.name.setText(self._name if len(self._name) <= 20 else self._name[:17] + '...')
self._widget.name.repaint() self._widget.name.repaint()
name = property(get_name, set_name) name = property(get_name, set_name)
@ -124,11 +114,7 @@ class Contact(object):
def set_status_message(self, value): def set_status_message(self, value):
self._status_message = value.decode('utf-8') self._status_message = value.decode('utf-8')
if type(self) is Profile: self._widget.status_message.setText(self._status_message)
text = self._status_message if len(self._status_message) <= 20 else self._status_message[:17] + '...'
else:
text = self._status_message if len(self._status_message) <= 30 else self._status_message[:27] + '...'
self._widget.status_message.setText(text)
self._widget.status_message.repaint() self._widget.status_message.repaint()
status_message = property(get_status_message, set_status_message) status_message = property(get_status_message, set_status_message)
@ -254,6 +240,13 @@ class Friend(Contact):
if message.get_type() <= 1: if message.get_type() <= 1:
self._unsaved_messages += 1 self._unsaved_messages += 1
def get_last_message(self):
messages = filter(lambda x: x.get_type() <= 1 and not x.get_owner(), self._corr)
if messages:
return messages[-1].get_data()[0]
else:
return ''
def clear_corr(self): def clear_corr(self):
""" """
Clear messages list Clear messages list
@ -466,10 +459,9 @@ class Profile(Contact, Singleton):
self._messages.scrollToBottom() self._messages.scrollToBottom()
else: else:
friend = self._friends[self._active_friend] friend = self._friends[self._active_friend]
name = friend.name if len(friend.name) < 50 else friend.name[:47] + '...'
status_message = friend.status_message if len(friend.status_message) < 66 else friend.status_message[:63] + '...' self._screen.account_name.setText(friend.name)
self._screen.account_name.setText(name) self._screen.account_status.setText(friend.status_message)
self._screen.account_status.setText(status_message)
avatar_path = (Settings.get_default_path() + 'avatars/{}.png').format(friend.tox_id[:TOX_PUBLIC_KEY_SIZE * 2]) avatar_path = (Settings.get_default_path() + 'avatars/{}.png').format(friend.tox_id[:TOX_PUBLIC_KEY_SIZE * 2])
if not os.path.isfile(avatar_path): # load default image if not os.path.isfile(avatar_path): # load default image
avatar_path = curr_directory() + '/images/avatar.png' avatar_path = curr_directory() + '/images/avatar.png'
@ -484,6 +476,9 @@ class Profile(Contact, Singleton):
active_friend = property(get_active, set_active) active_friend = property(get_active, set_active)
def get_last_message(self):
return self._friends[self._active_friend].get_last_message()
def get_active_number(self): def get_active_number(self):
return self._friends[self._active_friend].number if self._active_friend + 1 else -1 return self._friends[self._active_friend].number if self._active_friend + 1 else -1