diff --git a/src/playlist/playlistmanager.cpp b/src/playlist/playlistmanager.cpp index 684ef1cba..09711e823 100644 --- a/src/playlist/playlistmanager.cpp +++ b/src/playlist/playlistmanager.cpp @@ -15,7 +15,6 @@ along with Clementine. If not, see . */ -#include "playlist.h" #include "playlistbackend.h" #include "playlistcontainer.h" #include "playlistmanager.h" @@ -34,6 +33,7 @@ #include #include #include +#include #include using smart_playlists::GeneratorPtr; @@ -293,7 +293,6 @@ bool PlaylistManager::Close(int id) { emit PlaylistClosed(id); if (!data.p->is_favorite()) { - // TODO: should we warn the user this action cannot be undone? playlist_backend_->RemovePlaylist(id); emit PlaylistDeleted(id); } diff --git a/src/playlist/playlistmanager.h b/src/playlist/playlistmanager.h index b6c49a17d..d383e84a2 100644 --- a/src/playlist/playlistmanager.h +++ b/src/playlist/playlistmanager.h @@ -25,11 +25,11 @@ #include #include "core/song.h" +#include "playlist.h" #include "smartplaylists/generator_fwd.h" class Application; class LibraryBackend; -class Playlist; class PlaylistBackend; class PlaylistContainer; class PlaylistParser; @@ -162,6 +162,7 @@ public: QItemSelection active_selection() const { return selection(active_id()); } QString GetPlaylistName(int index) const { return playlists_[index].name; } + bool IsPlaylistFavorite(int index) const { return playlists_[index].p->is_favorite(); } void Init(LibraryBackend* library_backend, PlaylistBackend* playlist_backend, PlaylistSequence* sequence, PlaylistContainer* playlist_container); diff --git a/src/playlist/playlisttabbar.cpp b/src/playlist/playlisttabbar.cpp index c80dd968e..3124b9790 100644 --- a/src/playlist/playlisttabbar.cpp +++ b/src/playlist/playlisttabbar.cpp @@ -94,7 +94,7 @@ void PlaylistTabBar::mouseReleaseEvent(QMouseEvent* e) { if (e->button() == Qt::MidButton) { // Update menu index menu_index_ = tabAt(e->pos()); - Close(); + Close(false); } QTabBar::mouseReleaseEvent(e); @@ -151,13 +151,26 @@ void PlaylistTabBar::HideEditor() { manager_->SetCurrentPlaylist(manager_->current()->id()); } -void PlaylistTabBar::Close() { +void PlaylistTabBar::Close(bool ask_for_delete) { if (menu_index_ == -1) return; + const int playlist_id = tabData(menu_index_).toInt(); + + if (ask_for_delete && !manager_->IsPlaylistFavorite(playlist_id)) { + if (QMessageBox::question(this, + tr("Remove playlist"), + tr("You are about to remove a playlist which is not part of your favorite playlists: " + "the playlist will be deleted (this action cannot be undone). \n" + "Are you sure you want to continue?"), + QMessageBox::Yes, QMessageBox::Cancel) != QMessageBox::Yes) { + return; + } + } + // Just hide the tab from the UI - don't delete it completely (it can still // be resurrected from the Playlists tab). - emit Close(tabData(menu_index_).toInt()); + emit Close(playlist_id); // Select the nearest tab. if (menu_index_ > 1) { diff --git a/src/playlist/playlisttabbar.h b/src/playlist/playlisttabbar.h index c3636fce6..4374729d7 100644 --- a/src/playlist/playlisttabbar.h +++ b/src/playlist/playlisttabbar.h @@ -76,7 +76,7 @@ private slots: void Rename(); void RenameInline(); void HideEditor(); - void Close(); + void Close(bool ask_for_delete = true); void CloseFromTabIndex(int index); // Used when playlist's favorite flag isn't changed from the favorite widget // (e.g. from the playlistlistcontainer): will update the favorite widget