From 79370bc232b68b422c3314d53bdc51bfd9745c07 Mon Sep 17 00:00:00 2001 From: "dries.k" Date: Thu, 3 Nov 2022 17:42:22 +0100 Subject: [PATCH] add tray unread icon setting --- gotify_tray/database/default_settings.py | 1 + gotify_tray/gui/MainApplication.py | 9 +- gotify_tray/gui/designs/widget_settings.py | 46 ++++----- gotify_tray/gui/designs/widget_settings.ui | 105 +++++++++++---------- gotify_tray/gui/widgets/SettingsDialog.py | 6 ++ 5 files changed, 95 insertions(+), 72 deletions(-) diff --git a/gotify_tray/database/default_settings.py b/gotify_tray/database/default_settings.py index 80d9190..0dc83b3 100644 --- a/gotify_tray/database/default_settings.py +++ b/gotify_tray/database/default_settings.py @@ -16,6 +16,7 @@ DEFAULT_SETTINGS = { "tray/notifications/duration_ms": 5000, "tray/notifications/icon/show": True, "tray/notifications/click": True, + "tray/icon/unread": True, "watchdog/interval/s": 60, "MessageWidget/image/size": 33, "MainWindow/label/size": 25, diff --git a/gotify_tray/gui/MainApplication.py b/gotify_tray/gui/MainApplication.py index ffdb6dd..a710211 100644 --- a/gotify_tray/gui/MainApplication.py +++ b/gotify_tray/gui/MainApplication.py @@ -267,7 +267,10 @@ class MainApplication(QtWidgets.QApplication): self.add_message_to_model(message) # Change the tray icon to show there are unread notifications - if not self.main_window.isActiveWindow(): + if ( + settings.value("tray/icon/unread", type=bool) + and not self.main_window.isActiveWindow() + ): self.tray.set_icon_unread() # Show a notification @@ -340,7 +343,9 @@ class MainApplication(QtWidgets.QApplication): def settings_callback(self): settings_dialog = SettingsDialog() settings_dialog.quit_requested.connect(self.quit) - settings_dialog.theme_change_requested.connect(lambda theme: set_theme(self, theme)) + settings_dialog.theme_change_requested.connect( + lambda theme: set_theme(self, theme) + ) accepted = settings_dialog.exec() if accepted and settings_dialog.settings_changed: diff --git a/gotify_tray/gui/designs/widget_settings.py b/gotify_tray/gui/designs/widget_settings.py index e24d091..f622f6f 100644 --- a/gotify_tray/gui/designs/widget_settings.py +++ b/gotify_tray/gui/designs/widget_settings.py @@ -12,7 +12,7 @@ from PyQt6 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") - Dialog.resize(384, 346) + Dialog.resize(402, 369) self.gridLayout = QtWidgets.QGridLayout(Dialog) self.gridLayout.setObjectName("gridLayout") self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) @@ -30,26 +30,9 @@ class Ui_Dialog(object): self.groupBox_notifications.setObjectName("groupBox_notifications") self.gridLayout_4 = QtWidgets.QGridLayout(self.groupBox_notifications) self.gridLayout_4.setObjectName("gridLayout_4") - self.cb_notify = QtWidgets.QCheckBox(self.groupBox_notifications) - self.cb_notify.setObjectName("cb_notify") - self.gridLayout_4.addWidget(self.cb_notify, 2, 0, 1, 3) self.label_notification_duration = QtWidgets.QLabel(self.groupBox_notifications) self.label_notification_duration.setObjectName("label_notification_duration") self.gridLayout_4.addWidget(self.label_notification_duration, 1, 0, 1, 1) - self.label_notification_duration_ms = QtWidgets.QLabel(self.groupBox_notifications) - self.label_notification_duration_ms.setObjectName("label_notification_duration_ms") - self.gridLayout_4.addWidget(self.label_notification_duration_ms, 1, 2, 1, 1) - self.spin_priority = QtWidgets.QSpinBox(self.groupBox_notifications) - self.spin_priority.setMinimum(1) - self.spin_priority.setMaximum(10) - self.spin_priority.setProperty("value", 5) - self.spin_priority.setObjectName("spin_priority") - self.gridLayout_4.addWidget(self.spin_priority, 0, 1, 1, 1) - spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) - self.gridLayout_4.addItem(spacerItem, 0, 2, 1, 1) - self.label_notification_priority = QtWidgets.QLabel(self.groupBox_notifications) - self.label_notification_priority.setObjectName("label_notification_priority") - self.gridLayout_4.addWidget(self.label_notification_priority, 0, 0, 1, 1) self.spin_duration = QtWidgets.QSpinBox(self.groupBox_notifications) self.spin_duration.setMinimum(500) self.spin_duration.setMaximum(30000) @@ -59,6 +42,26 @@ class Ui_Dialog(object): self.cb_notification_click = QtWidgets.QCheckBox(self.groupBox_notifications) self.cb_notification_click.setObjectName("cb_notification_click") self.gridLayout_4.addWidget(self.cb_notification_click, 3, 0, 1, 3) + self.label_notification_duration_ms = QtWidgets.QLabel(self.groupBox_notifications) + self.label_notification_duration_ms.setObjectName("label_notification_duration_ms") + self.gridLayout_4.addWidget(self.label_notification_duration_ms, 1, 2, 1, 1) + spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) + self.gridLayout_4.addItem(spacerItem, 0, 2, 1, 1) + self.cb_notify = QtWidgets.QCheckBox(self.groupBox_notifications) + self.cb_notify.setObjectName("cb_notify") + self.gridLayout_4.addWidget(self.cb_notify, 2, 0, 1, 3) + self.spin_priority = QtWidgets.QSpinBox(self.groupBox_notifications) + self.spin_priority.setMinimum(1) + self.spin_priority.setMaximum(10) + self.spin_priority.setProperty("value", 5) + self.spin_priority.setObjectName("spin_priority") + self.gridLayout_4.addWidget(self.spin_priority, 0, 1, 1, 1) + self.label_notification_priority = QtWidgets.QLabel(self.groupBox_notifications) + self.label_notification_priority.setObjectName("label_notification_priority") + self.gridLayout_4.addWidget(self.label_notification_priority, 0, 0, 1, 1) + self.cb_tray_icon_unread = QtWidgets.QCheckBox(self.groupBox_notifications) + self.cb_tray_icon_unread.setObjectName("cb_tray_icon_unread") + self.gridLayout_4.addWidget(self.cb_tray_icon_unread, 4, 0, 1, 3) self.verticalLayout_4.addWidget(self.groupBox_notifications) self.groupBox_2 = QtWidgets.QGroupBox(self.tab_general) self.groupBox_2.setObjectName("groupBox_2") @@ -201,11 +204,12 @@ class Ui_Dialog(object): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "Dialog")) self.groupBox_notifications.setTitle(_translate("Dialog", "Notifications")) - self.cb_notify.setText(_translate("Dialog", "Show a notification for missed messages after reconnecting")) self.label_notification_duration.setText(_translate("Dialog", "Notification duration:")) - self.label_notification_duration_ms.setText(_translate("Dialog", "ms")) - self.label_notification_priority.setText(_translate("Dialog", "Minimum priority to show notifications:")) self.cb_notification_click.setText(_translate("Dialog", "Clicking the notification pop-up opens the main window")) + self.label_notification_duration_ms.setText(_translate("Dialog", "ms")) + self.cb_notify.setText(_translate("Dialog", "Show a notification for missed messages after reconnecting")) + self.label_notification_priority.setText(_translate("Dialog", "Minimum priority to show notifications:")) + self.cb_tray_icon_unread.setText(_translate("Dialog", "Change the tray icon color when there are unread notifications")) self.groupBox_2.setTitle(_translate("Dialog", "Interface")) self.label_theme.setText(_translate("Dialog", "Theme:")) self.groupBox_server_info.setTitle(_translate("Dialog", "Server info")) diff --git a/gotify_tray/gui/designs/widget_settings.ui b/gotify_tray/gui/designs/widget_settings.ui index f06b655..34d540b 100644 --- a/gotify_tray/gui/designs/widget_settings.ui +++ b/gotify_tray/gui/designs/widget_settings.ui @@ -6,8 +6,8 @@ 0 0 - 384 - 346 + 402 + 369 @@ -40,13 +40,6 @@ Notifications - - - - Show a notification for missed messages after reconnecting - - - @@ -54,46 +47,6 @@ - - - - ms - - - - - - - 1 - - - 10 - - - 5 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Minimum priority to show notifications: - - - @@ -114,6 +67,60 @@ + + + + ms + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Show a notification for missed messages after reconnecting + + + + + + + 1 + + + 10 + + + 5 + + + + + + + Minimum priority to show notifications: + + + + + + + Change the tray icon color when there are unread notifications + + + diff --git a/gotify_tray/gui/widgets/SettingsDialog.py b/gotify_tray/gui/widgets/SettingsDialog.py index 6a2a64f..371a84d 100644 --- a/gotify_tray/gui/widgets/SettingsDialog.py +++ b/gotify_tray/gui/widgets/SettingsDialog.py @@ -62,6 +62,10 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog): settings.value("tray/notifications/click", type=bool) ) + self.cb_tray_icon_unread.setChecked( + settings.value("tray/icon/unread", type=bool) + ) + # Theme self.combo_theme.addItems(get_themes()) self.combo_theme.setCurrentText(settings.value("theme", type=str)) @@ -168,6 +172,7 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog): self.spin_duration.valueChanged.connect(self.settings_changed_callback) self.cb_notify.stateChanged.connect(self.settings_changed_callback) self.cb_notification_click.stateChanged.connect(self.settings_changed_callback) + self.cb_tray_icon_unread.stateChanged.connect(self.settings_changed_callback) # Theme self.combo_theme.currentTextChanged.connect(self.settings_changed_callback) @@ -208,6 +213,7 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog): settings.setValue( "tray/notifications/click", self.cb_notification_click.isChecked() ) + settings.setValue("tray/icon/unread", self.cb_tray_icon_unread.isChecked()) # Theme current_theme = settings.value("theme", type=str)