#!/usr/bin/python3 from PyQt6.QtCore import Qt from PyQt6.QtWidgets import QWidget, QDockWidget, QTabWidget, QLineEdit, QCheckBox, QPushButton, QVBoxLayout from .file import FileSettings from .behavior import BehaviourSettings from .category import Category from .sub_category import SubCategory class Settings(QDockWidget): def __init__(self, app, parent=None): super().__init__(parent) self.app = app self.setAllowedAreas( Qt.DockWidgetArea.LeftDockWidgetArea | Qt.DockWidgetArea.RightDockWidgetArea | Qt.DockWidgetArea.BottomDockWidgetArea ) self.setWindowTitle("Settings") self.content = QWidget(self) self.content_layout = QVBoxLayout() self.content.setLayout(self.content_layout) self.tabs = QTabWidget(self.content) self.content_layout.addWidget(self.tabs) self.file_settings = Category() self.file_settings.paths = SubCategory("Paths", "Path related settings") self.file_settings.add_sub_category(self.file_settings.paths) self.file_settings.paths.library_path_input = QLineEdit() self.file_settings.paths.add_setting("Library Path:", self.file_settings.paths.library_path_input) self.tabs.addTab(self.file_settings, "Files") self.behavior_settings = Category() self.behavior_settings.playlist = SubCategory("Playlist", "Playlist behavior") self.behavior_settings.add_sub_category(self.behavior_settings.playlist) self.behavior_settings.playlist.load_on_start = QCheckBox() self.behavior_settings.playlist.add_setting("Load on start:", self.behavior_settings.playlist.load_on_start) self.behavior_settings.track = SubCategory("Track", "Track behavior") self.behavior_settings.add_sub_category(self.behavior_settings.track) self.behavior_settings.track.clear_cache = QCheckBox() self.behavior_settings.track.add_setting( "Clear cache:", self.behavior_settings.track.clear_cache, "Automatically clear the track's cache after it finished. This greatly reduces RAM usage." ) self.tabs.addTab(self.behavior_settings, "Behavior") self.save_button = QPushButton("&Save", self.content) self.content_layout.addWidget(self.save_button) self.setWidget(self.content) self.visibilityChanged.connect(self.update_all) self.save_button.pressed.connect(self.write_settings) def update_all(self, _=True): # ignore visible parameter passed by visibilityChanged event self.file_settings.paths.library_path_input.setText(self.app.settings.library_path) self.behavior_settings.track.clear_cache.setChecked(self.app.settings.clear_track_cache) self.behavior_settings.playlist.load_on_start.setChecked(self.app.settings.load_on_start) def update_settings(self, key, value): match key: case "library_path": self.file_settings.paths.library_path_input.setText(value) case "clear_track_cache": self.behavior_settings.track.clear_cache.setDown(value) case "load_on_start": self.behavior_settings.playlist.load_on_start.setChecked(value) def write_settings(self): self.app.settings.library_path = self.file_settings.paths.library_path_input.text() self.app.settings.clear_track_cache = self.behavior_settings.track.clear_cache.isChecked() self.app.settings.load_on_start = self.behavior_settings.playlist.load_on_start.isChecked()