Added "library_path" setting, added a gui for the settings, changed the window layout and did a bunch of other things.

This commit is contained in:
The Wobbler 2024-12-24 12:13:24 +01:00
parent 259ec72442
commit 6498f43d5f
10 changed files with 124 additions and 37 deletions

View file

@ -1,6 +1,8 @@
#!/usr/bin/python3 #!/usr/bin/python3
from .menu_bar import MenuBar
from .track_control import TrackControl from .track_control import TrackControl
from .settings import Settings
class GUICommunication: class GUICommunication:
@ -11,13 +13,15 @@ class GUICommunication:
def __init__(self, app): def __init__(self, app):
self.app = app self.app = app
self.menu_bar = MenuBar(self.app)
self.track_control = TrackControl(self.app) self.track_control = TrackControl(self.app)
self.settings = Settings(self.app)
self.connect() self.settings.update_all()
def connect(self):
pass
def on_track_start(self): def on_track_start(self):
self.track_control.on_track_start() self.track_control.on_track_start()
def on_settings_change(self, key, value):
self.settings.update_settings(key, value)

View file

@ -0,0 +1,17 @@
#!/usr/bin/python3
class MenuBar:
def __init__(self, app):
self.app = app
self.window = self.app.gui.window
self.settings_action = self.window.settings_action
self.connect()
def connect(self):
self.settings_action.triggered.connect(self.show_settings)
def show_settings(self):
self.window.settings.show()

View file

@ -0,0 +1,25 @@
#!/usr/bin/python3
class Settings:
def __init__(self, app):
self.app = app
self.settings = self.app.gui.window.settings
self.connect()
def connect(self):
self.settings.file_settings.library_path_input.returnPressed.connect(self.write_settings)
def update_all(self):
self.settings.file_settings.library_path_input.setText(self.app.settings.library_path)
def update_settings(self, key, value):
match key:
case "library_path":
self.settings.file_settings.library_path_input.setText(value)
def write_settings(self):
self.app.settings.library_path = self.settings.file_settings.library_path_input.text()

View file

@ -13,7 +13,7 @@ class TrackControl:
def __init__(self, app): def __init__(self, app):
self.app = app self.app = app
self.track_control = self.app.gui.window.main_container.track_control self.track_control = self.app.gui.window.track_control
self.track_progress_slider = self.track_control.track_progress_slider self.track_progress_slider = self.track_control.track_progress_slider
self.progress_update_timer = QTimer() self.progress_update_timer = QTimer()

View file

@ -15,7 +15,10 @@ class Wobuzz:
self.qt_app = QApplication([]) self.qt_app = QApplication([])
self.utils = Utils(self) self.utils = Utils(self)
self.settings = load_dataclass_json(Settings, self.utils.settings_location)
self.settings = load_dataclass_json(Settings, self.utils.settings_location, self, True, True)
self.settings.set_attribute_change_event(self.on_settings_change)
self.player = Player(self) self.player = Player(self)
self.gui = GUI(self) self.gui = GUI(self)
self.gui_communication = GUICommunication(self) self.gui_communication = GUICommunication(self)
@ -25,6 +28,11 @@ class Wobuzz:
if track_paths: if track_paths:
self.player.load_tracks_from_paths(track_paths) self.player.load_tracks_from_paths(track_paths)
def on_settings_change(self, key, value):
self.gui_communication.on_settings_change(key, value)
return True
if __name__ == "__main__": if __name__ == "__main__":
wobuzz = Wobuzz() wobuzz = Wobuzz()

View file

@ -15,6 +15,11 @@ class LibraryDock(QDockWidget):
Qt.DockWidgetArea.BottomDockWidgetArea Qt.DockWidgetArea.BottomDockWidgetArea
) )
self.setFeatures(
QDockWidget.DockWidgetFeature.DockWidgetMovable |
QDockWidget.DockWidgetFeature.DockWidgetFloatable
)
self.library = Library(self) self.library = Library(self)
self.setWidget(self.library) self.setWidget(self.library)

View file

@ -1,21 +0,0 @@
#!/usr/bin/python3
from PyQt6.QtWidgets import QWidget, QGridLayout, QSizePolicy
from .track_control import TrackControl
from .lines import HLine
class MainContainer(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.layout = QGridLayout()
self.setLayout(self.layout)
self.track_control = TrackControl(self)
self.layout.addWidget(self.track_control)
self.layout.addWidget(HLine(self)) # track_control separator line
self.setSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed)

View file

@ -1,9 +1,10 @@
#!/usr/bin/python3 #!/usr/bin/python3
from PyQt6.QtCore import Qt from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import QMainWindow, QMenu, QDockWidget from PyQt6.QtWidgets import QMainWindow, QMenu
from .main_container import MainContainer from .track_control import TrackControl
from .library_dock import LibraryDock from .library_dock import LibraryDock
from .settings.settings import Settings
class MainWindow(QMainWindow): class MainWindow(QMainWindow):
@ -13,16 +14,23 @@ class MainWindow(QMainWindow):
self.setWindowTitle("WoBuzz") self.setWindowTitle("WoBuzz")
self.menu_bar = self.menuBar() self.menu_bar = self.menuBar()
self.menu_bar.addMenu(QMenu("&File", self))
self.main_container = MainContainer(self) self.file_menu = QMenu("&File", self.menu_bar)
self.setCentralWidget(self.main_container) self.menu_bar.addMenu(self.file_menu)
self.edit_menu = QMenu("&Edit", self.menu_bar)
self.menu_bar.addMenu(self.edit_menu)
self.settings_action = self.edit_menu.addAction("Settings")
self.track_control = TrackControl()
self.addToolBar(self.track_control)
self.settings = Settings()
self.settings.hide()
self.addDockWidget(Qt.DockWidgetArea.LeftDockWidgetArea, self.settings)
self.library_dock = LibraryDock() self.library_dock = LibraryDock()
self.library_dock.setFeatures( self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.library_dock)
QDockWidget.DockWidgetFeature.DockWidgetMovable |
QDockWidget.DockWidgetFeature.DockWidgetFloatable
)
self.addDockWidget(Qt.DockWidgetArea.BottomDockWidgetArea, self.library_dock)

View file

@ -0,0 +1,15 @@
#!/usr/bin/python3
from PyQt6.QtWidgets import QWidget, QLineEdit, QFormLayout
class FileSettings(QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.layout = QFormLayout(self)
self.setLayout(self.layout)
self.library_path_input = QLineEdit(self)
self.layout.addRow("Library Path:", self.library_path_input)

View file

@ -0,0 +1,26 @@
#!/usr/bin/python3
from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import QDockWidget, QTabWidget
from .file import FileSettings
class Settings(QDockWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.setAllowedAreas(
Qt.DockWidgetArea.LeftDockWidgetArea |
Qt.DockWidgetArea.RightDockWidgetArea |
Qt.DockWidgetArea.BottomDockWidgetArea
)
self.setWindowTitle("Settings")
self.tabs = QTabWidget()
self.file_settings = FileSettings()
self.tabs.addTab(self.file_settings, "Files")
self.setWidget(self.tabs)