diff --git a/Furious/Frozenlib/Constants.py b/Furious/Frozenlib/Constants.py index 8054db83..8ac9c1f9 100644 --- a/Furious/Frozenlib/Constants.py +++ b/Furious/Frozenlib/Constants.py @@ -118,6 +118,3 @@ NETWORK_CONNECTIVITY_TEST_URL = 'http://cp.cloudflare.com' NETWORK_SPEED_TEST_URL = ( f'http://speed.cloudflare.com/__down?during=download&bytes={95 * 1024 * 1024}' ) - -UNICODE_LARGE_RED_CIRCLE = '\U0001f534' -UNICODE_LARGE_GREEN_CIRCLE = '\U0001f7e2' diff --git a/Furious/Qt/AppStyleSheet.py b/Furious/Qt/AppStyleSheet.py index 843eacb7..e230da1c 100644 --- a/Furious/Qt/AppStyleSheet.py +++ b/Furious/Qt/AppStyleSheet.py @@ -47,6 +47,9 @@ class AppStyleSheet: 'input': '#FFFFFF', 'input_focus': '#F7FBFF', 'danger': '#D9514E', + 'danger_soft': '#FDECEC', + 'success': '#2F817D', + 'success_soft': '#DDF1EF', 'scroll_handle': '#B4C0CC', 'scroll_handle_hover': '#96A5B4', }, @@ -69,6 +72,9 @@ class AppStyleSheet: 'input': '#232427', 'input_focus': '#282D2F', 'danger': '#F07178', + 'danger_soft': '#4A2528', + 'success': '#4FB6B2', + 'success_soft': '#1F3A3A', 'scroll_handle': '#5B6067', 'scroll_handle_hover': '#70767F', }, @@ -472,6 +478,27 @@ class AppStyleSheet: background-color: {palette['panel']}; }} + QLabel#NetworkStateLabel {{ + min-height: 22px; + padding: 3px 10px; + border: 1px solid {palette['border']}; + border-radius: 5px; + background-color: {palette['raised']}; + color: {palette['muted']}; + }} + + QLabel#NetworkStateLabel[networkState="success"] {{ + border-left: 4px solid {palette['success']}; + background-color: {palette['success_soft']}; + color: {palette['text']}; + }} + + QLabel#NetworkStateLabel[networkState="failure"] {{ + border-left: 4px solid {palette['danger']}; + background-color: {palette['danger_soft']}; + color: {palette['text']}; + }} + QSplitter::handle {{ background-color: {palette['border']}; }} diff --git a/Furious/Window/AppMainWindow.py b/Furious/Window/AppMainWindow.py index f98e4bcd..fe7ad68d 100644 --- a/Furious/Window/AppMainWindow.py +++ b/Furious/Window/AppMainWindow.py @@ -435,6 +435,8 @@ class AppMainWindow(AppQMainWindow): # self.setStatusBar(QStatusBar(self)) self.networkState = AppQLabel(translatable=False) + self.networkState.setObjectName('NetworkStateLabel') + self.networkState.setVisible(False) self.statusBar().addPermanentWidget(self.networkState) @@ -501,24 +503,41 @@ class AppMainWindow(AppQMainWindow): def resetNetworkState(self): self.networkState.setText('') + self.networkState.setToolTip('') + self.networkState.setProperty('networkState', '') + self.networkState.setVisible(False) + + self.refreshNetworkStateStyle() def setNetworkState(self, success: bool, **kwargs): remark = Storage.Extras.UserServerRemark() - if success: - if remark: - self.networkState.setText(f'{remark} {UNICODE_LARGE_GREEN_CIRCLE}') - else: - self.resetNetworkState() - else: - errorString = kwargs.pop('errorString', '') + if not remark: + self.resetNetworkState() - if remark: - self.networkState.setText( - f'{remark} - {errorString} {UNICODE_LARGE_RED_CIRCLE}' - ) - else: - self.resetNetworkState() + return + + if success: + self.networkState.setText(f'{_("Network OK")} - {remark}') + self.networkState.setToolTip(remark) + self.networkState.setProperty('networkState', 'success') + + self.refreshNetworkStateStyle() + + return + + errorString = kwargs.pop('errorString', '') + + self.networkState.setText(f'{_("Network error")} - {remark}') + self.networkState.setToolTip(f'{remark}\n{errorString}'.strip()) + self.networkState.setProperty('networkState', 'failure') + + self.refreshNetworkStateStyle() + + def refreshNetworkStateStyle(self): + self.networkState.style().unpolish(self.networkState) + self.networkState.style().polish(self.networkState) + self.networkState.setVisible(bool(self.networkState.text())) @staticmethod def openApplicationFolder():