void PlaylistDialog::populatePreviewFromSaved(const QItemSelection &, const QItemSelection &) { static const int MAX_TRACKS_PREVIEW_AREA = 30; QModelIndexList indexes = savedPlaylists->selectionModel()->selectedIndexes(); bool empty = indexes.isEmpty(); this->clearPreview(!empty); if (indexes.size() == 1) { uint playlistId = _savedPlaylistModel->itemFromIndex(indexes.first())->data(PlaylistID).toUInt(); QList<TrackDAO> tracks = SqlDatabase::instance()->selectPlaylistTracks(playlistId); for (int i = 0; i < tracks.size(); i++) { TrackDAO track = tracks.at(i); QTreeWidgetItem *item = new QTreeWidgetItem; item->setText(0, QString("%1 (%2 - %3)").arg(track.title(), track.artist(), track.album())); previewPlaylist->addTopLevelItem(item); if (i + 1 == MAX_TRACKS_PREVIEW_AREA) { QTreeWidgetItem *item = new QTreeWidgetItem; item->setText(0, tr("And more tracks...")); previewPlaylist->addTopLevelItem(item); break; } } } loadPlaylists->setDisabled(empty); deletePlaylists->setDisabled(empty); exportPlaylists->setEnabled(indexes.size() == 1); // Some work for the Save button if (empty) { savePlaylists->setEnabled(false); } else { bool allPlaylistsAreModified = true; QMap<uint, Playlist*> map; for (int i = 0; i < _playlists.count(); i++) { Playlist *p = _playlists.at(i); map.insert(p->id(), p); } for (QModelIndex idx : indexes) { uint playlistId = idx.data(PlaylistID).toUInt(); if (map.contains(playlistId)) { Playlist *p = map.value(playlistId); allPlaylistsAreModified = allPlaylistsAreModified && p->isModified(); } } savePlaylists->setEnabled(allPlaylistsAreModified); } }
/** Update saved playlists when one is adding a new one. */ void PlaylistDialog::updatePlaylists() { // Populate saved playlists area _savedPlaylistModel->clear(); _savedPlaylistModel->blockSignals(true); QMap<uint, Playlist*> map; for (int i = 0; i < _playlists.count(); i++) { Playlist *p = _playlists.at(i); if (p->id() != 0) { map.insert(p->id(), p); } } for (PlaylistDAO playlist : SqlDatabase::instance()->selectPlaylists()) { QStandardItem *item = new QStandardItem(playlist.title()); item->setData(playlist.id(), PlaylistID); if (playlist.icon().isEmpty()) { Playlist *p = map.value(playlist.id().toUInt()); if (p && p->isModified()) { item->setIcon(QIcon(":/icons/playlist_modified")); item->setData(true, PlaylistModified); item->setToolTip(tr("This playlist has changed")); } else { item->setIcon(QIcon(":/icons/playlist")); } } else { item->setIcon(QIcon(playlist.icon())); } _savedPlaylistModel->appendRow(item); _saved.insert(item, playlist); } _savedPlaylistModel->blockSignals(false); // Reset buttons status loadPlaylists->setEnabled(false); savePlaylists->setEnabled(false); deletePlaylists->setEnabled(false); exportPlaylists->setEnabled(false); }