diff --git a/wobuzz/library/library.py b/wobuzz/library/library.py index 53cf314..26ab0f5 100644 --- a/wobuzz/library/library.py +++ b/wobuzz/library/library.py @@ -2,7 +2,7 @@ from PyQt6.QtCore import Qt from PyQt6.QtGui import QIcon -from PyQt6.QtWidgets import QTabWidget, QTreeWidgetItem, QAbstractItemView +from PyQt6.QtWidgets import QTabWidget, QTreeWidgetItem from ..player.playlist import Playlist from ..ui.library_dock import LibraryDock from ..ui.playlist import PlaylistView @@ -34,11 +34,11 @@ class Library: playlist_view = self.create_playlist_view(playlist) playlist_tabs.playlists[playlist.title] = playlist_view playlist_tabs.addTab(playlist_view, playlist.title) - playlist_view.itemActivated.connect(self.on_track_activation) def create_playlist_view(self, playlist: Playlist): - view = PlaylistView() - view.setDragDropMode(QAbstractItemView.DragDropMode.InternalMove) + view = PlaylistView(playlist) + + view.itemActivated.connect(self.on_track_activation) num_tracks = len(playlist.tracks) @@ -51,8 +51,8 @@ class Library: track_item.setFlags( Qt.ItemFlag.ItemIsEnabled | - Qt.ItemFlag.ItemIsSelectable # | - # Qt.ItemFlag.ItemIsDragEnabled + Qt.ItemFlag.ItemIsSelectable | + Qt.ItemFlag.ItemIsDragEnabled ) track_item.track = track @@ -69,19 +69,25 @@ class Library: index = item.treeWidget().indexOfTopLevelItem(item) self.app.player.play_track_in_playlist(index) - def get_track_tree_item(self, track): + def get_track_tree_item(self, track, playlist_view: PlaylistView): index = self.app.player.current_playlist.tracks.index(track) - playlist_view = self.main_library_dock.library.playlist_tabs.playlists[self.app.player.current_playlist.title] item = playlist_view.topLevelItem(index) return item + def get_playing_playlist_view(self): + view = self.main_library_dock.library.playlist_tabs.playlists[self.app.player.current_playlist.title] + + return view + def on_track_change(self, previous_track, track): + playing_playlist_view = self.get_playing_playlist_view() + if previous_track: - item = self.get_track_tree_item(previous_track) + item = self.get_track_tree_item(previous_track, playing_playlist_view) item.setIcon(0, QIcon(None)) if track: - item = self.get_track_tree_item(track) + item = self.get_track_tree_item(track, playing_playlist_view) item.setIcon(0, self.play_icon) diff --git a/wobuzz/ui/playlist.py b/wobuzz/ui/playlist.py index ce8a6d4..c235cf0 100644 --- a/wobuzz/ui/playlist.py +++ b/wobuzz/ui/playlist.py @@ -1,11 +1,20 @@ #!/usr/bin/python3 -from PyQt6.QtWidgets import QTreeWidget +from PyQt6.QtCore import pyqtSignal +from PyQt6.QtGui import QDropEvent +from PyQt6.QtWidgets import QTreeWidget, QAbstractItemView class PlaylistView(QTreeWidget): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) + itemDropped = pyqtSignal(QTreeWidget, list) + + def __init__(self, playlist, parent=None): + super().__init__(parent) + + self.playlist = playlist + + self.setDragDropMode(QAbstractItemView.DragDropMode.InternalMove) + self.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection) self.setColumnCount(4) @@ -18,4 +27,17 @@ class PlaylistView(QTreeWidget): "# Custom Sorting" ] - self.setHeaderLabels(headers) \ No newline at end of file + self.setHeaderLabels(headers) + + def update_track_numbers(self): + pass + + def dropEvent(self, event: QDropEvent): + items = self.selectedItems() # dragged items are always selected items + + self.itemDropped.emit(self, items) + + super().dropEvent(event) + + event.accept() +