Enabled drag and drop between PlaylistViews.
This commit is contained in:
parent
31e72c25d3
commit
744d050bac
5 changed files with 66 additions and 6 deletions
|
@ -9,6 +9,8 @@ class GUI:
|
|||
def __init__(self, app):
|
||||
self.app = app
|
||||
|
||||
self.dropped = []
|
||||
|
||||
self.window = MainWindow(app)
|
||||
self.settings = self.window.settings
|
||||
self.track_control = self.window.track_control
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
from PyQt6.QtCore import Qt
|
||||
from PyQt6.QtGui import QIcon
|
||||
from PyQt6.QtWidgets import QToolBox, QLabel, QTabWidget, QToolButton
|
||||
from .playlist_tabs import PlaylistTabs
|
||||
|
||||
|
||||
class Library(QToolBox):
|
||||
|
@ -11,8 +11,7 @@ class Library(QToolBox):
|
|||
|
||||
self.library = library
|
||||
|
||||
self.playlist_tabs = QTabWidget()
|
||||
self.playlist_tabs.setMovable(True)
|
||||
self.playlist_tabs = PlaylistTabs()
|
||||
|
||||
self.addItem(self.playlist_tabs, "Playlists")
|
||||
|
||||
|
|
|
@ -17,6 +17,8 @@ class LibraryDock(QDockWidget):
|
|||
Qt.DockWidgetArea.BottomDockWidgetArea
|
||||
)
|
||||
|
||||
self.setAcceptDrops(True)
|
||||
|
||||
self.library_widget = Library(library, self)
|
||||
self.setWidget(self.library_widget)
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
28
wobuzz/ui/playlist_tabs.py
Normal file
28
wobuzz/ui/playlist_tabs.py
Normal file
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/python3
|
||||
from PyQt6.QtGui import QDragEnterEvent
|
||||
from PyQt6.QtWidgets import QTabWidget, QTabBar
|
||||
|
||||
|
||||
class PlaylistTabs(QTabWidget):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
|
||||
self.setTabBar(PlaylistTabBar(self))
|
||||
|
||||
self.setMovable(True)
|
||||
self.setAcceptDrops(True)
|
||||
|
||||
|
||||
class PlaylistTabBar(QTabBar):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
|
||||
self.tab_widget = parent
|
||||
|
||||
self.setAcceptDrops(True)
|
||||
|
||||
def dragEnterEvent(self, event: QDragEnterEvent):
|
||||
tab = self.tabAt(event.position().toPoint())
|
||||
|
||||
self.tab_widget.setCurrentIndex(tab)
|
||||
|
Loading…
Add table
Reference in a new issue