initial commit
This commit is contained in:
170
gotify_tray/gui/SettingsDialog.py
Normal file
170
gotify_tray/gui/SettingsDialog.py
Normal file
@@ -0,0 +1,170 @@
|
||||
from gotify_tray.database import Settings
|
||||
from gotify_tray.utils import verify_server
|
||||
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||
|
||||
from .designs.widget_settings import Ui_Dialog
|
||||
from .themes import set_theme
|
||||
|
||||
settings = Settings("gotify-tray")
|
||||
|
||||
|
||||
class SettingsDialog(QtWidgets.QDialog, Ui_Dialog):
|
||||
def __init__(self, app: QtWidgets.QApplication):
|
||||
super(SettingsDialog, self).__init__()
|
||||
self.setupUi(self)
|
||||
self.setWindowTitle("Settings")
|
||||
|
||||
self.app = app
|
||||
|
||||
self.settings_changed = False
|
||||
self.changes_applied = False
|
||||
self.server_changed = False
|
||||
|
||||
self.initUI()
|
||||
|
||||
self.link_callbacks()
|
||||
|
||||
def initUI(self):
|
||||
self.buttonBox.button(
|
||||
QtWidgets.QDialogButtonBox.StandardButton.Apply
|
||||
).setEnabled(False)
|
||||
|
||||
# Fonts
|
||||
self.set_font_labels()
|
||||
|
||||
# Theme
|
||||
self.combo_theme.addItems(["default", "dark"])
|
||||
self.combo_theme.setCurrentText(settings.value("MainWindow/theme", type=str))
|
||||
|
||||
# Icons
|
||||
self.cb_icons_application.setChecked(
|
||||
settings.value("ApplicationModelItem/icon/show", type=bool)
|
||||
)
|
||||
self.cb_icons_message.setChecked(
|
||||
settings.value("MessageWidget/image/show", type=bool)
|
||||
)
|
||||
self.cb_icons_notification.setChecked(
|
||||
settings.value("tray/notifications/icon/show", type=bool)
|
||||
)
|
||||
|
||||
# Notifications
|
||||
self.spin_priority.setValue(
|
||||
settings.value("tray/notifications/priority", type=int)
|
||||
)
|
||||
|
||||
self.spin_duration.setValue(
|
||||
settings.value("tray/notifications/duration_ms", type=int)
|
||||
)
|
||||
|
||||
def set_font_labels(self):
|
||||
self.label_font_message_title.setText(
|
||||
settings.value("MessageWidget/font/title", type=str)
|
||||
)
|
||||
self.label_font_message_date.setText(
|
||||
settings.value("MessageWidget/font/date", type=str)
|
||||
)
|
||||
self.label_font_message_content.setText(
|
||||
settings.value("MessageWidget/font/content", type=str)
|
||||
)
|
||||
|
||||
def change_font_callback(self, key: str):
|
||||
font = QtGui.QFont()
|
||||
font.fromString(settings.value(key, type=str))
|
||||
font, accepted = QtWidgets.QFontDialog.getFont(font, self, "Select font")
|
||||
|
||||
if not accepted:
|
||||
return
|
||||
|
||||
self.settings_changed_callback()
|
||||
label: QtWidgets.QLabel = getattr(
|
||||
self, "label_font_message_" + key.split("/")[-1]
|
||||
)
|
||||
label.setText(font.toString())
|
||||
|
||||
def change_server_info_callback(self):
|
||||
self.server_changed = verify_server(force_new=True)
|
||||
|
||||
def settings_changed_callback(self, *args, **kwargs):
|
||||
self.settings_changed = True
|
||||
self.buttonBox.button(
|
||||
QtWidgets.QDialogButtonBox.StandardButton.Apply
|
||||
).setEnabled(True)
|
||||
|
||||
def reset_settings_callback(self):
|
||||
response = QtWidgets.QMessageBox.warning(
|
||||
self,
|
||||
"Are you sure?",
|
||||
"Reset all settings?",
|
||||
QtWidgets.QMessageBox.StandardButton.Ok
|
||||
| QtWidgets.QMessageBox.StandardButton.Cancel,
|
||||
defaultButton=QtWidgets.QMessageBox.StandardButton.Cancel,
|
||||
)
|
||||
if response == QtWidgets.QMessageBox.StandardButton.Ok:
|
||||
settings.clear()
|
||||
|
||||
def link_callbacks(self):
|
||||
self.buttonBox.button(
|
||||
QtWidgets.QDialogButtonBox.StandardButton.Apply
|
||||
).clicked.connect(self.apply_settings)
|
||||
|
||||
# Fonts
|
||||
self.pb_font_message_title.clicked.connect(
|
||||
lambda: self.change_font_callback("MessageWidget/font/title")
|
||||
)
|
||||
self.pb_font_message_date.clicked.connect(
|
||||
lambda: self.change_font_callback("MessageWidget/font/date")
|
||||
)
|
||||
self.pb_font_message_content.clicked.connect(
|
||||
lambda: self.change_font_callback("MessageWidget/font/content")
|
||||
)
|
||||
|
||||
# Theme
|
||||
self.combo_theme.currentTextChanged.connect(self.settings_changed_callback)
|
||||
|
||||
# Icons
|
||||
self.cb_icons_application.stateChanged.connect(self.settings_changed_callback)
|
||||
self.cb_icons_message.stateChanged.connect(self.settings_changed_callback)
|
||||
self.cb_icons_notification.stateChanged.connect(self.settings_changed_callback)
|
||||
|
||||
# Notifications
|
||||
self.spin_priority.valueChanged.connect(self.settings_changed_callback)
|
||||
self.spin_duration.valueChanged.connect(self.settings_changed_callback)
|
||||
|
||||
# Server info
|
||||
self.pb_change_server_info.clicked.connect(self.change_server_info_callback)
|
||||
|
||||
def apply_settings(self):
|
||||
# Fonts
|
||||
settings.setValue(
|
||||
"MessageWidget/font/title", self.label_font_message_title.text()
|
||||
)
|
||||
settings.setValue(
|
||||
"MessageWidget/font/date", self.label_font_message_date.text()
|
||||
)
|
||||
settings.setValue(
|
||||
"MessageWidget/font/content", self.label_font_message_content.text()
|
||||
)
|
||||
|
||||
# Theme
|
||||
settings.setValue("MainWindow/theme", self.combo_theme.currentText())
|
||||
set_theme(self.app, self.combo_theme.currentText())
|
||||
|
||||
# Icons
|
||||
settings.setValue(
|
||||
"ApplicationModelItem/icon/show", self.cb_icons_application.isChecked()
|
||||
)
|
||||
settings.setValue("MessageWidget/image/show", self.cb_icons_message.isChecked())
|
||||
settings.setValue(
|
||||
"tray/notifications/icon/show", self.cb_icons_notification.isChecked()
|
||||
)
|
||||
|
||||
# Priority
|
||||
settings.setValue("tray/notifications/priority", self.spin_priority.value())
|
||||
settings.setValue("tray/notifications/duration_ms", self.spin_duration.value())
|
||||
|
||||
self.settings_changed = False
|
||||
self.buttonBox.button(
|
||||
QtWidgets.QDialogButtonBox.StandardButton.Apply
|
||||
).setEnabled(False)
|
||||
|
||||
self.changes_applied = True
|
||||
Reference in New Issue
Block a user