diff --git a/gotify_tray/database/default_settings.py b/gotify_tray/database/default_settings.py index 500ffd8..fa980e2 100644 --- a/gotify_tray/database/default_settings.py +++ b/gotify_tray/database/default_settings.py @@ -21,6 +21,7 @@ DEFAULT_SETTINGS = { "MessageWidget/image/size": 33, "MessageWidget/content_image/W_percentage": 1.0, "MessageWidget/content_image/H_percentage": 0.5, + "MessageWidget/priority_color": True, "MainWindow/label/size": 25, "MainWindow/button/size": 33, "MainWindow/application/icon/size": 40, diff --git a/gotify_tray/gui/designs/widget_message.py b/gotify_tray/gui/designs/widget_message.py index ce845fc..4509bd8 100644 --- a/gotify_tray/gui/designs/widget_message.py +++ b/gotify_tray/gui/designs/widget_message.py @@ -1,6 +1,6 @@ # Form implementation generated from reading ui file 'gotify_tray/gui/designs\widget_message.ui' # -# Created by: PyQt6 UI code generator 6.3.1 +# Created by: PyQt6 UI code generator 6.4.0 # # WARNING: Any manual changes made to this file will be lost when pyuic6 is # run again. Do not edit this file unless you know what you are doing. @@ -16,6 +16,7 @@ class Ui_Form(object): self.gridLayout = QtWidgets.QGridLayout(Form) self.gridLayout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinimumSize) self.gridLayout.setContentsMargins(0, 0, 0, 0) + self.gridLayout.setHorizontalSpacing(0) self.gridLayout.setObjectName("gridLayout") self.frame = QtWidgets.QFrame(Form) self.frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel) @@ -23,15 +24,39 @@ class Ui_Form(object): self.frame.setObjectName("frame") self.gridLayout_frame = QtWidgets.QGridLayout(self.frame) self.gridLayout_frame.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinimumSize) - self.gridLayout_frame.setContentsMargins(-1, 0, -1, 0) + self.gridLayout_frame.setContentsMargins(0, 0, -1, 0) + self.gridLayout_frame.setVerticalSpacing(3) self.gridLayout_frame.setObjectName("gridLayout_frame") + self.label_message = QtWidgets.QLabel(self.frame) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.MinimumExpanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.label_message.sizePolicy().hasHeightForWidth()) + self.label_message.setSizePolicy(sizePolicy) + font = QtGui.QFont() + font.setPointSize(11) + self.label_message.setFont(font) + self.label_message.setWordWrap(True) + self.label_message.setOpenExternalLinks(True) + self.label_message.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.LinksAccessibleByMouse|QtCore.Qt.TextInteractionFlag.TextSelectableByMouse) + self.label_message.setObjectName("label_message") + self.gridLayout_frame.addWidget(self.label_message, 4, 3, 1, 4) self.pb_delete = QtWidgets.QPushButton(self.frame) self.pb_delete.setText("") self.pb_delete.setFlat(True) self.pb_delete.setObjectName("pb_delete") - self.gridLayout_frame.addWidget(self.pb_delete, 0, 4, 1, 1) + self.gridLayout_frame.addWidget(self.pb_delete, 1, 6, 1, 1) spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Maximum, QtWidgets.QSizePolicy.Policy.Minimum) - self.gridLayout_frame.addItem(spacerItem, 0, 2, 1, 1) + self.gridLayout_frame.addItem(spacerItem, 1, 4, 1, 1) + spacerItem1 = QtWidgets.QSpacerItem(0, 2, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed) + self.gridLayout_frame.addItem(spacerItem1, 0, 3, 1, 4) + self.label_date = QtWidgets.QLabel(self.frame) + font = QtGui.QFont() + font.setPointSize(11) + self.label_date.setFont(font) + self.label_date.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.LinksAccessibleByMouse|QtCore.Qt.TextInteractionFlag.TextSelectableByMouse) + self.label_date.setObjectName("label_date") + self.gridLayout_frame.addWidget(self.label_date, 1, 5, 1, 1) self.label_title = QtWidgets.QLabel(self.frame) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) sizePolicy.setHorizontalStretch(0) @@ -46,32 +71,16 @@ class Ui_Form(object): self.label_title.setWordWrap(True) self.label_title.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.LinksAccessibleByMouse|QtCore.Qt.TextInteractionFlag.TextSelectableByMouse) self.label_title.setObjectName("label_title") - self.gridLayout_frame.addWidget(self.label_title, 0, 1, 1, 1) + self.gridLayout_frame.addWidget(self.label_title, 1, 3, 1, 1) self.label_image = QtWidgets.QLabel(self.frame) self.label_image.setText("") self.label_image.setObjectName("label_image") - self.gridLayout_frame.addWidget(self.label_image, 0, 0, 1, 1) - self.label_message = QtWidgets.QLabel(self.frame) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.MinimumExpanding) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.label_message.sizePolicy().hasHeightForWidth()) - self.label_message.setSizePolicy(sizePolicy) - font = QtGui.QFont() - font.setPointSize(11) - self.label_message.setFont(font) - self.label_message.setWordWrap(True) - self.label_message.setOpenExternalLinks(True) - self.label_message.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.LinksAccessibleByMouse|QtCore.Qt.TextInteractionFlag.TextSelectableByMouse) - self.label_message.setObjectName("label_message") - self.gridLayout_frame.addWidget(self.label_message, 3, 1, 1, 4) - self.label_date = QtWidgets.QLabel(self.frame) - font = QtGui.QFont() - font.setPointSize(11) - self.label_date.setFont(font) - self.label_date.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.LinksAccessibleByMouse|QtCore.Qt.TextInteractionFlag.TextSelectableByMouse) - self.label_date.setObjectName("label_date") - self.gridLayout_frame.addWidget(self.label_date, 0, 3, 1, 1) + self.gridLayout_frame.addWidget(self.label_image, 1, 2, 1, 1) + self.label_priority = QtWidgets.QLabel(self.frame) + self.label_priority.setMaximumSize(QtCore.QSize(6, 16777215)) + self.label_priority.setText("") + self.label_priority.setObjectName("label_priority") + self.gridLayout_frame.addWidget(self.label_priority, 0, 1, 5, 1) self.gridLayout.addWidget(self.frame, 0, 0, 1, 1) self.retranslateUi(Form) @@ -80,9 +89,9 @@ class Ui_Form(object): def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "Form")) - self.label_title.setText(_translate("Form", "Title")) self.label_message.setText(_translate("Form", "TextLabel")) self.label_date.setText(_translate("Form", "Date")) + self.label_title.setText(_translate("Form", "Title")) if __name__ == "__main__": diff --git a/gotify_tray/gui/designs/widget_message.ui b/gotify_tray/gui/designs/widget_message.ui index 74d453b..9f3f440 100644 --- a/gotify_tray/gui/designs/widget_message.ui +++ b/gotify_tray/gui/designs/widget_message.ui @@ -29,6 +29,9 @@ 0 + + 0 + @@ -41,72 +44,19 @@ QLayout::SetMinimumSize + + 0 + 0 0 - - - - - - - true - - - - - - - Qt::Horizontal - - - QSizePolicy::Maximum - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - - 17 - 50 - false - - - - Title - - - true - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - - - - - - - - - - + + 3 + + @@ -133,7 +83,49 @@ - + + + + + + + true + + + + + + + Qt::Horizontal + + + QSizePolicy::Maximum + + + + 40 + 20 + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 2 + + + + + @@ -148,6 +140,52 @@ + + + + + 0 + 0 + + + + + 17 + 50 + false + + + + Title + + + true + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + + + + + + + + + + + + 6 + 16777215 + + + + + + + diff --git a/gotify_tray/gui/designs/widget_settings.py b/gotify_tray/gui/designs/widget_settings.py index 97e7ac8..2869581 100644 --- a/gotify_tray/gui/designs/widget_settings.py +++ b/gotify_tray/gui/designs/widget_settings.py @@ -1,6 +1,6 @@ # Form implementation generated from reading ui file 'gotify_tray/gui/designs\widget_settings.ui' # -# Created by: PyQt6 UI code generator 6.3.0 +# Created by: PyQt6 UI code generator 6.4.0 # # WARNING: Any manual changes made to this file will be lost when pyuic6 is # run again. Do not edit this file unless you know what you are doing. @@ -12,7 +12,7 @@ from PyQt6 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") - Dialog.resize(402, 369) + Dialog.resize(402, 392) self.gridLayout = QtWidgets.QGridLayout(Dialog) self.gridLayout.setObjectName("gridLayout") self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) @@ -78,6 +78,9 @@ class Ui_Dialog(object): spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) self.horizontalLayout_3.addItem(spacerItem1) self.verticalLayout_2.addLayout(self.horizontalLayout_3) + self.cb_priority_colors = QtWidgets.QCheckBox(self.groupBox_2) + self.cb_priority_colors.setObjectName("cb_priority_colors") + self.verticalLayout_2.addWidget(self.cb_priority_colors) self.verticalLayout_4.addWidget(self.groupBox_2) self.groupBox_server_info = QtWidgets.QGroupBox(self.tab_general) self.groupBox_server_info.setObjectName("groupBox_server_info") @@ -234,6 +237,9 @@ class Ui_Dialog(object): 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.cb_priority_colors.setToolTip(_translate("Dialog", "4..7 -> orange\n" +"8..10 -> red")) + self.cb_priority_colors.setText(_translate("Dialog", "Show message priority colors")) self.groupBox_server_info.setTitle(_translate("Dialog", "Server info")) self.pb_change_server_info.setText(_translate("Dialog", "Change server info")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_general), _translate("Dialog", "General")) diff --git a/gotify_tray/gui/designs/widget_settings.ui b/gotify_tray/gui/designs/widget_settings.ui index fc75ed8..b21fa5c 100644 --- a/gotify_tray/gui/designs/widget_settings.ui +++ b/gotify_tray/gui/designs/widget_settings.ui @@ -7,7 +7,7 @@ 0 0 402 - 369 + 392 @@ -157,6 +157,17 @@ + + + + 4..7 -> orange +8..10 -> red + + + Show message priority colors + + + diff --git a/gotify_tray/gui/widgets/MessageWidget.py b/gotify_tray/gui/widgets/MessageWidget.py index 8916f28..4147e6f 100644 --- a/gotify_tray/gui/widgets/MessageWidget.py +++ b/gotify_tray/gui/widgets/MessageWidget.py @@ -34,6 +34,9 @@ class MessageWidget(QtWidgets.QWidget, Ui_Form): # Fonts self.set_fonts() + # Display the message priority as a color + self.set_priority_color(message.priority) + # Display message contents self.label_title.setText(message.title) self.label_date.setText(message.date.strftime("%Y-%m-%d, %H:%M")) @@ -68,7 +71,7 @@ class MessageWidget(QtWidgets.QWidget, Ui_Form): self.label_image.hide() # Set MessagesModelItem's size hint based on the size of this widget - self.gridLayout_frame.setContentsMargins(5, 5, 5, 5) + self.gridLayout_frame.setContentsMargins(0, 0, 5, 0) self.gridLayout.setContentsMargins(4, 5, 4, 0) self.adjustSize() size_hint = self.message_item.sizeHint() @@ -125,6 +128,16 @@ class MessageWidget(QtWidgets.QWidget, Ui_Form): self.label_message.setPixmap(pixmap) + def set_priority_color(self, priority: int): + if not settings.value("MessageWidget/priority_color", type=bool): + self.label_priority.setFixedWidth(0) # set width to 0 instead of hiding, so we still get the content margins + return + + if priority >= 4 and priority <= 7: + self.label_priority.setStyleSheet("background-color: rgba(230, 126, 34, 0.7);") + elif priority > 7: + self.label_priority.setStyleSheet("background-color: #e74c3c;") + def link_hovered_callback(self, link: str): if not settings.value("ImagePopup/enabled", type=bool): return diff --git a/gotify_tray/gui/widgets/SettingsDialog.py b/gotify_tray/gui/widgets/SettingsDialog.py index 97a005c..7dded76 100644 --- a/gotify_tray/gui/widgets/SettingsDialog.py +++ b/gotify_tray/gui/widgets/SettingsDialog.py @@ -71,9 +71,12 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog): settings.value("tray/icon/unread", type=bool) ) - # Theme + # Interface self.combo_theme.addItems(get_themes()) self.combo_theme.setCurrentText(settings.value("theme", type=str)) + self.cb_priority_colors.setChecked( + settings.value("MessageWidget/priority_color", type=bool) + ) # Logging self.combo_logging.addItems( @@ -108,6 +111,7 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog): "date": "2021-01-01T11:11:00.928224+01:00", "message": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin luctus.", "title": "Title", + "priority": 4, } ) ), @@ -209,8 +213,9 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog): self.cb_notification_click.stateChanged.connect(self.settings_changed_callback) self.cb_tray_icon_unread.stateChanged.connect(self.settings_changed_callback) - # Theme + # Interface self.combo_theme.currentTextChanged.connect(self.settings_changed_callback) + self.cb_priority_colors.stateChanged.connect(self.settings_changed_callback) # Server info self.pb_change_server_info.clicked.connect(self.change_server_info_callback) @@ -254,13 +259,17 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog): ) settings.setValue("tray/icon/unread", self.cb_tray_icon_unread.isChecked()) - # Theme + # Interface current_theme = settings.value("theme", type=str) selected_theme = self.combo_theme.currentText() if current_theme != selected_theme: settings.setValue("theme", selected_theme) self.theme_change_requested.emit(selected_theme) + settings.setValue( + "MessageWidget/priority_color", self.cb_priority_colors.isChecked() + ) + # Logging selected_level = self.combo_logging.currentText() settings.setValue("logging/level", selected_level)