#!/usr/bin/python3 from PyQt6.QtCore import Qt, QTimer from PyQt6.QtWidgets import QDockWidget, QFileDialog from .ui.main_window import MainWindow from .ui.popups import Popups class GUI: def __init__(self, app): self.app = app self.dropped = [] self.window = MainWindow(app, self) self.settings = self.window.settings self.track_control = self.window.track_control self.process_dock = self.window.process_dock self.track_info = self.window.track_info self.popups = Popups(app, self) self.window.setCentralWidget(self.app.library.main_library_widget) if self.app.settings.window_maximized: self.window.showMaximized() elif self.app.settings.window_size is not None: self.window.resize(*self.app.settings.window_size) self.gui_update_timer = QTimer() self.gui_update_timer.timeout.connect(self.update_gui) self.gui_update_timer.start(1000 // self.app.settings.gui_update_rate) self.window.closeEvent = self.on_exit self.window.show() self.settings.update_all() def on_exit(self, event): self.window.focusWidget().clearFocus() # clear focus on focused widget self.app.player.stop() self.app.library.on_exit(event) self.app.settings.window_size = (self.window.width(), self.window.height()) self.app.settings.window_maximized = self.window.isMaximized() self.app.settings.save(self.app.utils.settings_location) def on_settings_change(self, key, value): self.settings.update_settings(key, value) match key: case "gui_update_rate": self.gui_update_timer.setInterval(1000 // value) case "album_cover_size": self.track_info.set_size(value) def on_track_change(self, previous_track, track): self.track_control.on_track_change(previous_track, track) for library_widget_id in self.app.player.current_playlist.views: view = self.app.player.current_playlist.views[library_widget_id] view.on_track_change(previous_track, track) def on_background_job_start(self, job_name: str, description: str, steps: int=0, getter: any=None): self.process_dock.job_started_signal.emit(job_name, description, steps, getter) def on_background_job_stop(self, job_name: str): self.process_dock.job_finished_signal.emit(job_name) def on_playstate_update(self): self.track_control.on_playstate_update() self.track_info.update_info() def update_gui(self): self.track_control.track_progress_slider.update_progress() if self.process_dock.isVisible(): self.process_dock.update_processes()