update Window::WriteXY() and related stuff

This commit is contained in:
Andrzej Rybczak
2008-12-11 15:08:56 +01:00
parent c61ddd3383
commit 563c4530aa
6 changed files with 59 additions and 54 deletions

View File

@@ -847,6 +847,7 @@ void ShowMessage(const char *format, ...)
block_statusbar_update = 1; block_statusbar_update = 1;
else else
block_progressbar_update = 1; block_progressbar_update = 1;
wFooter->GotoXY(0, Config.statusbar_visibility);
wFooter->Bold(0); wFooter->Bold(0);
va_list list; va_list list;
va_start(list, format); va_start(list, format);

View File

@@ -259,6 +259,11 @@ void Menu<T>::Swap(size_t one, size_t two)
template <class T> void Menu<T>::Refresh() template <class T> void Menu<T>::Refresh()
{ {
if (itsOptions.empty())
{
wrefresh(itsWindow);
return;
}
int MaxBeginning = itsOptions.size() < itsHeight ? 0 : itsOptions.size()-itsHeight; int MaxBeginning = itsOptions.size() < itsHeight ? 0 : itsOptions.size()-itsHeight;
if (itsBeginning < 0) if (itsBeginning < 0)
itsBeginning = 0; itsBeginning = 0;

View File

@@ -53,7 +53,10 @@
mvvline(main_start_y, right_col_startx-1, 0, main_height); \ mvvline(main_start_y, right_col_startx-1, 0, main_height); \
mLibSongs->Display(); \ mLibSongs->Display(); \
if (mLibAlbums->Empty()) \ if (mLibAlbums->Empty()) \
mLibAlbums->WriteXY(0, 0, "No albums found."); \ { \
mLibAlbums->WriteXY(0, 0, 0, "No albums found."); \
mLibAlbums->Refresh(); \
} \
} while (0) } while (0)
#define REFRESH_PLAYLIST_EDITOR_SCREEN \ #define REFRESH_PLAYLIST_EDITOR_SCREEN \
@@ -419,11 +422,11 @@ int main(int argc, char *argv[])
if (title_allowed) if (title_allowed)
{ {
wHeader->Bold(1); wHeader->Bold(1);
wHeader->WriteXY(0, 0, max_allowed_title_length, title, 1); wHeader->WriteXY(0, 0, 1, "%s", title.c_str());
wHeader->Bold(0); wHeader->Bold(0);
if (current_screen == csPlaylist && !playlist_stats.empty()) if (current_screen == csPlaylist && !playlist_stats.empty())
wHeader->WriteXY(title.length(), 0, max_allowed_title_length-title.length(), playlist_stats); wHeader->WriteXY(title.length(), 0, 0, "%s", playlist_stats.c_str());
else if (current_screen == csBrowser) else if (current_screen == csBrowser)
{ {
size_t max_length_without_scroll = wHeader->GetWidth()-volume_state.length()-title.length(); size_t max_length_without_scroll = wHeader->GetWidth()-volume_state.length()-title.length();
@@ -440,12 +443,12 @@ int main(int argc, char *argv[])
my_string_t part = wbrowseddir.substr(browsed_dir_scroll_begin++, scrollsize); my_string_t part = wbrowseddir.substr(browsed_dir_scroll_begin++, scrollsize);
if (part.length() < scrollsize) if (part.length() < scrollsize)
part += wbrowseddir.substr(0, scrollsize-part.length()); part += wbrowseddir.substr(0, scrollsize-part.length());
wHeader->WriteXY(title.length(), 0, part); wHeader->WriteXY(title.length(), 0, 0, UTF_S_FMT, part.c_str());
if (browsed_dir_scroll_begin >= wbrowseddir.length()) if (browsed_dir_scroll_begin >= wbrowseddir.length())
browsed_dir_scroll_begin = 0; browsed_dir_scroll_begin = 0;
} }
else else
wHeader->WriteXY(title.length(), 0, browsed_dir); wHeader->WriteXY(title.length(), 0, 0, "%s", browsed_dir.c_str());
wHeader->Bold(0); wHeader->Bold(0);
} }
} }
@@ -455,16 +458,21 @@ int main(int argc, char *argv[])
# ifdef HAVE_TAGLIB_H # ifdef HAVE_TAGLIB_H
screens += " [.b]7:[/b]Tag editor"; screens += " [.b]7:[/b]Tag editor";
# endif // HAVE_TAGLIB_H # endif // HAVE_TAGLIB_H
wHeader->WriteXY(0, 0, max_allowed_title_length, screens, 1); wHeader->WriteXY(0, 0, 1, "%s", screens.c_str());
} }
wHeader->SetColor(Config.volume_color); wHeader->SetColor(Config.volume_color);
wHeader->WriteXY(max_allowed_title_length, 0, volume_state); wHeader->WriteXY(max_allowed_title_length, 0, 0, "%s", volume_state.c_str());
wHeader->SetColor(Config.header_color); wHeader->SetColor(Config.header_color);
wHeader->Refresh(); wHeader->Refresh();
redraw_header = 0; redraw_header = 0;
} }
// header stuff end // header stuff end
if (current_screen == csHelp
|| current_screen == csPlaylist
|| current_screen == csBrowser);
else
// media library stuff // media library stuff
if (current_screen == csLibrary) if (current_screen == csLibrary)
{ {
@@ -531,7 +539,8 @@ int main(int argc, char *argv[])
SongList list; SongList list;
if (mLibAlbums->Empty()) if (mLibAlbums->Empty())
{ {
mLibAlbums->WriteXY(0, 0, "No albums found."); mLibAlbums->WriteXY(0, 0, 0, "No albums found.");
mLibAlbums->Refresh();
mLibSongs->Clear(0); mLibSongs->Clear(0);
Mpd->StartSearch(1); Mpd->StartSearch(1);
Mpd->AddSearch(Config.media_lib_primary_tag, mLibArtists->Current()); Mpd->AddSearch(Config.media_lib_primary_tag, mLibArtists->Current());
@@ -618,7 +627,10 @@ int main(int argc, char *argv[])
} }
if (mPlaylistEditor->Empty()) if (mPlaylistEditor->Empty())
mPlaylistEditor->WriteXY(0, 0, "Playlist is empty."); {
mPlaylistEditor->WriteXY(0, 0, 0, "Playlist is empty.");
mPlaylistEditor->Refresh();
}
} }
// playlist editor end // playlist editor end
else else
@@ -635,7 +647,7 @@ int main(int argc, char *argv[])
if (Config.albums_in_tag_editor) if (Config.albums_in_tag_editor)
{ {
std::map<string, string, CaseInsensitiveSorting> maplist; std::map<string, string, CaseInsensitiveSorting> maplist;
mEditorAlbums->WriteXY(0, 0, "Fetching albums' list..."); mEditorAlbums->WriteXY(0, 0, 0, "Fetching albums' list...");
Mpd->GetAlbums("", list); Mpd->GetAlbums("", list);
for (TagList::const_iterator it = list.begin(); it != list.end(); it++) for (TagList::const_iterator it = list.begin(); it != list.end(); it++)
{ {
@@ -2427,7 +2439,7 @@ int main(int argc, char *argv[])
wFooter->Bold(1); wFooter->Bold(1);
string tracklength = "[" + Song::ShowTime(songpos) + "/" + s.GetLength() + "]"; string tracklength = "[" + Song::ShowTime(songpos) + "/" + s.GetLength() + "]";
wFooter->WriteXY(wFooter->GetWidth()-tracklength.length(), 1, tracklength); wFooter->WriteXY(wFooter->GetWidth()-tracklength.length(), 1, 0, "%s", tracklength.c_str());
double progressbar_size = (double)songpos/(s.GetTotalLength()); double progressbar_size = (double)songpos/(s.GetTotalLength());
int howlong = wFooter->GetWidth()*progressbar_size; int howlong = wFooter->GetWidth()*progressbar_size;
@@ -3305,7 +3317,7 @@ int main(int argc, char *argv[])
redraw_header = 1; redraw_header = 1;
info_title = "Artist's info - " + *artist; info_title = "Artist's info - " + *artist;
sInfo->Clear(); sInfo->Clear();
sInfo->WriteXY(0, 0, "Fetching artist's info..."); sInfo->WriteXY(0, 0, 0, "Fetching artist's info...");
sInfo->Refresh(); sInfo->Refresh();
if (!artist_info_downloader) if (!artist_info_downloader)
{ {
@@ -3396,7 +3408,7 @@ int main(int argc, char *argv[])
wCurrent->Clear(); wCurrent->Clear();
current_screen = csLyrics; current_screen = csLyrics;
lyrics_title = "Lyrics: " + s->GetArtist() + " - " + s->GetTitle(); lyrics_title = "Lyrics: " + s->GetArtist() + " - " + s->GetTitle();
sLyrics->WriteXY(0, 0, "Fetching lyrics..."); sLyrics->WriteXY(0, 0, 0, "Fetching lyrics...");
sLyrics->Refresh(); sLyrics->Refresh();
# ifdef HAVE_CURL_CURL_H # ifdef HAVE_CURL_CURL_H
if (!lyrics_downloader) if (!lyrics_downloader)
@@ -3467,7 +3479,7 @@ int main(int argc, char *argv[])
redraw_header = 1; redraw_header = 1;
if (!mSearcher->Back().first) if (!mSearcher->Back().first)
{ {
wCurrent->WriteXY(0, 0, "Updating list..."); wCurrent->WriteXY(0, 0, 0, "Updating list...");
UpdateFoundList(); UpdateFoundList();
} }
} }

View File

@@ -285,7 +285,7 @@ void NcmpcppStatusChanged(Connection *Mpd, StatusChanges changed, void *)
} }
} }
if (!block_statusbar_update && Config.statusbar_visibility) if (!block_statusbar_update && Config.statusbar_visibility)
wFooter->WriteXY(0, 1, player_state, player_state.empty()); wFooter->WriteXY(0, 1, player_state.empty(), "%s", player_state.c_str());
} }
if (changed.SongID) if (changed.SongID)
{ {
@@ -339,7 +339,7 @@ void NcmpcppStatusChanged(Connection *Mpd, StatusChanges changed, void *)
const size_t max_length_without_scroll = wFooter->GetWidth()-player_state.length()-tracklength.length(); const size_t max_length_without_scroll = wFooter->GetWidth()-player_state.length()-tracklength.length();
wFooter->WriteXY(0, 1, player_state); wFooter->WriteXY(0, 1, 0, "%s", player_state.c_str());
wFooter->Bold(0); wFooter->Bold(0);
if (playing_song.length() > max_length_without_scroll) if (playing_song.length() > max_length_without_scroll)
{ {
@@ -352,15 +352,15 @@ void NcmpcppStatusChanged(Connection *Mpd, StatusChanges changed, void *)
my_string_t part = playing_song.substr(playing_song_scroll_begin++, scrollsize); my_string_t part = playing_song.substr(playing_song_scroll_begin++, scrollsize);
if (part.length() < scrollsize) if (part.length() < scrollsize)
part += playing_song.substr(0, scrollsize-part.length()); part += playing_song.substr(0, scrollsize-part.length());
wFooter->WriteXY(player_state.length(), 1, part); wFooter->WriteXY(player_state.length(), 1, 0, UTF_S_FMT, part.c_str());
if (playing_song_scroll_begin >= playing_song.length()) if (playing_song_scroll_begin >= playing_song.length())
playing_song_scroll_begin = 0; playing_song_scroll_begin = 0;
} }
else else
wFooter->WriteXY(player_state.length(), 1, s.toString(Config.song_status_format), 1); wFooter->WriteXY(player_state.length(), 1, 1, "%s", s.toString(Config.song_status_format).c_str());
wFooter->Bold(1); wFooter->Bold(1);
wFooter->WriteXY(wFooter->GetWidth()-tracklength.length(), 1, tracklength); wFooter->WriteXY(wFooter->GetWidth()-tracklength.length(), 1, 1, "%s", tracklength.c_str());
} }
if (!block_progressbar_update) if (!block_progressbar_update)
{ {
@@ -379,7 +379,7 @@ void NcmpcppStatusChanged(Connection *Mpd, StatusChanges changed, void *)
else else
{ {
if (!block_statusbar_update && Config.statusbar_visibility) if (!block_statusbar_update && Config.statusbar_visibility)
wFooter->WriteXY(0, 1, "", 1); wFooter->WriteXY(0, 1, 1, 0);
} }
} }
@@ -431,11 +431,11 @@ void NcmpcppStatusChanged(Connection *Mpd, StatusChanges changed, void *)
mvwhline(wHeader->Raw(), 1, 0, 0, wHeader->GetWidth()); mvwhline(wHeader->Raw(), 1, 0, 0, wHeader->GetWidth());
if (!switch_state.empty()) if (!switch_state.empty())
{ {
wHeader->WriteXY(wHeader->GetWidth()-switch_state.length()-3, 1, "["); wHeader->WriteXY(wHeader->GetWidth()-switch_state.length()-3, 1, 0, "[");
wHeader->SetColor(Config.state_flags_color); wHeader->SetColor(Config.state_flags_color);
wHeader->WriteXY(wHeader->GetWidth()-switch_state.length()-2, 1, switch_state); wHeader->WriteXY(wHeader->GetWidth()-switch_state.length()-2, 1, 0, "%s", switch_state.c_str());
wHeader->SetColor(Config.state_line_color); wHeader->SetColor(Config.state_line_color);
wHeader->WriteXY(wHeader->GetWidth()-2, 1, "]"); wHeader->WriteXY(wHeader->GetWidth()-2, 1, 0, "]");
} }
wHeader->SetColor(Config.header_color); wHeader->SetColor(Config.header_color);
wHeader->Bold(0); wHeader->Bold(0);
@@ -446,7 +446,7 @@ void NcmpcppStatusChanged(Connection *Mpd, StatusChanges changed, void *)
int vol = Mpd->GetVolume(); int vol = Mpd->GetVolume();
volume_state = " Volume: " + IntoStr(vol) + "%"; volume_state = " Volume: " + IntoStr(vol) + "%";
wHeader->SetColor(Config.volume_color); wHeader->SetColor(Config.volume_color);
wHeader->WriteXY(wHeader->GetWidth()-volume_state.length(), 0, volume_state); wHeader->WriteXY(wHeader->GetWidth()-volume_state.length(), 0, 1, "%s", volume_state.c_str());
wHeader->SetColor(Config.header_color); wHeader->SetColor(Config.header_color);
} }
wHeader->Refresh(); wHeader->Refresh();

