#!/usr/bin/python3 from PyQt6.QtCore import pyqtSignal from PyQt6.QtGui import QDropEvent, QIcon from PyQt6.QtWidgets import QTreeWidget, QAbstractItemView from .track import TrackItem class PlaylistView(QTreeWidget): itemDropped = pyqtSignal(QTreeWidget, list) def __init__(self, playlist, parent=None): super().__init__(parent) self.playlist = playlist self.app = playlist.app playlist.view = self self.setDragDropMode(QAbstractItemView.DragDropMode.InternalMove) self.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection) self.setColumnCount(4) self.play_icon = QIcon.fromTheme(QIcon.ThemeIcon.MediaPlaybackStart) headers = [ "", "#", "Title", "Artist", "Album", "# Custom Sorting" ] self.setHeaderLabels(headers) self.load_tracks() self.itemActivated.connect(self.on_track_activation) 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() def load_tracks(self): for track in self.playlist.tracks: track_item = TrackItem(track, self) def on_track_activation(self, item, column): index = self.indexOfTopLevelItem(item) self.app.player.play_track_in_playlist(index) def on_track_change(self, previous_track, track): # unmark the previous track and mark the current track as playing if previous_track: previous_track.item.setIcon(0, QIcon(None)) if track: track.item.setIcon(0, self.play_icon)