Automatic theme (#29)
* add "automatic" theme set the theme and icons based on the system theme * update the default icons based on system theme * update pyqt to 6.5.0 to get the colorSchemeChanged callback * rename style to theme * remove unused svg files for default theme * ServerInfoDialog: update feedback colors in dark mode
This commit is contained in:
@@ -26,7 +26,8 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
|
||||
activated = QtCore.pyqtSignal()
|
||||
|
||||
def __init__(
|
||||
self, application_model: ApplicationModel, messages_model: MessagesModel
|
||||
self, app: QtWidgets.QApplication,
|
||||
application_model: ApplicationModel, messages_model: MessagesModel
|
||||
):
|
||||
super(MainWindow, self).__init__()
|
||||
self.setupUi(self)
|
||||
@@ -35,6 +36,8 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
|
||||
|
||||
self.setWindowTitle(__title__)
|
||||
|
||||
self.app = app
|
||||
|
||||
self.application_model = application_model
|
||||
self.messages_model = messages_model
|
||||
|
||||
@@ -47,7 +50,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
|
||||
|
||||
# Do not collapse the message list
|
||||
self.splitter.setCollapsible(1, False)
|
||||
self.status_widget = StatusWidget()
|
||||
self.status_widget = StatusWidget(app)
|
||||
self.horizontalLayout.insertWidget(0, self.status_widget)
|
||||
|
||||
self.set_icons()
|
||||
@@ -70,8 +73,8 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
|
||||
|
||||
def set_icons(self):
|
||||
# Set button icons
|
||||
self.pb_refresh.setIcon(QtGui.QIcon(get_theme_file("refresh.svg")))
|
||||
self.pb_delete_all.setIcon(QtGui.QIcon(get_theme_file("trashcan.svg")))
|
||||
self.pb_refresh.setIcon(QtGui.QIcon(get_theme_file(self.app, "refresh.svg")))
|
||||
self.pb_delete_all.setIcon(QtGui.QIcon(get_theme_file(self.app, "trashcan.svg")))
|
||||
|
||||
# Resize the labels and icons
|
||||
size = settings.value("MainWindow/label/size", type=int)
|
||||
@@ -105,7 +108,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
|
||||
self, message_item: MessagesModelItem, image_path: str = ""
|
||||
):
|
||||
message_widget = MessageWidget(
|
||||
self.listView_messages, message_item, image_path=image_path
|
||||
self.app, self.listView_messages, message_item, image_path=image_path
|
||||
)
|
||||
self.listView_messages.setIndexWidget(
|
||||
self.messages_model.indexFromItem(message_item), message_widget
|
||||
|
||||
@@ -20,11 +20,13 @@ class MessageWidget(QtWidgets.QWidget, Ui_Form):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
app: QtWidgets.QApplication,
|
||||
parent: QtWidgets.QWidget,
|
||||
message_item: MessagesModelItem,
|
||||
image_path: str = "",
|
||||
):
|
||||
super(MessageWidget, self).__init__()
|
||||
self.app = app
|
||||
self.parent = parent
|
||||
self.setupUi(self)
|
||||
self.setAutoFillBackground(True)
|
||||
@@ -104,7 +106,7 @@ class MessageWidget(QtWidgets.QWidget, Ui_Form):
|
||||
self.label_message.setFont(font_content)
|
||||
|
||||
def set_icons(self):
|
||||
self.pb_delete.setIcon(QtGui.QIcon(get_theme_file("trashcan.svg")))
|
||||
self.pb_delete.setIcon(QtGui.QIcon(get_theme_file(self.app, "trashcan.svg")))
|
||||
self.pb_delete.setIconSize(QtCore.QSize(24, 24))
|
||||
|
||||
def set_message_image(self, filename: str):
|
||||
|
||||
@@ -47,10 +47,18 @@ class ServerInfoDialog(QtWidgets.QDialog, Ui_Dialog):
|
||||
self.task.incorrect_url.connect(self.incorrect_url_callback)
|
||||
self.task.start()
|
||||
|
||||
def update_widget_state(self, widget: QtWidgets.QWidget, state: str):
|
||||
widget.setProperty("state", state)
|
||||
widget.style().unpolish(widget)
|
||||
widget.style().polish(widget)
|
||||
widget.update()
|
||||
|
||||
def server_info_success(self, version: GotifyVersionModel):
|
||||
self.pb_test.setEnabled(True)
|
||||
self.label_server_info.setText(f"Version: {version.version}")
|
||||
self.pb_test.setStyleSheet("background-color: rgba(0, 255, 0, 100);")
|
||||
self.update_widget_state(self.pb_test, "success")
|
||||
self.update_widget_state(self.line_token, "success")
|
||||
self.update_widget_state(self.line_url, "success")
|
||||
self.buttonBox.button(QtWidgets.QDialogButtonBox.StandardButton.Ok).setEnabled(
|
||||
True
|
||||
)
|
||||
@@ -59,15 +67,17 @@ class ServerInfoDialog(QtWidgets.QDialog, Ui_Dialog):
|
||||
def incorrect_token_callback(self, version: GotifyVersionModel):
|
||||
self.pb_test.setEnabled(True)
|
||||
self.label_server_info.setText(f"Version: {version.version}")
|
||||
self.pb_test.setStyleSheet("background-color: rgba(255, 0, 0, 100);")
|
||||
self.line_token.setStyleSheet("border: 1px solid red;")
|
||||
self.update_widget_state(self.pb_test, "failed")
|
||||
self.update_widget_state(self.line_token, "failed")
|
||||
self.update_widget_state(self.line_url, "success")
|
||||
self.line_token.setFocus()
|
||||
|
||||
def incorrect_url_callback(self):
|
||||
self.pb_test.setEnabled(True)
|
||||
self.label_server_info.clear()
|
||||
self.pb_test.setStyleSheet("background-color: rgba(255, 0, 0, 100);")
|
||||
self.line_url.setStyleSheet("border: 1px solid red;")
|
||||
self.update_widget_state(self.pb_test, "failed")
|
||||
self.update_widget_state(self.line_token, "success")
|
||||
self.update_widget_state(self.line_url, "failed")
|
||||
self.line_url.setFocus()
|
||||
|
||||
def import_success_callback(self):
|
||||
|
||||
@@ -27,10 +27,12 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog):
|
||||
quit_requested = QtCore.pyqtSignal()
|
||||
theme_change_requested = QtCore.pyqtSignal(str)
|
||||
|
||||
def __init__(self):
|
||||
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
|
||||
@@ -104,6 +106,7 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog):
|
||||
|
||||
def add_message_widget(self):
|
||||
self.message_widget = MessageWidget(
|
||||
self.app,
|
||||
self,
|
||||
MessagesModelItem(
|
||||
GotifyMessageModel(
|
||||
|
||||
@@ -8,8 +8,9 @@ settings = Settings("gotify-tray")
|
||||
|
||||
|
||||
class StatusWidget(QtWidgets.QLabel):
|
||||
def __init__(self):
|
||||
def __init__(self, app: QtWidgets.QApplication):
|
||||
super(StatusWidget, self).__init__()
|
||||
self.app = app
|
||||
self.setFixedSize(QtCore.QSize(20, 20))
|
||||
self.setScaledContents(True)
|
||||
self.set_connecting()
|
||||
@@ -17,7 +18,7 @@ class StatusWidget(QtWidgets.QLabel):
|
||||
|
||||
def set_status(self, image: str):
|
||||
self.image = image
|
||||
self.setPixmap(QtGui.QPixmap(get_theme_file(image)))
|
||||
self.setPixmap(QtGui.QPixmap(get_theme_file(self.app, image)))
|
||||
|
||||
def set_active(self):
|
||||
self.setToolTip("Listening for new messages")
|
||||
|
||||
Reference in New Issue
Block a user