View File

@@ -326,34 +326,27 @@ void Window::ReadKey() const
wgetch(itsWindow); wgetch(itsWindow);
} }
void Window::Write(int limit, const string &str, bool clrtoeol) void Window::Write(bool cte, const char *format, ...) const
{ {
waddstr(itsWindow,str.c_str()); va_list list;
if (clrtoeol) va_start(list, format);
vw_printw(itsWindow, format, list);
va_end(list);
if (cte)
wclrtoeol(itsWindow); wclrtoeol(itsWindow);
} }
#ifdef _UTF8 void Window::WriteXY(int x, int y, bool cte, const char *format, ...) const
void Window::Write(int limit, const wstring &str, bool clrtoeol)
{ {
wprintw(itsWindow, "%ls", str.c_str()); va_list list;
if (clrtoeol) va_start(list, format);
wmove(itsWindow, y, x);
vw_printw(itsWindow, format, list);
va_end(list);
if (cte)
wclrtoeol(itsWindow); wclrtoeol(itsWindow);
} }
void Window::WriteXY(int x, int y, int limit, const wstring &str, bool cleartoeol)
{
wmove(itsWindow, y, x);
Write(limit, str, cleartoeol);
}
#endif
void Window::WriteXY(int x, int y, int limit, const string &str, bool cleartoeol)
{
wmove(itsWindow, y, x);
Write(limit, str, cleartoeol);
}
string Window::GetString(const string &base, size_t length, size_t width) const string Window::GetString(const string &base, size_t length, size_t width) const
{ {
int input; int input;

View File

@@ -37,12 +37,14 @@
# define UNICODE 1 # define UNICODE 1
# define my_char_t wchar_t # define my_char_t wchar_t
# define my_string_t wstring # define my_string_t wstring
# define UTF_S_FMT "%ls"
# define TO_STRING(x) ToString(x) # define TO_STRING(x) ToString(x)
# define TO_WSTRING(x) ToWString(x) # define TO_WSTRING(x) ToWString(x)
#else #else
# define UNICODE 0 # define UNICODE 0
# define my_char_t char # define my_char_t char
# define my_string_t string # define my_string_t string
# define UTF_S_FMT "%s"
# define TO_STRING(x) x # define TO_STRING(x) x
# define TO_WSTRING(x) x # define TO_WSTRING(x) x
#endif #endif
@@ -126,16 +128,8 @@ class Window
void ReadKey(int &) const; void ReadKey(int &) const;
void ReadKey() const; void ReadKey() const;
void Write(const string &s, bool cte = 0) { Write(0xFFFF, s, cte); } void Write(bool, const char *, ...) const;
void Write(int, const string &, bool = 0); void WriteXY(int, int, bool, const char *, ...) const;
void WriteXY(int x, int y, const string &s, bool ete = 0) { WriteXY(x, y, 0xFFFF, s, ete); }
void WriteXY(int, int, int, const string &, bool = 0);
# ifdef _UTF8
void Write(const wstring &s, bool cte = 0) { Write(0xFFFF, s, cte); }
void Write(int, const wstring &, bool = 0);
void WriteXY(int x, int y, const wstring &s, bool ete = 0) { WriteXY(x, y, 0xFFFF, s, ete); }
void WriteXY(int, int, int, const wstring &, bool = 0);
# endif
void Scrollable(bool) const; void Scrollable(bool) const;
virtual void Scroll(Where); virtual void Scroll(Where);