Wobuzz/wobuzz/ui/settings/settings.py

91 lines
3.5 KiB
Python

#!/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()