Enabled drag and drop between PlaylistViews.

This commit is contained in:
The Wobbler 2025-01-25 22:41:29 +01:00
parent 31e72c25d3
commit 744d050bac
5 changed files with 66 additions and 6 deletions

View file

@ -3,6 +3,8 @@
from PyQt6.QtCore import pyqtSignal
from PyQt6.QtGui import QDropEvent, QIcon
from PyQt6.QtWidgets import QTreeWidget, QAbstractItemView
from matplotlib.dates import TUESDAY
from .track import TrackItem
@ -18,6 +20,7 @@ class PlaylistView(QTreeWidget):
playlist.view = self
self.setDragDropMode(QAbstractItemView.DragDropMode.InternalMove)
#self.setAcceptDrops(True)
self.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection)
self.setColumnCount(4)
@ -58,13 +61,39 @@ class PlaylistView(QTreeWidget):
self.app.player.cache_next_track()
def dropEvent(self, event: QDropEvent):
items = self.selectedItems() # dragged items are always selected items
# receive items that were dropped and create new items from its tracks (new items bc. widgets can only have
# one parent)
if event.source() == self:
items = self.selectedItems() # dragged items are always selected items
self.itemDropped.emit(self, items)
self.itemDropped.emit(self, items)
self.on_user_sort()
else:
items = self.app.gui.dropped
i = 0
for item in items:
track = item.track
track_item = TrackItem(track, i, self)
i += 1
super().dropEvent(event)
self.on_user_sort()
event.accept()
def dragEnterEvent(self, event):
# store dragged items in gui.dropped, so the other playlist can receive it
if event.source() == self:
items = self.selectedItems()
self.app.gui.dropped = items
super().dragEnterEvent(event)
event.accept()