150 lines
6.2 KiB
Python
150 lines
6.2 KiB
Python
#!/usr/bin/python3
|
|
|
|
from PyQt6.QtCore import Qt
|
|
from PyQt6.QtWidgets import (
|
|
QWidget,
|
|
QDockWidget,
|
|
QTabWidget,
|
|
QLineEdit,
|
|
QCheckBox,
|
|
QPushButton,
|
|
QSpinBox,
|
|
QVBoxLayout,
|
|
QSizePolicy
|
|
)
|
|
|
|
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")
|
|
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",)
|
|
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",)
|
|
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.appearance_settings = Category()
|
|
|
|
self.appearance_settings.track_info = SubCategory("Track Info")
|
|
self.appearance_settings.add_sub_category(self.appearance_settings.track_info)
|
|
|
|
self.appearance_settings.track_info.cover_size = QSpinBox()
|
|
self.appearance_settings.track_info.cover_size.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed)
|
|
self.appearance_settings.track_info.cover_size.setRange(16, 128)
|
|
self.appearance_settings.track_info.cover_size.setSuffix("px")
|
|
self.appearance_settings.track_info.cover_size.setSingleStep(10)
|
|
self.appearance_settings.track_info.add_setting(
|
|
"Album Cover Size",
|
|
self.appearance_settings.track_info.cover_size,
|
|
"The size of the album cover. (aspect-ratio: 1:1)"
|
|
)
|
|
|
|
self.tabs.addTab(self.appearance_settings, "Appearance")
|
|
|
|
self.performance_settings = Category()
|
|
|
|
# self.performance_settings.memory = SubCategory("Memory", "Memory related settings")
|
|
# self.performance_settings.add_sub_category(self.performance_settings.memory)
|
|
|
|
self.performance_settings.cpu = SubCategory("CPU",)
|
|
self.performance_settings.add_sub_category(self.performance_settings.cpu)
|
|
|
|
self.performance_settings.cpu.gui_update_rate = QSpinBox()
|
|
self.performance_settings.cpu.gui_update_rate.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed)
|
|
self.performance_settings.cpu.gui_update_rate.setRange(1, 60)
|
|
self.performance_settings.cpu.gui_update_rate.setSuffix(" FPS")
|
|
self.performance_settings.cpu.gui_update_rate.setSingleStep(5)
|
|
self.performance_settings.cpu.add_setting(
|
|
"GUI update rate:",
|
|
self.performance_settings.cpu.gui_update_rate,
|
|
"The rate at which gui-elements like the track-progress-slider get updated.\n"
|
|
"Values above 20 don't really make sense for most monitors.\n"
|
|
"Decreasing this value will reduce the CPU usage."
|
|
)
|
|
|
|
self.tabs.addTab(self.performance_settings, "Performance")
|
|
|
|
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)
|
|
self.performance_settings.cpu.gui_update_rate.setValue(self.app.settings.gui_update_rate)
|
|
self.appearance_settings.track_info.cover_size.setValue(self.app.settings.album_cover_size)
|
|
|
|
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)
|
|
|
|
case "gui_update_rate":
|
|
self.performance_settings.cpu.gui_update_rate.setValue(value)
|
|
|
|
case "track_cover_size":
|
|
self.appearance_settings.track_info.cover_size.setValue(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()
|
|
self.app.settings.gui_update_rate = self.performance_settings.cpu.gui_update_rate.value()
|
|
self.app.settings.album_cover_size = self.appearance_settings.track_info.cover_size.value()
|
|
|