diff --git a/src/helpers.cpp b/src/helpers.cpp index cad80ab2..9967ac96 100644 --- a/src/helpers.cpp +++ b/src/helpers.cpp @@ -35,9 +35,7 @@ extern Menu *mSearcher; extern Window *wFooter; extern vector vPlaylist; -extern vector vFileType; -extern vector vNameList; -extern vector vHashList; +extern vector vBrowser; extern CurrScreen current_screen; @@ -511,16 +509,14 @@ void GetDirectory(string dir) if (browsed_dir != dir) mBrowser->Reset(); browsed_dir = dir; - vFileType.clear(); - vNameList.clear(); - vHashList.clear(); + vBrowser.clear(); mBrowser->Clear(0); if (dir != "/") { mBrowser->AddOption("[..]"); - vFileType.push_back(MPD_DATA_TYPE_DIRECTORY); - vNameList.push_back(""); - vHashList.push_back(0); + BrowsedItem parent; + parent.type = MPD_DATA_TYPE_DIRECTORY; + vBrowser.push_back(parent); } browser = mpd_database_get_directory(conn, (char *)dir.c_str()); FOR_EACH_MPD_DATA(browser) @@ -529,33 +525,35 @@ void GetDirectory(string dir) { case MPD_DATA_TYPE_PLAYLIST: { - vFileType.push_back(MPD_DATA_TYPE_PLAYLIST); - vNameList.push_back(browser->playlist); - vHashList.push_back(0); + BrowsedItem playlist; + playlist.type = MPD_DATA_TYPE_PLAYLIST; + playlist.name = browser->playlist; + vBrowser.push_back(playlist); mBrowser->AddOption("[red](playlist)[/red] " + string(browser->playlist)); break; } case MPD_DATA_TYPE_DIRECTORY: { string subdir = browser->directory; - vFileType.push_back(MPD_DATA_TYPE_DIRECTORY); - vHashList.push_back(0); + BrowsedItem directory; + directory.type = MPD_DATA_TYPE_DIRECTORY; if (dir == "/") - vNameList.push_back(subdir.substr(browsed_dir.size()-1,subdir.size()-browsed_dir.size()+1)); + directory.name = subdir.substr(browsed_dir.size()-1,subdir.size()-browsed_dir.size()+1); else - vNameList.push_back(subdir.substr(browsed_dir.size()+1,subdir.size()-browsed_dir.size()-1)); - - mBrowser->AddOption("[" + vNameList.back() + "]"); - if (vNameList.back() == browsed_subdir) + directory.name = subdir.substr(browsed_dir.size()+1,subdir.size()-browsed_dir.size()-1); + vBrowser.push_back(directory); + mBrowser->AddOption("[" + directory.name + "]"); + if (directory.name == browsed_subdir) mBrowser->Highlight(mBrowser->MaxChoice()); break; } case MPD_DATA_TYPE_SONG: { - vFileType.push_back(MPD_DATA_TYPE_SONG); + BrowsedItem song; + song.type = MPD_DATA_TYPE_SONG; Song s = browser->song; - vNameList.push_back(s.GetFile()); - vHashList.push_back(s.GetHash()); + song.name = s.GetFile(); + song.hash = s.GetHash(); bool bold = 0; for (vector::const_iterator it = vPlaylist.begin(); it != vPlaylist.end(); it++) { @@ -566,6 +564,7 @@ void GetDirectory(string dir) } } bold ? mBrowser->AddBoldOption(DisplaySong(s)) : mBrowser->AddOption(DisplaySong(s)); + vBrowser.push_back(song); break; } } diff --git a/src/helpers.h b/src/helpers.h index fd65308b..f89b414e 100644 --- a/src/helpers.h +++ b/src/helpers.h @@ -27,6 +27,14 @@ #include "settings.h" #include "song.h" +struct BrowsedItem +{ + BrowsedItem() : hash(0) { } + string name; + MpdDataType type; + long long hash; +}; + extern ncmpcpp_config Config; bool SortSongsByTrack(const Song &, const Song &); diff --git a/src/menu.cpp b/src/menu.cpp index 5dd553a1..da3c587a 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -21,6 +21,12 @@ #include "menu.h" #include "misc.h" +Menu::~Menu() +{ + for (vector