display message priority colors

This commit is contained in:
dries.k
2022-12-28 18:21:43 +01:00
parent a9aac24085
commit e00c2d4ca1
7 changed files with 183 additions and 96 deletions

View File

@@ -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__":

View File

@@ -29,6 +29,9 @@
<property name="bottomMargin">
<number>0</number>
</property>
<property name="horizontalSpacing">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QFrame" name="frame">
<property name="frameShape">
@@ -41,72 +44,19 @@
<property name="sizeConstraint">
<enum>QLayout::SetMinimumSize</enum>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="4">
<widget class="QPushButton" name="pb_delete">
<property name="text">
<string/>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="2">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Maximum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label_title">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<pointsize>17</pointsize>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>Title</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_image">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="3" column="1" colspan="4">
<property name="verticalSpacing">
<number>3</number>
</property>
<item row="4" column="3" colspan="4">
<widget class="QLabel" name="label_message">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
@@ -133,7 +83,49 @@
</property>
</widget>
</item>
<item row="0" column="3">
<item row="1" column="6">
<widget class="QPushButton" name="pb_delete">
<property name="text">
<string/>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="4">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Maximum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="3" colspan="4">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
<height>2</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="5">
<widget class="QLabel" name="label_date">
<property name="font">
<font>
@@ -148,6 +140,52 @@
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QLabel" name="label_title">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<pointsize>17</pointsize>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>Title</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_image">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="0" column="1" rowspan="5">
<widget class="QLabel" name="label_priority">
<property name="maximumSize">
<size>
<width>6</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</widget>
</item>

View File

@@ -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"))

View File

@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>402</width>
<height>369</height>
<height>392</height>
</rect>
</property>
<property name="windowTitle">
@@ -157,6 +157,17 @@
</item>
</layout>
</item>
<item>
<widget class="QCheckBox" name="cb_priority_colors">
<property name="toolTip">
<string>4..7 -&gt; orange
8..10 -&gt; red</string>
</property>
<property name="text">
<string>Show message priority colors</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>

View File

@@ -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

View File

@@ -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)