diff --git a/src/contact.py b/src/contact.py index c957113..0691219 100644 --- a/src/contact.py +++ b/src/contact.py @@ -64,8 +64,8 @@ class Contact(object): return self._status def set_status(self, value): - self._widget.connection_status.data = self._status = value - self._widget.connection_status.repaint() + self._status = value + self._widget.connection_status.update(value) status = property(get_status, set_status) diff --git a/src/friend.py b/src/friend.py index 585a2bd..52e9ac7 100644 --- a/src/friend.py +++ b/src/friend.py @@ -188,12 +188,12 @@ class Friend(contact.Contact): return self._new_messages def inc_messages(self): - self._widget.connection_status.messages = self._new_messages + 1 - self._widget.connection_status.repaint() + self._new_messages += 1 + self._widget.connection_status.update(self.status, True) def reset_messages(self): - self._widget.connection_status.messages = self._new_messages = 0 - self._widget.connection_status.repaint() + self._new_messages = 0 + self._widget.connection_status.update(self.status, False) messages = property(get_messages) diff --git a/src/images/busy.png b/src/images/busy.png new file mode 100644 index 0000000..857b396 Binary files /dev/null and b/src/images/busy.png differ diff --git a/src/images/busy_notification.png b/src/images/busy_notification.png new file mode 100644 index 0000000..a01eb3f Binary files /dev/null and b/src/images/busy_notification.png differ diff --git a/src/images/idle.png b/src/images/idle.png new file mode 100644 index 0000000..2550926 Binary files /dev/null and b/src/images/idle.png differ diff --git a/src/images/idle_notification.png b/src/images/idle_notification.png new file mode 100644 index 0000000..29f3b49 Binary files /dev/null and b/src/images/idle_notification.png differ diff --git a/src/images/offline.png b/src/images/offline.png new file mode 100644 index 0000000..70a863b Binary files /dev/null and b/src/images/offline.png differ diff --git a/src/images/offline_notification.png b/src/images/offline_notification.png new file mode 100644 index 0000000..77006ed Binary files /dev/null and b/src/images/offline_notification.png differ diff --git a/src/images/online.png b/src/images/online.png new file mode 100644 index 0000000..1e5f40a Binary files /dev/null and b/src/images/online.png differ diff --git a/src/images/online_notification.png b/src/images/online_notification.png new file mode 100644 index 0000000..6e85b15 Binary files /dev/null and b/src/images/online_notification.png differ diff --git a/src/list_items.py b/src/list_items.py index 041d2d4..efdd6b3 100644 --- a/src/list_items.py +++ b/src/list_items.py @@ -140,6 +140,8 @@ class MessageItem(QtGui.QWidget): def mark_as_sent(self): if hasattr(self, 't'): self.time.setText(self.t) + self.time.repaint() + del self.t return True return False @@ -170,7 +172,7 @@ class ContactItem(QtGui.QWidget): self.status_message.setFont(font) self.status_message.setObjectName("status_message") self.connection_status = StatusCircle(self) - self.connection_status.setGeometry(QtCore.QRect(220, 5, 32, 32)) + self.connection_status.setGeometry(QtCore.QRect(243, 5, 32, 32)) self.connection_status.setObjectName("connection_status") @@ -178,40 +180,30 @@ class StatusCircle(QtGui.QWidget): """ Connection status """ - # TODO: rewrite def __init__(self, parent): QtGui.QWidget.__init__(self, parent) self.setGeometry(0, 0, 32, 32) - self.data = None - self.messages = False + self.label = QtGui.QLabel(self) + self.label.setGeometry(QtCore.QRect(0, 0, 32, 32)) + self.unread = False - def paintEvent(self, event): - paint = QtGui.QPainter() - paint.begin(self) - paint.setRenderHint(QtGui.QPainter.Antialiasing) - k = 16 - rad_x = rad_y = 5 - if self.data is None: - color = QtCore.Qt.transparent + def update(self, status, unread_messages=None): + if unread_messages is None: + unread_messages = self.unread else: - if self.data == TOX_USER_STATUS['NONE']: - color = QtGui.QColor(50, 205, 50) - elif self.data == TOX_USER_STATUS['AWAY']: - color = QtGui.QColor(255, 200, 50) - else: # self.data == TOX_USER_STATUS['BUSY']: - color = QtGui.QColor(255, 50, 0) - - paint.setPen(color) - center = QtCore.QPoint(k, k) - paint.setBrush(color) - paint.drawEllipse(center, rad_x, rad_y) - if self.messages: - if color == QtCore.Qt.transparent: - color = QtCore.Qt.darkRed - paint.setBrush(QtCore.Qt.transparent) - paint.setPen(color) - paint.drawEllipse(center, rad_x + 3, rad_y + 3) - paint.end() + 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' + pixmap = QtGui.QPixmap(curr_directory() + '/images/{}.png'.format(name)) + self.label.setPixmap(pixmap) class FileTransferItem(QtGui.QListWidget): @@ -376,6 +368,7 @@ class UnsentFileItem(FileTransferItem): super(UnsentFileItem, self).__init__(file_name, size, time, user, -1, -1, FILE_TRANSFER_MESSAGE_STATUS['PAUSED_BY_FRIEND'], width, parent) self._time = time + self.pb.setVisible(False) def cancel_transfer(self, *args): pr = profile.Profile.get_instance() diff --git a/src/mainscreen.py b/src/mainscreen.py index cde69e2..8e87bec 100644 --- a/src/mainscreen.py +++ b/src/mainscreen.py @@ -183,10 +183,7 @@ class MainWindow(QtGui.QMainWindow): Form.status_message.setFont(font) Form.status_message.setObjectName("status_message") self.connection_status = Form.connection_status = StatusCircle(Form) - Form.connection_status.setGeometry(QtCore.QRect(230, 29, 64, 64)) - Form.connection_status.setMinimumSize(QtCore.QSize(32, 32)) - Form.connection_status.setMaximumSize(QtCore.QSize(32, 32)) - Form.connection_status.setBaseSize(QtCore.QSize(32, 32)) + Form.connection_status.setGeometry(QtCore.QRect(245, 35, 32, 32)) self.avatar_label.mouseReleaseEvent = self.profile_settings self.status_message.mouseReleaseEvent = self.profile_settings self.name.mouseReleaseEvent = self.profile_settings