new feature: apply filter to screen (Ctrl-F)

if one applies a filter, only items that contain this
filter will be displayed. works on all screens.
This commit is contained in:
Andrzej Rybczak
2009-02-17 17:57:55 +01:00
parent 2cb9b46135
commit 5d2daab416
27 changed files with 472 additions and 171 deletions

View File

@@ -44,6 +44,8 @@ void Playlist::Init()
w->SetSelectSuffix(&Config.selected_item_suffix);
w->SetItemDisplayer(Config.columns_in_playlist ? Display::SongsInColumns : Display::Songs);
w->SetItemDisplayerUserData(Config.columns_in_playlist ? &Config.song_columns_list_format : &Config.song_list_format);
w->SetGetStringFunction(Config.columns_in_playlist ? SongInColumnsToString : SongToString);
w->SetGetStringFunctionUserData(Config.columns_in_playlist ? &Config.song_columns_list_format : &Config.song_list_format);
}
void Playlist::SwitchTo()
@@ -56,6 +58,7 @@ void Playlist::SwitchTo()
CLEAR_FIND_HISTORY;
myScreen = this;
w->Window::Clear();
redraw_header = 1;
}
@@ -115,6 +118,15 @@ std::string Playlist::TotalLength()
result << '(' << w->Size() << (w->Size() == 1 ? " item" : " items");
if (w->isFiltered())
{
w->ShowAll();
size_t real_size = w->Size();
w->ShowFiltered();
if (w->Size() != real_size)
result << " (out of " << Mpd->GetPlaylistLength() << ")";
}
if (length)
{
result << ", length: ";
@@ -162,3 +174,22 @@ const MPD::Song &Playlist::NowPlayingSong()
static MPD::Song null;
return isPlaying() ? w->at(NowPlaying) : null;
}
std::string Playlist::SongToString(const MPD::Song &s, void *data)
{
return s.toString(*static_cast<std::string *>(data));
}
std::string Playlist::SongInColumnsToString(const MPD::Song &s, void *data)
{
std::string result;
std::string fmt = *static_cast<std::string *>(data);
for (std::string i = GetLineValue(fmt, '{', '}', 1); !i.empty(); i = GetLineValue(fmt, '{', '}', 1))
{
result += "%";
result += i;
result += " ";
}
return s.toString(result);
}