improve handling statusbar messages (+ some minor various fixes)

This commit is contained in:
Andrzej Rybczak
2008-12-11 14:04:14 +01:00
parent 284dd6a5be
commit c61ddd3383
11 changed files with 210 additions and 139 deletions

View File

@@ -47,9 +47,6 @@ extern bool search_case_sensitive;
extern bool search_match_to_pattern; extern bool search_match_to_pattern;
extern string EMPTY_TAG; extern string EMPTY_TAG;
extern string UNKNOWN_ARTIST;
extern string UNKNOWN_TITLE;
extern string UNKNOWN_ALBUM;
const string term_type = getenv("TERM") ? getenv("TERM") : ""; const string term_type = getenv("TERM") ? getenv("TERM") : "";
@@ -274,6 +271,49 @@ void EscapeUnallowedChars(string &s)
} }
} }
Window &operator<<(Window &w, mpd_TagItems tag)
{
switch (tag)
{
case MPD_TAG_ITEM_ARTIST:
w << "Artist";
break;
case MPD_TAG_ITEM_ALBUM:
w << "Album";
break;
case MPD_TAG_ITEM_TITLE:
w << "Title";
break;
case MPD_TAG_ITEM_TRACK:
w << "Track";
break;
case MPD_TAG_ITEM_GENRE:
w << "Genre";
break;
case MPD_TAG_ITEM_DATE:
w << "Year";
break;
case MPD_TAG_ITEM_COMPOSER:
w << "Composer";
break;
case MPD_TAG_ITEM_PERFORMER:
w << "Performer";
break;
case MPD_TAG_ITEM_COMMENT:
w << "Comment";
break;
case MPD_TAG_ITEM_DISC:
w << "Disc";
break;
case MPD_TAG_ITEM_FILENAME:
w << "Filename";
break;
default:
break;
}
return w;
}
string IntoStr(mpd_TagItems tag) string IntoStr(mpd_TagItems tag)
{ {
switch (tag) switch (tag)
@@ -498,7 +538,7 @@ void DisplaySongInColumns(const Song &s, void *s_template, Menu<Song> *menu)
ss = s.GetArtist(); ss = s.GetArtist();
break; break;
case 't': case 't':
if (s.GetTitle() != UNKNOWN_TITLE) if (s.GetTitle() != EMPTY_TAG)
ss = s.GetTitle(); ss = s.GetTitle();
else else
{ {
@@ -554,7 +594,7 @@ void DisplaySongInColumns(const Song &s, void *s_template, Menu<Song> *menu)
void DisplaySong(const Song &s, void *data, Menu<Song> *menu) void DisplaySong(const Song &s, void *data, Menu<Song> *menu)
{ {
const string &song_template = data ? *static_cast<string *>(data) : ""; const string &song_template = data ? *static_cast<string *>(data) : "";
basic_buffer<char> lresult; basic_buffer<my_char_t> buf;
bool right = 0; bool right = 0;
string::const_iterator goto_pos, prev_pos; string::const_iterator goto_pos, prev_pos;
@@ -656,7 +696,7 @@ void DisplaySong(const Song &s, void *data, Menu<Song> *menu)
if (!right) if (!right)
*menu << *it; *menu << *it;
else else
lresult << *it; buf << *it;
} }
else if (*it == '%') else if (*it == '%')
{ {
@@ -666,43 +706,78 @@ void DisplaySong(const Song &s, void *data, Menu<Song> *menu)
if (!right) if (!right)
*menu << s.GetLength(); *menu << s.GetLength();
else else
lresult << s.GetLength(); buf << TO_WSTRING(s.GetLength());
break; break;
case 'F': case 'F':
*menu << s.GetFile(); if (!right)
*menu << s.GetFile();
else
buf << TO_WSTRING(s.GetFile());
break; break;
case 'f': case 'f':
*menu << s.GetName(); if (!right)
*menu << s.GetName();
else
buf << TO_WSTRING(s.GetName());
break; break;
case 'a': case 'a':
*menu << s.GetArtist(); if (!right)
*menu << s.GetArtist();
else
buf << TO_WSTRING(s.GetArtist());
break; break;
case 'b': case 'b':
*menu << s.GetAlbum(); if (!right)
*menu << s.GetAlbum();
else
break; break;
case 'y': case 'y':
*menu << s.GetYear(); if (!right)
*menu << s.GetYear();
else
buf << TO_WSTRING(s.GetYear());
break; break;
case 'n': case 'n':
*menu << s.GetTrack(); if (!right)
*menu << s.GetTrack();
else
buf << TO_WSTRING(s.GetTrack());
break; break;
case 'g': case 'g':
*menu << s.GetGenre(); if (!right)
*menu << s.GetGenre();
else
buf << TO_WSTRING(s.GetGenre());
break; break;
case 'c': case 'c':
*menu << s.GetComposer(); if (!right)
*menu << s.GetComposer();
else
buf << TO_WSTRING(s.GetComposer());
break; break;
case 'p': case 'p':
*menu << s.GetPerformer(); if (!right)
*menu << s.GetPerformer();
else
buf << TO_WSTRING(s.GetPerformer());
break; break;
case 'd': case 'd':
*menu << s.GetDisc(); if (!right)
*menu << s.GetDisc();
else
buf << TO_WSTRING(s.GetDisc());
break; break;
case 'C': case 'C':
*menu << s.GetComment(); if (!right)
*menu << s.GetComment();
else
buf << TO_WSTRING(s.GetComment());
break; break;
case 't': case 't':
*menu << s.GetTitle(); if (!right)
*menu << s.GetTitle();
else
buf << TO_WSTRING(s.GetTitle());
break; break;
case 'r': case 'r':
right = 1; right = 1;
@@ -717,13 +792,13 @@ void DisplaySong(const Song &s, void *data, Menu<Song> *menu)
if (!right) if (!right)
*menu << Color(*it-'0'); *menu << Color(*it-'0');
else else
lresult << Color(*it-'0'); buf << Color(*it-'0');
} }
} }
if (right) if (right)
{ {
menu->GotoXY(menu->GetWidth()-lresult.Str().length(), menu->Y()); menu->GotoXY(menu->GetWidth()-buf.Str().length(), menu->Y());
*menu << lresult; *menu << buf;
} }
} }
@@ -784,3 +859,9 @@ void ShowMessage(const char *format, ...)
} }
} }
Window &Statusbar()
{
wFooter->GotoXY(0, Config.statusbar_visibility);
wclrtoeol(wFooter->Raw());
return *wFooter;
}

