From 2c1647d57af1c26f8c6c2286a76942a14a4e8957 Mon Sep 17 00:00:00 2001 From: Andrzej Rybczak Date: Fri, 13 Mar 2009 14:22:43 +0100 Subject: [PATCH] new feature: reverse playlist --- src/help.cpp | 2 +- src/playlist.cpp | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/help.cpp b/src/help.cpp index 77bb4819..548407b6 100644 --- a/src/help.cpp +++ b/src/help.cpp @@ -200,7 +200,7 @@ void Help::GetKeybindings() *w << DisplayKeys(Key.MoveTo) << "Move selected item(s) to cursor position\n"; *w << DisplayKeys(Key.Add) << "Add url/file/directory to playlist\n"; *w << DisplayKeys(Key.SavePlaylist) << "Save playlist\n"; - *w << DisplayKeys(Key.SortPlaylist) << "Sort playlist\n"; + *w << DisplayKeys(Key.SortPlaylist) << "Sort/reverse playlist\n"; *w << DisplayKeys(Key.GoToNowPlaying) << "Go to currently playing position\n"; *w << DisplayKeys(Key.StartSearching) << "Toggle \"stop playing after current song\" option\n"; *w << DisplayKeys(Key.ToggleAutoCenter) << "Toggle auto center mode\n\n\n"; diff --git a/src/playlist.cpp b/src/playlist.cpp index 5aa426cd..43fdedc8 100644 --- a/src/playlist.cpp +++ b/src/playlist.cpp @@ -45,7 +45,7 @@ Menu< std::pair > *Playlist::SortDialog; const size_t Playlist::SortOptions = 10; const size_t Playlist::SortDialogWidth = 30; -const size_t Playlist::SortDialogHeight = 17; +const size_t Playlist::SortDialogHeight = 18; void Playlist::Init() { @@ -75,6 +75,7 @@ void Playlist::Init() SortDialog->AddOption(std::make_pair("Filename", &MPD::Song::GetFile)); SortDialog->AddSeparator(); SortDialog->AddOption(std::make_pair("Sort", (MPD::Song::GetFunction)0)); + SortDialog->AddOption(std::make_pair("Reverse", (MPD::Song::GetFunction)0)); SortDialog->AddOption(std::make_pair("Cancel", (MPD::Song::GetFunction)0)); } @@ -213,7 +214,21 @@ void Playlist::Sort() BlockRefreshing = 0; if (pos == SortOptions+1) // sort break; - else if (pos == SortOptions+2) // cancel + else if (pos == SortOptions+2) // reverse + { + BlockUpdate = 1; + ShowMessage("Reversing playlist order..."); + Mpd->StartCommandsList(); + for (size_t i = 0, j = w->Size()-1; i < w->Size()/2; i++, j--) + { + Mpd->Swap(i, j); + w->Swap(i, j); + } + Mpd->CommitCommandsList(); + ShowMessage("Playlist reversed!"); + return; + } + else if (pos == SortOptions+3) // cancel return; } else