void PlaylistDialog::populatePreviewFromUnsaved(const QItemSelection &, const QItemSelection &) { static const int MAX_TRACKS_PREVIEW_AREA = 30; bool b = unsavedPlaylists->selectionModel()->selectedIndexes().size() == 1; this->clearPreview(b); if (b) { QStandardItem *item = _unsavedPlaylistModel->itemFromIndex(unsavedPlaylists->selectionModel()->selectedIndexes().first()); Playlist *p = _unsaved.value(item); int max = qMin(p->mediaPlaylist()->mediaCount(), MAX_TRACKS_PREVIEW_AREA); for (int idxTrack = 0; idxTrack < max; idxTrack++) { QString title = p->model()->index(idxTrack, Playlist::COL_TITLE).data().toString(); QString artist = p->model()->index(idxTrack, Playlist::COL_ARTIST).data().toString(); QString album = p->model()->index(idxTrack, Playlist::COL_ALBUM).data().toString(); QTreeWidgetItem *item = new QTreeWidgetItem; item->setText(0, QString("%1 (%2 - %3)").arg(title, artist, album)); previewPlaylist->addTopLevelItem(item); } if (p->mediaPlaylist()->mediaCount() > MAX_TRACKS_PREVIEW_AREA) { QTreeWidgetItem *item = new QTreeWidgetItem; item->setText(0, tr("And more tracks...")); previewPlaylist->addTopLevelItem(item); } } }
/** Redefined to accept D&D from another playlist or the library. */ void TabBar::dropEvent(QDropEvent *event) { int tab = this->tabAt(event->pos()); if (Playlist *origin = qobject_cast<Playlist*>(event->source())) { Playlist *target = tabPlaylist->playlist(tab); // Copy tracks in the target QList<QMediaContent> medias; for (QModelIndex index : origin->selectionModel()->selectedRows()) { medias.append(origin->mediaPlaylist()->media(index.row())); } // Append tracks at the end target->insertMedias(target->model()->rowCount(), medias); // Remove tracks from the current playlist if necessary if (!SettingsPrivate::instance()->copyTracksFromPlaylist()) { origin->removeSelectedTracks(); } } else if (TreeView *origin = qobject_cast<TreeView*>(event->source())) { tabPlaylist->setCurrentIndex(tab); origin->appendToPlaylist(); } }