Deleted some unnecessary shit and finally found an easy way to figure out which tracks got dragged.

This commit is contained in:
The Wobbler 2025-01-25 11:58:34 +01:00
parent 74a723d6db
commit 4ea3f04fb9
2 changed files with 42 additions and 14 deletions

View file

@ -2,7 +2,7 @@
from PyQt6.QtCore import Qt from PyQt6.QtCore import Qt
from PyQt6.QtGui import QIcon from PyQt6.QtGui import QIcon
from PyQt6.QtWidgets import QTabWidget, QTreeWidgetItem, QAbstractItemView from PyQt6.QtWidgets import QTabWidget, QTreeWidgetItem
from ..player.playlist import Playlist from ..player.playlist import Playlist
from ..ui.library_dock import LibraryDock from ..ui.library_dock import LibraryDock
from ..ui.playlist import PlaylistView from ..ui.playlist import PlaylistView
@ -34,11 +34,11 @@ class Library:
playlist_view = self.create_playlist_view(playlist) playlist_view = self.create_playlist_view(playlist)
playlist_tabs.playlists[playlist.title] = playlist_view playlist_tabs.playlists[playlist.title] = playlist_view
playlist_tabs.addTab(playlist_view, playlist.title) playlist_tabs.addTab(playlist_view, playlist.title)
playlist_view.itemActivated.connect(self.on_track_activation)
def create_playlist_view(self, playlist: Playlist): def create_playlist_view(self, playlist: Playlist):
view = PlaylistView() view = PlaylistView(playlist)
view.setDragDropMode(QAbstractItemView.DragDropMode.InternalMove)
view.itemActivated.connect(self.on_track_activation)
num_tracks = len(playlist.tracks) num_tracks = len(playlist.tracks)
@ -51,8 +51,8 @@ class Library:
track_item.setFlags( track_item.setFlags(
Qt.ItemFlag.ItemIsEnabled | Qt.ItemFlag.ItemIsEnabled |
Qt.ItemFlag.ItemIsSelectable # | Qt.ItemFlag.ItemIsSelectable |
# Qt.ItemFlag.ItemIsDragEnabled Qt.ItemFlag.ItemIsDragEnabled
) )
track_item.track = track track_item.track = track
@ -69,19 +69,25 @@ class Library:
index = item.treeWidget().indexOfTopLevelItem(item) index = item.treeWidget().indexOfTopLevelItem(item)
self.app.player.play_track_in_playlist(index) 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) 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) item = playlist_view.topLevelItem(index)
return item 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): def on_track_change(self, previous_track, track):
playing_playlist_view = self.get_playing_playlist_view()
if previous_track: 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)) item.setIcon(0, QIcon(None))
if track: 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) item.setIcon(0, self.play_icon)

View file

@ -1,11 +1,20 @@
#!/usr/bin/python3 #!/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): class PlaylistView(QTreeWidget):
def __init__(self, *args, **kwargs): itemDropped = pyqtSignal(QTreeWidget, list)
super().__init__(*args, **kwargs)
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) self.setColumnCount(4)
@ -18,4 +27,17 @@ class PlaylistView(QTreeWidget):
"# Custom Sorting" "# Custom Sorting"
] ]
self.setHeaderLabels(headers) 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()