Add new icon and change color to orange for status "connecting"

This commit is contained in:
Sébastien Helleu 2021-11-14 09:13:35 +01:00
parent 72c425baea
commit 6958c2352f
4 changed files with 44 additions and 27 deletions

View file

@ -10,8 +10,8 @@ Files: weechat.png, bullet_green_8x8.png, bullet_yellow_8x8.png
Files: application-exit.png, dialog-close.png, dialog-ok-apply.png,
document-save.png, edit-find.png, help-about.png, network-connect.png,
network-disconnect.png, preferences-other.png
dialog-warning.png, document-save.png, edit-find.png, help-about.png,
network-connect.png, network-disconnect.png, preferences-other.png
Files come from Debian package "oxygen-icon-theme":

Binary file not shown.

After

Width:  |  Height:  |  Size: 596 B

View file

@ -45,6 +45,27 @@ _PROTO_SYNC_CMDS = [
''
]
STATUS_DISCONNECTED = 'disconnected'
STATUS_CONNECTING = 'connecting'
STATUS_CONNECTED = 'connected'
NETWORK_STATUS = {
'disconnected': {
'label': 'Disconnected',
'color': '#aa0000',
'icon': 'dialog-close.png',
},
'connecting': {
'label': 'Connecting…',
'color': '#ff7f00',
'icon': 'dialog-warning.png',
},
'connected': {
'label': 'Connected',
'color': 'green',
'icon': 'dialog-ok-apply.png',
},
}
class Network(QtCore.QObject):
"""I/O with WeeChat/relay."""
@ -54,9 +75,6 @@ class Network(QtCore.QObject):
def __init__(self, *args):
super().__init__(*args)
self.status_disconnected = 'disconnected'
self.status_connecting = 'connecting...'
self.status_connected = 'connected'
self._server = None
self._port = None
self._ssl = None
@ -71,7 +89,7 @@ class Network(QtCore.QObject):
def _socket_connected(self):
"""Slot: socket connected."""
self.statusChanged.emit(self.status_connected, None)
self.statusChanged.emit(STATUS_CONNECTED, None)
if self._password:
self.send_to_weechat('\n'.join(_PROTO_INIT_CMD + _PROTO_SYNC_CMDS)
% {'password': str(self._password),
@ -80,7 +98,7 @@ class Network(QtCore.QObject):
def _socket_error(self, error):
"""Slot: socket error."""
self.statusChanged.emit(
self.status_disconnected,
STATUS_DISCONNECTED,
'Failed, error: %s' % self._socket.errorString())
def _socket_read(self):
@ -111,7 +129,7 @@ class Network(QtCore.QObject):
self._port = None
self._ssl = None
self._password = ""
self.statusChanged.emit(self.status_disconnected, None)
self.statusChanged.emit(STATUS_DISCONNECTED, None)
def is_connected(self):
"""Return True if the socket is connected, False otherwise."""
@ -143,7 +161,7 @@ class Network(QtCore.QObject):
self._socket.connectToHostEncrypted(self._server, self._port)
else:
self._socket.connectToHost(self._server, self._port)
self.statusChanged.emit(self.status_connecting, "")
self.statusChanged.emit(STATUS_CONNECTING, "")
def disconnect_weechat(self):
"""Disconnect from WeeChat."""
@ -153,7 +171,7 @@ class Network(QtCore.QObject):
self.send_to_weechat('quit\n')
self._socket.waitForBytesWritten(1000)
else:
self.statusChanged.emit(self.status_disconnected, None)
self.statusChanged.emit(STATUS_DISCONNECTED, None)
self._socket.abort()
def send_to_weechat(self, message):
@ -168,14 +186,17 @@ class Network(QtCore.QObject):
"""Synchronize with WeeChat."""
self.send_to_weechat('\n'.join(_PROTO_SYNC_CMDS))
def status_label(self, status):
"""Return the label for a given status."""
return NETWORK_STATUS.get(status, {}).get('label', '')
def status_color(self, status):
"""Return the color for a given status."""
return NETWORK_STATUS.get(status, {}).get('color', 'black')
def status_icon(self, status):
"""Return the name of icon for a given status."""
icon = {
self.status_disconnected: 'dialog-close.png',
self.status_connecting: 'dialog-close.png',
self.status_connected: 'dialog-ok-apply.png',
}
return icon.get(status, '')
return NETWORK_STATUS.get(status, {}).get('icon', '')
def get_options(self):
"""Get connection options."""

View file

@ -41,7 +41,7 @@ from PySide6 import QtCore, QtGui, QtWidgets
from qweechat import config
from qweechat.weechat import protocol
from qweechat.network import Network
from qweechat.network import Network, STATUS_DISCONNECTED, NETWORK_STATUS
from qweechat.connection import ConnectionDialog
from qweechat.buffer import BufferListWidget, Buffer
from qweechat.debug import DebugDialog
@ -154,7 +154,7 @@ class MainWindow(QtWidgets.QMainWindow):
if hasattr(self.menu, 'setCornerWidget'):
self.menu.setCornerWidget(self.network_status,
QtCore.Qt.TopRightCorner)
self.network_status_set(self.network.status_disconnected)
self.network_status_set(STATUS_DISCONNECTED)
# toolbar
toolbar = self.addToolBar('toolBar')
@ -283,13 +283,9 @@ class MainWindow(QtWidgets.QMainWindow):
def network_status_set(self, status):
"""Set the network status."""
pal = self.network_status.palette()
if status == self.network.status_connected:
pal.setColor(self.network_status.foregroundRole(),
QtGui.QColor('green'))
else:
pal.setColor(self.network_status.foregroundRole(),
QtGui.QColor('#aa0000'))
ssl = ' (SSL)' if status != self.network.status_disconnected \
pal.setColor(self.network_status.foregroundRole(),
self.network.status_color(status))
ssl = ' (SSL)' if status != STATUS_DISCONNECTED \
and self.network.is_ssl() else ''
self.network_status.setPalette(pal)
icon = self.network.status_icon(status)
@ -297,10 +293,10 @@ class MainWindow(QtWidgets.QMainWindow):
self.network_status.setText(
'<img src="%s"> %s' %
(resource_filename(__name__, 'data/icons/%s' % icon),
status.capitalize() + ssl))
self.network.status_label(status) + ssl))
else:
self.network_status.setText(status.capitalize())
if status == self.network.status_disconnected:
if status == STATUS_DISCONNECTED:
self.actions['connect'].setEnabled(True)
self.actions['disconnect'].setEnabled(False)
else: