refactor: Restructure GUI components into separate modules for improved maintainability
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
"""UI helpers mixin for MainWindow.
|
||||
|
||||
Handles UI helper functions like spinners, logs, and status bar messages.
|
||||
"""
|
||||
|
||||
from PySide6 import QtGui, QtWidgets
|
||||
|
||||
from tidal_dl_ng.model.gui_data import StatusbarMessage
|
||||
from tidal_dl_ng.ui.spinner import QtWaitingSpinner
|
||||
|
||||
|
||||
class UIHelpersMixin:
|
||||
"""Mixin containing UI helper methods."""
|
||||
|
||||
def on_spinner_start(self, parent: QtWidgets.QWidget) -> None:
|
||||
"""Start a loading spinner on the given parent widget."""
|
||||
if parent in self.spinners:
|
||||
spinner = self.spinners[parent]
|
||||
spinner.stop()
|
||||
spinner.deleteLater()
|
||||
del self.spinners[parent]
|
||||
|
||||
spinner = QtWaitingSpinner(parent, True, True)
|
||||
spinner.setColor(QtGui.QColor(255, 255, 255))
|
||||
spinner.start()
|
||||
self.spinners[parent] = spinner
|
||||
|
||||
def on_spinner_stop(self) -> None:
|
||||
"""Stop all active loading spinners."""
|
||||
for spinner in list(self.spinners.values()):
|
||||
spinner.stop()
|
||||
spinner.deleteLater()
|
||||
self.spinners.clear()
|
||||
|
||||
def on_statusbar_message(self, data: StatusbarMessage):
|
||||
"""Show a message in the status bar."""
|
||||
self.statusbar.showMessage(data.message, data.timeout)
|
||||
|
||||
def _log_output(self, text: str) -> None:
|
||||
"""Redirect log output to the debug text area."""
|
||||
cursor: QtGui.QTextCursor = self.te_debug.textCursor()
|
||||
html = self.converter_ansi_html.convert(text)
|
||||
|
||||
cursor.movePosition(QtGui.QTextCursor.End)
|
||||
cursor.insertHtml(html)
|
||||
self.te_debug.setTextCursor(cursor)
|
||||
self.te_debug.ensureCursorVisible()
|
||||
|
||||
def button_reload_status(self, status: bool) -> None:
|
||||
"""Update the reload button's state and text."""
|
||||
button_text: str = "Reloading..." if not status else "Reload"
|
||||
self.pb_reload_user_lists.setEnabled(status)
|
||||
self.pb_reload_user_lists.setText(button_text)
|
||||
Reference in New Issue
Block a user