View File

@@ -53,6 +53,8 @@ bool Keypressed(int, const int *);
void WindowTitle(const string &); void WindowTitle(const string &);
void EscapeUnallowedChars(string &); void EscapeUnallowedChars(string &);
Window &operator<<(Window &, mpd_TagItems);
string IntoStr(mpd_TagItems); string IntoStr(mpd_TagItems);
string FindSharedDir(const string &, const string &); string FindSharedDir(const string &, const string &);
string TotalPlaylistLength(); string TotalPlaylistLength();
@@ -61,7 +63,9 @@ string DisplayColumns(string);
void DisplaySongInColumns(const Song &, void *, Menu<Song> *); void DisplaySongInColumns(const Song &, void *, Menu<Song> *);
void DisplaySong(const Song &, void * = &Config.song_list_format, Menu<Song> * = NULL); void DisplaySong(const Song &, void * = &Config.song_list_format, Menu<Song> * = NULL);
void GetInfo(Song &, Scrollpad &); void GetInfo(Song &, Scrollpad &);
void ShowMessage(const char *, ...); void ShowMessage(const char *, ...);
Window &Statusbar();
#endif #endif

View File

@@ -21,10 +21,10 @@
#include <algorithm> #include <algorithm>
#include "misc.h" #include "misc.h"
int Abs(int num) /*int Abs(int num)
{ {
return (num < 0 ? -num : num); return (num < 0 ? -num : num);
} }*/
void ToLower(string &s) void ToLower(string &s)
{ {
@@ -43,10 +43,10 @@ string IntoStr(int l)
return ss.str(); return ss.str();
} }
string IntoStr(double l, int precision) /*string IntoStr(double l, int precision)
{ {
std::stringstream ss; std::stringstream ss;
ss << std::fixed << std::setprecision(precision) << l; ss << std::fixed << std::setprecision(precision) << l;
return ss.str(); return ss.str();
} }*/

View File

@@ -28,14 +28,14 @@
using std::string; using std::string;
int Abs(int); //int Abs(int);
void ToLower(string &); void ToLower(string &);
int StrToInt(string); int StrToInt(string);
string IntoStr(int); string IntoStr(int);
string IntoStr(double, int); //string IntoStr(double, int);
#endif #endif

View File

