new feature: support for multiple tag types in one column

This commit is contained in:
Andrzej Rybczak
2010-05-17 22:49:26 +02:00
parent 53dfda0f98
commit 3d41a1585c
6 changed files with 165 additions and 139 deletions

View File

@@ -28,7 +28,7 @@ std::string Display::Columns()
if (Config.columns.empty())
return "";
std::basic_string<my_char_t> result, tag;
std::basic_string<my_char_t> result;
size_t where = 0;
int width;
@@ -46,57 +46,63 @@ std::string Display::Columns()
else
width = it->width*(it->fixed ? 1 : COLS/100.0);
if (it->name.empty())
std::basic_string<my_char_t> tag;
if (it->type.length() >= 1 && it->name.empty())
{
switch (it->type)
for (size_t j = 0; j < it->type.length(); ++j)
{
case 'l':
tag = U("Time");
break;
case 'f':
tag = U("Filename");
break;
case 'D':
tag = U("Directory");
break;
case 'a':
tag = U("Artist");
break;
case 'A':
tag = U("Album Artist");
break;
case 't':
tag = U("Title");
break;
case 'b':
tag = U("Album");
break;
case 'y':
tag = U("Year");
break;
case 'n':
case 'N':
tag = U("Track");
break;
case 'g':
tag = U("Genre");
break;
case 'c':
tag = U("Composer");
break;
case 'p':
tag = U("Performer");
break;
case 'd':
tag = U("Disc");
break;
case 'C':
tag = U("Comment");
break;
default:
tag.clear();
break;
switch (it->type[j])
{
case 'l':
tag += U("Time");
break;
case 'f':
tag += U("Filename");
break;
case 'D':
tag += U("Directory");
break;
case 'a':
tag += U("Artist");
break;
case 'A':
tag += U("Album Artist");
break;
case 't':
tag += U("Title");
break;
case 'b':
tag += U("Album");
break;
case 'y':
tag += U("Year");
break;
case 'n':
case 'N':
tag += U("Track");
break;
case 'g':
tag += U("Genre");
break;
case 'c':
tag += U("Composer");
break;
case 'p':
tag += U("Performer");
break;
case 'd':
tag += U("Disc");
break;
case 'C':
tag += U("Comment");
break;
default:
tag += U("?");
break;
}
tag += '/';
}
tag.resize(tag.length()-1);
}
else
tag = it->name;
@@ -169,63 +175,66 @@ void Display::SongsInColumns(const MPD::Song &s, void *, Menu<MPD::Song> *menu)
MPD::Song::GetFunction get = 0;
switch (it->type)
std::string tag;
for (size_t i = 0; i < it->type.length(); ++i)
{
case 'l':
get = &MPD::Song::GetLength;
break;
case 'D':
get = &MPD::Song::GetDirectory;
break;
case 'f':
get = &MPD::Song::GetName;
break;
case 'a':
get = &MPD::Song::GetArtist;
break;
case 'A':
get = &MPD::Song::GetAlbumArtist;
break;
case 'b':
get = &MPD::Song::GetAlbum;
break;
case 'y':
get = &MPD::Song::GetDate;
break;
case 'n':
get = &MPD::Song::GetTrackNumber;
break;
case 'N':
get = &MPD::Song::GetTrack;
break;
case 'g':
get = &MPD::Song::GetGenre;
break;
case 'c':
get = &MPD::Song::GetComposer;
break;
case 'p':
get = &MPD::Song::GetPerformer;
break;
case 'd':
get = &MPD::Song::GetDisc;
break;
case 'C':
get = &MPD::Song::GetComment;
break;
case 't':
if (!s.GetTitle().empty())
get = &MPD::Song::GetTitle;
else
switch (it->type[i])
{
case 'l':
get = &MPD::Song::GetLength;
break;
case 'D':
get = &MPD::Song::GetDirectory;
break;
case 'f':
get = &MPD::Song::GetName;
break;
default:
break;
case 'a':
get = &MPD::Song::GetArtist;
break;
case 'A':
get = &MPD::Song::GetAlbumArtist;
break;
case 'b':
get = &MPD::Song::GetAlbum;
break;
case 'y':
get = &MPD::Song::GetDate;
break;
case 'n':
get = &MPD::Song::GetTrackNumber;
break;
case 'N':
get = &MPD::Song::GetTrack;
break;
case 'g':
get = &MPD::Song::GetGenre;
break;
case 'c':
get = &MPD::Song::GetComposer;
break;
case 'p':
get = &MPD::Song::GetPerformer;
break;
case 'd':
get = &MPD::Song::GetDisc;
break;
case 'C':
get = &MPD::Song::GetComment;
break;
case 't':
get = &MPD::Song::GetTitle;
break;
default:
break;
}
tag = get ? s.GetTags(get) : "";
if (!tag.empty())
break;
}
if (!discard_colors && it->color != clDefault)
*menu << it->color;
whline(menu->Raw(), 32, menu->GetWidth()-where);
std::string tag = get ? s.GetTags(get) : "";
// last column might need to be shrinked to make space for np/sel suffixes
if (it == last)