summaryrefslogtreecommitdiff
path: root/tidal_dl_ng/gui/ui_helpers.py
blob: 2011893767602609c53aa0ffa29a55f59838522a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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)