@@ -155,9 +155,6 @@ extern bool search_case_sensitive;
extern bool search_match_to_pattern; extern bool search_match_to_pattern;
extern string EMPTY_TAG; extern string EMPTY_TAG;
extern string UNKNOWN_ARTIST;
extern string UNKNOWN_TITLE;
extern string UNKNOWN_ALBUM;
extern string playlist_stats; extern string playlist_stats;
extern string volume_state; extern string volume_state;
@@ -203,10 +200,7 @@ int main(int argc, char *argv[])
if (!ConnectToMPD()) if (!ConnectToMPD())
return -1; return -1;
InitScreen(); InitScreen(Config.colors_enabled);
//if (Config.colors_enabled)
// Window::EnableColors();
int main_start_y = 2; int main_start_y = 2;
int main_height = LINES-4; int main_height = LINES-4;
@@ -514,7 +508,7 @@ int main(int argc, char *argv[])
Mpd->AddSearch(Config.media_lib_primary_tag, mLibArtists->Current()); Mpd->AddSearch(Config.media_lib_primary_tag, mLibArtists->Current());
Mpd->AddSearch(MPD_TAG_ITEM_ALBUM, *it); Mpd->AddSearch(MPD_TAG_ITEM_ALBUM, *it);
Mpd->CommitSearch(l); Mpd->CommitSearch(l);
if (!l.empty() && l[0]->GetAlbum() != UNKNOWN_ALBUM) if (!l.empty() && l[0]->GetAlbum() != EMPTY_TAG)
maplist[l[0]->toString(Config.media_lib_album_format)] = *it; maplist[l[0]->toString(Config.media_lib_album_format)] = *it;
FreeSongList(l); FreeSongList(l);
} }
@@ -726,7 +720,7 @@ int main(int argc, char *argv[])
if (current_screen == csLyrics && reload_lyrics) if (current_screen == csLyrics && reload_lyrics)
{ {
const Song &s = mPlaylist->at(now_playing); const Song &s = mPlaylist->at(now_playing);
if (s.GetArtist() != UNKNOWN_ARTIST && s.GetTitle() != UNKNOWN_TITLE) if (s.GetArtist() != EMPTY_TAG && s.GetTitle() != EMPTY_TAG)
goto LOAD_LYRICS; goto LOAD_LYRICS;
else else
reload_lyrics = 0; reload_lyrics = 0;
@@ -1020,8 +1014,8 @@ int main(int argc, char *argv[])
{ {
case 1: case 1:
{ {
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]Title:[/b] ", 1); Statusbar() << fmtBold << "Title: " << fmtBoldEnd;
if (s.GetTitle() == UNKNOWN_TITLE) if (s.GetTitle() == EMPTY_TAG)
s.SetTitle(wFooter->GetString()); s.SetTitle(wFooter->GetString());
else else
s.SetTitle(wFooter->GetString(s.GetTitle())); s.SetTitle(wFooter->GetString(s.GetTitle()));
@@ -1030,8 +1024,8 @@ int main(int argc, char *argv[])
} }
case 2: case 2:
{ {
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]Artist:[/b] ", 1); Statusbar() << fmtBold << "Artist: " << fmtBoldEnd;
if (s.GetArtist() == UNKNOWN_ARTIST) if (s.GetArtist() == EMPTY_TAG)
s.SetArtist(wFooter->GetString()); s.SetArtist(wFooter->GetString());
else else
s.SetArtist(wFooter->GetString(s.GetArtist())); s.SetArtist(wFooter->GetString(s.GetArtist()));
@@ -1040,8 +1034,8 @@ int main(int argc, char *argv[])
} }
case 3: case 3:
{ {
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]Album:[/b] ", 1); Statusbar() << fmtBold << "Album: " << fmtBoldEnd;
if (s.GetAlbum() == UNKNOWN_ALBUM) if (s.GetAlbum() == EMPTY_TAG)
s.SetAlbum(wFooter->GetString()); s.SetAlbum(wFooter->GetString());
else else
s.SetAlbum(wFooter->GetString(s.GetAlbum())); s.SetAlbum(wFooter->GetString(s.GetAlbum()));
@@ -1050,7 +1044,7 @@ int main(int argc, char *argv[])
} }
case 4: case 4:
{ {
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]Year:[/b] ", 1); Statusbar() << fmtBold << "Year: " << fmtBoldEnd;
if (s.GetYear() == EMPTY_TAG) if (s.GetYear() == EMPTY_TAG)
s.SetYear(wFooter->GetString(4)); s.SetYear(wFooter->GetString(4));
else else
@@ -1060,7 +1054,7 @@ int main(int argc, char *argv[])
} }
case 5: case 5:
{ {
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]Track:[/b] ", 1); Statusbar() << fmtBold << "Track: " << fmtBoldEnd;
if (s.GetTrack() == EMPTY_TAG) if (s.GetTrack() == EMPTY_TAG)
s.SetTrack(wFooter->GetString(3)); s.SetTrack(wFooter->GetString(3));
else else
@@ -1070,7 +1064,7 @@ int main(int argc, char *argv[])
} }
case 6: case 6:
{ {
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]Genre:[/b] ", 1); Statusbar() << fmtBold << "Genre: " << fmtBoldEnd;
if (s.GetGenre() == EMPTY_TAG) if (s.GetGenre() == EMPTY_TAG)
s.SetGenre(wFooter->GetString()); s.SetGenre(wFooter->GetString());
else else
@@ -1080,7 +1074,7 @@ int main(int argc, char *argv[])
} }
case 7: case 7:
{ {
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]Composer:[/b] ", 1); Statusbar() << fmtBold << "Composer: " << fmtBoldEnd;
if (s.GetComposer() == EMPTY_TAG) if (s.GetComposer() == EMPTY_TAG)
s.SetComposer(wFooter->GetString()); s.SetComposer(wFooter->GetString());
else else
@@ -1090,7 +1084,7 @@ int main(int argc, char *argv[])
} }
case 8: case 8:
{ {
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]Performer:[/b] ", 1); Statusbar() << fmtBold << "Performer: " << fmtBoldEnd;
if (s.GetPerformer() == EMPTY_TAG) if (s.GetPerformer() == EMPTY_TAG)
s.SetPerformer(wFooter->GetString()); s.SetPerformer(wFooter->GetString());
else else
@@ -1100,7 +1094,7 @@ int main(int argc, char *argv[])
} }
case 9: case 9:
{ {
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]Disc:[/b] ", 1); Statusbar() << fmtBold << "Disc: " << fmtBoldEnd;
if (s.GetDisc() == EMPTY_TAG) if (s.GetDisc() == EMPTY_TAG)
s.SetDisc(wFooter->GetString()); s.SetDisc(wFooter->GetString());
else else
@@ -1110,7 +1104,7 @@ int main(int argc, char *argv[])
} }
case 10: case 10:
{ {
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]Comment:[/b] ", 1); Statusbar() << fmtBold << "Comment: " << fmtBoldEnd;
if (s.GetComment() == EMPTY_TAG) if (s.GetComment() == EMPTY_TAG)
s.SetComment(wFooter->GetString()); s.SetComment(wFooter->GetString());
else else
@@ -1120,7 +1114,7 @@ int main(int argc, char *argv[])
} }
case 12: case 12:
{ {
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]Filename:[/b] ", 1); Statusbar() << fmtBold << "Filename: " << fmtBoldEnd;
string filename = s.GetNewName().empty() ? s.GetName() : s.GetNewName(); string filename = s.GetNewName().empty() ? s.GetName() : s.GetNewName();
int dot = filename.find_last_of("."); int dot = filename.find_last_of(".");
string extension = filename.substr(dot); string extension = filename.substr(dot);
@@ -1194,7 +1188,7 @@ int main(int argc, char *argv[])
{ {
case 1: case 1:
{ {
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]Filename:[/b] ", 1); Statusbar() << fmtBold << "Filename: " << fmtBoldEnd;
if (s.GetName() == EMPTY_TAG) if (s.GetName() == EMPTY_TAG)
s.SetFile(wFooter->GetString()); s.SetFile(wFooter->GetString());
else else
@@ -1204,8 +1198,8 @@ int main(int argc, char *argv[])
} }
case 2: case 2:
{ {
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]Title:[/b] ", 1); Statusbar() << fmtBold << "Title: " << fmtBoldEnd;
if (s.GetTitle() == UNKNOWN_TITLE) if (s.GetTitle() == EMPTY_TAG)
s.SetTitle(wFooter->GetString()); s.SetTitle(wFooter->GetString());
else else
s.SetTitle(wFooter->GetString(s.GetTitle())); s.SetTitle(wFooter->GetString(s.GetTitle()));
@@ -1214,8 +1208,8 @@ int main(int argc, char *argv[])
} }
case 3: case 3:
{ {
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]Artist:[/b] ", 1); Statusbar() << fmtBold << "Artist: " << fmtBoldEnd;
if (s.GetArtist() == UNKNOWN_ARTIST) if (s.GetArtist() == EMPTY_TAG)
s.SetArtist(wFooter->GetString()); s.SetArtist(wFooter->GetString());
else else
s.SetArtist(wFooter->GetString(s.GetArtist())); s.SetArtist(wFooter->GetString(s.GetArtist()));
@@ -1224,8 +1218,8 @@ int main(int argc, char *argv[])
} }
case 4: case 4:
{ {
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]Album:[/b] ", 1); Statusbar() << fmtBold << "Album: " << fmtBoldEnd;
if (s.GetAlbum() == UNKNOWN_ALBUM) if (s.GetAlbum() == EMPTY_TAG)
s.SetAlbum(wFooter->GetString()); s.SetAlbum(wFooter->GetString());
else else
s.SetAlbum(wFooter->GetString(s.GetAlbum())); s.SetAlbum(wFooter->GetString(s.GetAlbum()));
@@ -1234,7 +1228,7 @@ int main(int argc, char *argv[])
} }
case 5: case 5:
{ {
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]Year:[/b] ", 1); Statusbar() << fmtBold << "Year: " << fmtBoldEnd;
if (s.GetYear() == EMPTY_TAG) if (s.GetYear() == EMPTY_TAG)
s.SetYear(wFooter->GetString(4)); s.SetYear(wFooter->GetString(4));
else else
@@ -1244,7 +1238,7 @@ int main(int argc, char *argv[])
} }
case 6: case 6:
{ {
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]Track:[/b] ", 1); Statusbar() << fmtBold << "Track: " << fmtBoldEnd;
if (s.GetTrack() == EMPTY_TAG) if (s.GetTrack() == EMPTY_TAG)
s.SetTrack(wFooter->GetString(3)); s.SetTrack(wFooter->GetString(3));
else else
@@ -1254,7 +1248,7 @@ int main(int argc, char *argv[])
} }
case 7: case 7:
{ {
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]Genre:[/b] ", 1); Statusbar() << fmtBold << "Genre: " << fmtBoldEnd;
if (s.GetGenre() == EMPTY_TAG) if (s.GetGenre() == EMPTY_TAG)
s.SetGenre(wFooter->GetString()); s.SetGenre(wFooter->GetString());
else else
@@ -1264,7 +1258,7 @@ int main(int argc, char *argv[])
} }
case 8: case 8:
{ {
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]Comment:[/b] ", 1); Statusbar() << fmtBold << "Comment: " << fmtBoldEnd;
if (s.GetComment() == EMPTY_TAG) if (s.GetComment() == EMPTY_TAG)
s.SetComment(wFooter->GetString()); s.SetComment(wFooter->GetString());
else else
@@ -1604,7 +1598,7 @@ int main(int argc, char *argv[])
if (wCurrent == mEditorTagTypes) if (wCurrent == mEditorTagTypes)
{ {
LockStatusbar(); LockStatusbar();
wFooter->WriteXY(0, Config.statusbar_visibility, "Number tracks? [y/n] ", 1); Statusbar() << "Number tracks? [y/n] ";
curs_set(1); curs_set(1);
int in = 0; int in = 0;
do do
@@ -1665,7 +1659,7 @@ int main(int argc, char *argv[])
string extension = old_name.substr(last_dot); string extension = old_name.substr(last_dot);
old_name = old_name.substr(0, last_dot); old_name = old_name.substr(0, last_dot);
LockStatusbar(); LockStatusbar();
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]New filename:[/b] ", 1); Statusbar() << fmtBold << "New filename: " << fmtBoldEnd;
string new_name = wFooter->GetString(old_name); string new_name = wFooter->GetString(old_name);
UnlockStatusbar(); UnlockStatusbar();
if (!new_name.empty() && new_name != old_name) if (!new_name.empty() && new_name != old_name)
@@ -1715,7 +1709,7 @@ int main(int argc, char *argv[])
if (wCurrent == mEditorTagTypes && id != 0 && id != 4 && set != NULL) if (wCurrent == mEditorTagTypes && id != 0 && id != 4 && set != NULL)
{ {
LockStatusbar(); LockStatusbar();
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]" + mEditorTagTypes->Current() + "[/b]: ", 1); Statusbar() << fmtBold << mEditorTagTypes->Current() << fmtBoldEnd << ": ";
mEditorTags->Current().GetEmptyFields(1); mEditorTags->Current().GetEmptyFields(1);
string new_tag = wFooter->GetString((mEditorTags->Current().*get)()); string new_tag = wFooter->GetString((mEditorTags->Current().*get)());
mEditorTags->Current().GetEmptyFields(0); mEditorTags->Current().GetEmptyFields(0);
@@ -1727,7 +1721,7 @@ int main(int argc, char *argv[])
else if (wCurrent == mEditorTags && set != NULL) else if (wCurrent == mEditorTags && set != NULL)
{ {
LockStatusbar(); LockStatusbar();
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]" + mEditorTagTypes->Current() + "[/b]: ", 1); Statusbar() << fmtBold << mEditorTagTypes->Current() << fmtBoldEnd << ": ";
mEditorTags->Current().GetEmptyFields(1); mEditorTags->Current().GetEmptyFields(1);
string new_tag = wFooter->GetString((mEditorTags->Current().*get)()); string new_tag = wFooter->GetString((mEditorTags->Current().*get)());
mEditorTags->Current().GetEmptyFields(0); mEditorTags->Current().GetEmptyFields(0);
@@ -2041,7 +2035,7 @@ int main(int argc, char *argv[])
const string &name = wCurrent == mBrowser ? mBrowser->Current().name : mPlaylistList->Current(); const string &name = wCurrent == mBrowser ? mBrowser->Current().name : mPlaylistList->Current();
if (current_screen != csBrowser || mBrowser->Current().type == itPlaylist) if (current_screen != csBrowser || mBrowser->Current().type == itPlaylist)
{ {
wFooter->WriteXY(0, Config.statusbar_visibility, "Delete playlist " + name + " ? [y/n] ", 1); Statusbar() << "Delete playlist " << name << " ? [y/n] ";
curs_set(1); curs_set(1);
int in = 0; int in = 0;
do do
@@ -2110,7 +2104,7 @@ int main(int argc, char *argv[])
else if (Keypressed(input, Key.SavePlaylist)) else if (Keypressed(input, Key.SavePlaylist))
{ {
LockStatusbar(); LockStatusbar();
wFooter->WriteXY(0, Config.statusbar_visibility, "Save playlist as: ", 1); Statusbar() << "Save playlist as: ";
string playlist_name = wFooter->GetString(); string playlist_name = wFooter->GetString();
UnlockStatusbar(); UnlockStatusbar();
if (playlist_name.find("/") != string::npos) if (playlist_name.find("/") != string::npos)
@@ -2128,7 +2122,7 @@ int main(int argc, char *argv[])
else else
{ {
LockStatusbar(); LockStatusbar();
wFooter->WriteXY(0, Config.statusbar_visibility, "Playlist already exists, overwrite: " + playlist_name + " ? [y/n] ", 1); Statusbar() << "Playlist already exists, overwrite: " << playlist_name << " ? [y/n] ";
curs_set(1); curs_set(1);
int in = 0; int in = 0;
messages_allowed = 0; messages_allowed = 0;
@@ -2298,7 +2292,7 @@ int main(int argc, char *argv[])
} }
else else
{ {
int from, to; size_t from, to;
from = to = mPlaylist->Choice(); from = to = mPlaylist->Choice();
// unbold now playing as if song changes during move, this won't be unbolded. // unbold now playing as if song changes during move, this won't be unbolded.
if (to == now_playing && to < mPlaylist->Size()-1) if (to == now_playing && to < mPlaylist->Size()-1)
@@ -2348,7 +2342,7 @@ int main(int argc, char *argv[])
} }
else else
{ {
int from, to; size_t from, to;
from = to = mPlaylistEditor->Choice(); from = to = mPlaylistEditor->Choice();
while (Keypressed(input, Key.MvSongDown) && to < mPlaylistEditor->Size()-1) while (Keypressed(input, Key.MvSongDown) && to < mPlaylistEditor->Size()-1)
{ {
@@ -2369,7 +2363,7 @@ int main(int argc, char *argv[])
else if (Keypressed(input, Key.Add)) else if (Keypressed(input, Key.Add))
{ {
LockStatusbar(); LockStatusbar();
wFooter->WriteXY(0, Config.statusbar_visibility, "Add: ", 1); Statusbar() << "Add: ";
string path = wFooter->GetString(); string path = wFooter->GetString();
UnlockStatusbar(); UnlockStatusbar();
if (!path.empty()) if (!path.empty())
@@ -2500,7 +2494,7 @@ int main(int argc, char *argv[])
else if (Keypressed(input, Key.SetCrossfade)) else if (Keypressed(input, Key.SetCrossfade))
{ {
LockStatusbar(); LockStatusbar();
wFooter->WriteXY(0, Config.statusbar_visibility, "Set crossfade to: ", 1); Statusbar() << "Set crossfade to: ";
string crossfade = wFooter->GetString(3); string crossfade = wFooter->GetString(3);
UnlockStatusbar(); UnlockStatusbar();
int cf = StrToInt(crossfade); int cf = StrToInt(crossfade);
@@ -2517,7 +2511,7 @@ int main(int argc, char *argv[])
if (wCurrent == mLibArtists) if (wCurrent == mLibArtists)
{ {
LockStatusbar(); LockStatusbar();
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]" + IntoStr(Config.media_lib_primary_tag) + ":[/b] ", 1); Statusbar() << fmtBold << Config.media_lib_primary_tag << fmtBoldEnd << ": ";
string new_tag = wFooter->GetString(mLibArtists->Current()); string new_tag = wFooter->GetString(mLibArtists->Current());
UnlockStatusbar(); UnlockStatusbar();
if (!new_tag.empty() && new_tag != mLibArtists->Current()) if (!new_tag.empty() && new_tag != mLibArtists->Current())
@@ -2554,7 +2548,7 @@ int main(int argc, char *argv[])
else if (wCurrent == mLibAlbums) else if (wCurrent == mLibAlbums)
{ {
LockStatusbar(); LockStatusbar();
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]Album:[/b] ", 1); Statusbar() << fmtBold << "Album: " << fmtBoldEnd;
string new_album = wFooter->GetString(mLibAlbums->Current().second); string new_album = wFooter->GetString(mLibAlbums->Current().second);
UnlockStatusbar(); UnlockStatusbar();
if (!new_album.empty() && new_album != mLibAlbums->Current().second) if (!new_album.empty() && new_album != mLibAlbums->Current().second)
@@ -2647,7 +2641,7 @@ int main(int argc, char *argv[])
{ {
string old_dir = mEditorDirs->Current().first; string old_dir = mEditorDirs->Current().first;
LockStatusbar(); LockStatusbar();
wFooter->WriteXY(0, Config.statusbar_visibility, "Directory: ", 1); Statusbar() << fmtBold << "Directory: " << fmtBoldEnd;
string new_dir = wFooter->GetString(old_dir); string new_dir = wFooter->GetString(old_dir);
UnlockStatusbar(); UnlockStatusbar();
if (!new_dir.empty() && new_dir != old_dir) if (!new_dir.empty() && new_dir != old_dir)
@@ -2669,7 +2663,7 @@ int main(int argc, char *argv[])
{ {
string old_dir = mBrowser->Current().name; string old_dir = mBrowser->Current().name;
LockStatusbar(); LockStatusbar();
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]Directory:[/b] ", 1); Statusbar() << fmtBold << "Directory: " << fmtBoldEnd;
string new_dir = wFooter->GetString(old_dir); string new_dir = wFooter->GetString(old_dir);
UnlockStatusbar(); UnlockStatusbar();
if (!new_dir.empty() && new_dir != old_dir) if (!new_dir.empty() && new_dir != old_dir)
@@ -2697,7 +2691,7 @@ int main(int argc, char *argv[])
{ {
string old_name = wCurrent == mPlaylistList ? mPlaylistList->Current() : mBrowser->Current().name; string old_name = wCurrent == mPlaylistList ? mPlaylistList->Current() : mBrowser->Current().name;
LockStatusbar(); LockStatusbar();
wFooter->WriteXY(0, Config.statusbar_visibility, "[.b]Playlist:[/b] ", 1); Statusbar() << fmtBold << "Playlist: " << fmtBoldEnd;
string new_name = wFooter->GetString(old_name); string new_name = wFooter->GetString(old_name);
UnlockStatusbar(); UnlockStatusbar();
if (!new_name.empty() && new_name != old_name) if (!new_name.empty() && new_name != old_name)
@@ -2777,7 +2771,7 @@ int main(int argc, char *argv[])
continue; continue;
} }
LockStatusbar(); LockStatusbar();
wFooter->WriteXY(0, Config.statusbar_visibility, "Position to go (in %): ", 1); Statusbar() << "Position to go (in %): ";
string position = wFooter->GetString(3); string position = wFooter->GetString(3);
int newpos = StrToInt(position); int newpos = StrToInt(position);
if (newpos > 0 && newpos < 100 && !position.empty()) if (newpos > 0 && newpos < 100 && !position.empty())
@@ -2924,7 +2918,7 @@ int main(int argc, char *argv[])
mDialog->Scroll(wEnd); mDialog->Scroll(wEnd);
} }
int id = mDialog->Choice(); size_t id = mDialog->Choice();
redraw_screen = 1; redraw_screen = 1;
if (current_screen == csLibrary) if (current_screen == csLibrary)
@@ -2953,7 +2947,7 @@ int main(int argc, char *argv[])
else if (id == 1) else if (id == 1)
{ {
LockStatusbar(); LockStatusbar();
wFooter->WriteXY(0, Config.statusbar_visibility, "Save playlist as: ", 1); Statusbar() << "Save playlist as: ";
string playlist = wFooter->GetString(); string playlist = wFooter->GetString();
UnlockStatusbar(); UnlockStatusbar();
if (!playlist.empty()) if (!playlist.empty())
@@ -3038,7 +3032,7 @@ int main(int argc, char *argv[])
found_pos = -1; found_pos = -1;
vFoundPositions.clear(); vFoundPositions.clear();
LockStatusbar(); LockStatusbar();
wFooter->WriteXY(0, Config.statusbar_visibility, "Find " + how + ": ", 1); Statusbar() << "Find " << how << ": ";
string findme = wFooter->GetString(); string findme = wFooter->GetString();
UnlockStatusbar(); UnlockStatusbar();
timer = time(NULL); timer = time(NULL);
@@ -3149,7 +3143,7 @@ int main(int argc, char *argv[])
else if (wCurrent == mLibArtists) else if (wCurrent == mLibArtists)
{ {
LockStatusbar(); LockStatusbar();
wFooter->WriteXY(0, Config.statusbar_visibility, "Tag type ? [[.b]a[/b]rtist/[.b]y[/b]ear/[.b]g[/b]enre/[.b]c[/b]omposer/[.b]p[/b]erformer] ", 1); Statusbar() << "Tag type ? [" << fmtBold << 'a' << fmtBoldEnd << "rtist/" << fmtBold << 'y' << fmtBoldEnd << "ear/" << fmtBold << 'g' << fmtBoldEnd << "enre/" << fmtBold << 'c' << fmtBoldEnd << "omposer/" << fmtBold << 'p' << fmtBoldEnd << "erformer] ";
int item; int item;
curs_set(1); curs_set(1);
do do
@@ -3302,7 +3296,7 @@ int main(int argc, char *argv[])
default: default:
break; break;
} }
if (*artist != UNKNOWN_ARTIST) if (*artist != EMPTY_TAG)
{ {
wPrev = wCurrent; wPrev = wCurrent;
wCurrent = sInfo; wCurrent = sInfo;
@@ -3393,7 +3387,7 @@ int main(int argc, char *argv[])
default: default:
break; break;
} }
if (s->GetArtist() != UNKNOWN_ARTIST && s->GetTitle() != UNKNOWN_TITLE) if (s->GetArtist() != EMPTY_TAG && s->GetTitle() != EMPTY_TAG)
{ {
wPrev = wCurrent; wPrev = wCurrent;
prev_screen = current_screen; prev_screen = current_screen;

View File

@@ -123,9 +123,9 @@ void Scrollpad::MoveTo(size_t x, size_t y)
void Scrollpad::Resize(size_t width, size_t height) void Scrollpad::Resize(size_t width, size_t height)
{ {
if (width+itsStartX > size_t(COLS) /*if (width+itsStartX > size_t(COLS)
|| height+itsStartY > size_t(LINES)) || height+itsStartY > size_t(LINES))
throw BadSize(); throw BadSize();*/
if (itsBorder != brNone) if (itsBorder != brNone)
{ {

View File

@@ -24,27 +24,10 @@
extern ncmpcpp_config Config; extern ncmpcpp_config Config;
string EMPTY_TAG; string EMPTY_TAG;
string UNKNOWN_ARTIST;
string UNKNOWN_TITLE;
string UNKNOWN_ALBUM;
void DefineEmptyTags() void DefineEmptyTags()
{ {
/*if (Config.empty_tags_color != clDefault) EMPTY_TAG = "<empty>";
{
const string et_col = IntoStr(Config.empty_tags_color);
EMPTY_TAG = "[." + et_col + "]<empty>[/" + et_col + "]";
UNKNOWN_ARTIST = "[." + et_col + "]<no artist>[/" + et_col + "]";
UNKNOWN_TITLE = "[." + et_col + "]<no title>[/" + et_col + "]";
UNKNOWN_ALBUM = "[." + et_col + "]<no album>[/" + et_col + "]";
}
else
{*/
EMPTY_TAG = "<empty>";
UNKNOWN_ARTIST = "<empty>";
UNKNOWN_TITLE = "<empty>";
UNKNOWN_ALBUM = "<empty>";
// }
} }
Song::Song(mpd_Song *s, bool copy_ptr) : itsSong(s), Song::Song(mpd_Song *s, bool copy_ptr) : itsSong(s),
@@ -138,17 +121,17 @@ string Song::GetDirectory() const
string Song::GetArtist() const string Song::GetArtist() const
{ {
return !itsSong->artist ? (itsGetEmptyFields ? "" : UNKNOWN_ARTIST) : itsSong->artist; return !itsSong->artist ? (itsGetEmptyFields ? "" : EMPTY_TAG) : itsSong->artist;
} }
string Song::GetTitle() const string Song::GetTitle() const
{ {
return !itsSong->title ? (itsGetEmptyFields ? "" : UNKNOWN_TITLE) : itsSong->title; return !itsSong->title ? (itsGetEmptyFields ? "" : EMPTY_TAG) : itsSong->title;
} }
string Song::GetAlbum() const string Song::GetAlbum() const
{ {
return !itsSong->album ? (itsGetEmptyFields ? "" : UNKNOWN_ALBUM) : itsSong->album; return !itsSong->album ? (itsGetEmptyFields ? "" : EMPTY_TAG) : itsSong->album;
} }
string Song::GetTrack() const string Song::GetTrack() const

View File

@@ -123,7 +123,7 @@ void NcmpcppErrorCallback(Connection *Mpd, int errorid, const char *msg, void *)
if (errorid == MPD_ACK_ERROR_PERMISSION) if (errorid == MPD_ACK_ERROR_PERMISSION)
{ {
wFooter->SetGetStringHelper(NULL); wFooter->SetGetStringHelper(NULL);
wFooter->WriteXY(0, Config.statusbar_visibility, "Password: ", 1); Statusbar() << "Password: ";
string password = wFooter->GetString(); string password = wFooter->GetString();
Mpd->SetPassword(password); Mpd->SetPassword(password);
Mpd->SendPassword(); Mpd->SendPassword();
@@ -160,7 +160,7 @@ void NcmpcppStatusChanged(Connection *Mpd, StatusChanges changed, void *)
if (!block_playlist_update) if (!block_playlist_update)
{ {
SongList list; SongList list;
int playlist_length = Mpd->GetPlaylistLength(); size_t playlist_length = Mpd->GetPlaylistLength();
if (playlist_length != mPlaylist->Size()) if (playlist_length != mPlaylist->Size())
{ {
if (playlist_length < mPlaylist->Size()) if (playlist_length < mPlaylist->Size())
@@ -190,7 +190,7 @@ void NcmpcppStatusChanged(Connection *Mpd, StatusChanges changed, void *)
{ {
Mpd->GetPlaylistChanges(-1, list); Mpd->GetPlaylistChanges(-1, list);
for (int i = 0; i < mPlaylist->Size(); i++) for (size_t i = 0; i < mPlaylist->Size(); i++)
{ {
if (*list[i] != mPlaylist->at(i)) if (*list[i] != mPlaylist->at(i))
{ {

View File

@@ -121,7 +121,7 @@ namespace
try try
{ {
for (int i = mask.find("%"); i != string::npos; i = mask.find("%")) for (size_t i = mask.find("%"); i != string::npos; i = mask.find("%"))
{ {
tags.push_back(make_pair(mask.at(i+1), "")); tags.push_back(make_pair(mask.at(i+1), ""));
mask = mask.substr(i+2); mask = mask.substr(i+2);
@@ -197,7 +197,7 @@ SongSetFunction IntoSetFunction(mpd_TagItems tag)
string FindSharedDir(Menu<Song> *menu) string FindSharedDir(Menu<Song> *menu)
{ {
SongList list; SongList list;
for (int i = 0; i < menu->Size(); i++) for (size_t i = 0; i < menu->Size(); i++)
list.push_back(&menu->at(i)); list.push_back(&menu->at(i));
return FindSharedDir(list); return FindSharedDir(list);
} }
@@ -215,7 +215,7 @@ string FindSharedDir(const SongList &v)
i++; i++;
result = result.substr(0, i); result = result.substr(0, i);
} }
int slash = result.find_last_of("/"); size_t slash = result.find_last_of("/");
result = slash != string::npos ? result.substr(0, slash) : "/"; result = slash != string::npos ? result.substr(0, slash) : "/";
} }
return result; return result;
@@ -562,13 +562,14 @@ void __deal_with_filenames(SongList &v)
case 0: case 0:
{ {
LockStatusbar(); LockStatusbar();
wFooter->WriteXY(0, Config.statusbar_visibility, "Pattern: ", 1); Statusbar() << "Pattern: ";
string new_pattern = wFooter->GetString(Config.pattern); string new_pattern = wFooter->GetString(Config.pattern);
UnlockStatusbar(); UnlockStatusbar();
if (!new_pattern.empty()) if (!new_pattern.empty())
{ {
Config.pattern = new_pattern; Config.pattern = new_pattern;
Main->at(0) = "Pattern: " + Config.pattern; Main->at(0) = "Pattern: ";
Main->at(0) += Config.pattern;
} }
break; break;
} }
@@ -624,7 +625,7 @@ void __deal_with_filenames(SongList &v)
} }
else else
{ {
for (int i = 0; i < patterns_list.size(); i++) for (size_t i = 0; i < patterns_list.size(); i++)
{ {
if (patterns_list[i] == Config.pattern) if (patterns_list[i] == Config.pattern)
{ {

View File

@@ -20,11 +20,11 @@
#include "window.h" #include "window.h"
void InitScreen() void InitScreen(bool enable_colors)
{ {
setlocale(LC_ALL, ""); setlocale(LC_ALL, "");
initscr(); initscr();
if (has_colors()) if (has_colors() && enable_colors)
{ {
start_color(); start_color();
use_default_colors(); use_default_colors();
@@ -201,27 +201,35 @@ void Window::Recreate()
keypad(itsWindow, 1); keypad(itsWindow, 1);
} }
void Window::MoveTo(int newx, int newy) void Window::MoveTo(size_t newx, size_t newy)
{ {
if (newx < 0 || newy < 0 || (newx == itsStartX && newy == itsStartY)) if (newx == itsStartX && newy == itsStartY)
return; return;
else
/*if (newx > size_t(COLS)
|| newy > size_t(LINES)
|| itsWidth+newx > size_t(COLS)
|| itsHeight+newy > size_t(LINES))
throw BadSize();*/
itsStartX = newx;
itsStartY = newy;
if (itsBorder != brNone)
{ {
itsStartX = newx; itsStartX++;
itsStartY = newy; itsStartY++;
if (itsBorder != brNone)
{
itsStartX++;
itsStartY++;
}
if (!itsTitle.empty())
itsStartY += 2;
mvwin(itsWindow, itsStartY, itsStartX);
} }
if (!itsTitle.empty())
itsStartY += 2;
mvwin(itsWindow, itsStartY, itsStartX);
} }
void Window::Resize(int width, int height) void Window::Resize(size_t width, size_t height)
{ {
/*if (width+itsStartX > size_t(COLS)
|| height+itsStartY > size_t(LINES))
throw BadSize();*/
if (itsBorder != brNone) if (itsBorder != brNone)
{ {
delwin(itsWinBorder); delwin(itsWinBorder);
@@ -234,7 +242,7 @@ void Window::Resize(int width, int height)
if (!itsTitle.empty()) if (!itsTitle.empty())
height -= 2; height -= 2;
if (height > 0 && width > 0 && wresize(itsWindow, height, width) == OK) if (wresize(itsWindow, height, width) == OK)
{ {
itsHeight = height; itsHeight = height;
itsWidth = width; itsWidth = width;
@@ -282,7 +290,7 @@ void Window::Clear(bool)
void Window::Hide(char x) const void Window::Hide(char x) const
{ {
for (int i = 0; i < GetHeight(); i++) for (size_t i = 0; i < GetHeight(); i++)
mvhline(i+GetStartY(), GetStartX(), x, GetWidth()); mvhline(i+GetStartY(), GetStartX(), x, GetWidth());
refresh(); refresh();
} }

View File

@@ -58,7 +58,7 @@ enum Where { wUp, wDown, wPageUp, wPageDown, wHome, wEnd };
typedef void (*GetStringHelper)(); typedef void (*GetStringHelper)();
void InitScreen(); void InitScreen(bool);
void DestroyScreen(); void DestroyScreen();
struct Colors struct Colors
@@ -119,9 +119,9 @@ class Window
void Display(); void Display();
virtual void Refresh(); virtual void Refresh();
virtual void MoveTo(int, int); virtual void MoveTo(size_t, size_t);
virtual void Resize(int, int); virtual void Resize(size_t, size_t);
virtual void Clear(bool stub = 1); virtual void Clear(bool = 1);
void ReadKey(int &) const; void ReadKey(int &) const;
void ReadKey() const; void ReadKey() const;