fix a few bugs progressbar related (redrawing, colors)

This commit is contained in:
Andrzej Rybczak
2009-09-30 18:59:36 +02:00
parent cada9f4355
commit 45884e0895
3 changed files with 37 additions and 46 deletions

View File

@@ -1132,6 +1132,7 @@ int main(int argc, char *argv[])
songpos = Mpd.GetElapsedTime();
SeekingInProgress = 1;
*wFooter << fmtBold;
while (Keypressed(input, Key.SeekForward) || Keypressed(input, Key.SeekBackward))
{
TraceMpdStatus();
@@ -1154,7 +1155,6 @@ int main(int argc, char *argv[])
}
std::string tracklength;
*wFooter << fmtBold;
if (Config.new_design)
{
if (Config.display_remaining_time)
@@ -1171,32 +1171,25 @@ int main(int argc, char *argv[])
}
else
{
tracklength = "[";
tracklength = " [";
if (Config.display_remaining_time)
{
tracklength += "-";
tracklength += Song::ShowTime(Mpd.GetTotalTime()-songpos);
}
else
tracklength = Song::ShowTime(songpos);
tracklength += Song::ShowTime(songpos);
tracklength += "/";
tracklength += MPD::Song::ShowTime(Mpd.GetTotalTime());
tracklength += "]";
*wFooter << XY(wFooter->GetWidth()-tracklength.length(), 1) << tracklength;
}
double progressbar_size = songpos/double(Mpd.GetTotalTime());
unsigned howlong = wFooter->GetWidth()*progressbar_size;
mvwhline(wFooter->Raw(), 0, 0, 0, wFooter->GetWidth());
for (unsigned i = 0; i < howlong; ++i)
*wFooter << Config.progressbar[0];
if (howlong < wFooter->GetWidth())
*wFooter << Config.progressbar[1];
*wFooter << fmtBoldEnd;
DrawProgressbar(songpos, Mpd.GetTotalTime());
wFooter->Refresh();
}
Mpd.Seek(songpos);
*wFooter << fmtBoldEnd;
SeekingInProgress = 0;
Mpd.Seek(songpos);
UpdateStatusImmediately = 1;
UnlockProgressbar();

View File

@@ -51,6 +51,8 @@ namespace
bool block_statusbar_update = 0;
bool block_progressbar_update = 0;
bool allow_statusbar_unlock = 1;
int local_elapsed;
}
#ifndef USE_PDCURSES
@@ -144,10 +146,10 @@ void TraceMpdStatus()
else
block_progressbar_update = !allow_statusbar_unlock;
if (!Mpd.isPlaying() && !block_statusbar_update && !block_progressbar_update)
if (Mpd.GetState() != psPlay && !block_statusbar_update && !block_progressbar_update)
{
if (Config.new_design)
mvwhline(wFooter->Raw(), 0, 0, 0, wFooter->GetWidth());
DrawProgressbar(local_elapsed, Mpd.GetTotalTime());
else
Statusbar() << wclrtoeol;
wFooter->Refresh();
@@ -178,7 +180,6 @@ void NcmpcppStatusChanged(Connection *, StatusChanges changed, void *)
static size_t first_line_scroll_begin = 0;
static size_t second_line_scroll_begin = 0;
static std::string player_state;
static int elapsed;
static MPD::Song np;
int sx, sy;
@@ -338,14 +339,8 @@ void NcmpcppStatusChanged(Connection *, StatusChanges changed, void *)
wHeader->Refresh();
}
}
else if (!block_statusbar_update && Config.statusbar_visibility)
{
*wFooter << XY(0, 1);
if (player_state.empty())
*wFooter << wclrtoeol;
else
*wFooter << player_state;
}
else if (!block_statusbar_update && Config.statusbar_visibility && player_state.empty())
*wFooter << XY(0, 1) << wclrtoeol;
}
if (changed.SongID)
{
@@ -387,10 +382,10 @@ void NcmpcppStatusChanged(Connection *, StatusChanges changed, void *)
changed.ElapsedTime = 1;
int mpd_elapsed = Mpd.GetElapsedTime();
if (elapsed < mpd_elapsed-2 || elapsed+1 > mpd_elapsed)
elapsed = mpd_elapsed;
if (local_elapsed < mpd_elapsed-2 || local_elapsed+1 > mpd_elapsed)
local_elapsed = mpd_elapsed;
else if (Mpd.GetState() == psPlay && !RedrawStatusbar)
elapsed++;
++local_elapsed;
std::string tracklength;
if (Config.new_design)
@@ -398,10 +393,10 @@ void NcmpcppStatusChanged(Connection *, StatusChanges changed, void *)
if (Config.display_remaining_time)
{
tracklength = "-";
tracklength += Song::ShowTime(Mpd.GetTotalTime()-elapsed);
tracklength += Song::ShowTime(Mpd.GetTotalTime()-local_elapsed);
}
else
tracklength = Song::ShowTime(elapsed);
tracklength = Song::ShowTime(local_elapsed);
if (Mpd.GetTotalTime())
{
tracklength += "/";
@@ -454,17 +449,17 @@ void NcmpcppStatusChanged(Connection *, StatusChanges changed, void *)
if (Config.display_remaining_time)
{
tracklength += "-";
tracklength += Song::ShowTime(Mpd.GetTotalTime()-elapsed);
tracklength += Song::ShowTime(Mpd.GetTotalTime()-local_elapsed);
}
else
tracklength += Song::ShowTime(elapsed);
tracklength += Song::ShowTime(local_elapsed);
tracklength += "/";
tracklength += MPD::Song::ShowTime(Mpd.GetTotalTime());
tracklength += "]";
}
else
{
tracklength += Song::ShowTime(elapsed);
tracklength += Song::ShowTime(local_elapsed);
tracklength += "]";
}
basic_buffer<my_char_t> np_song;
@@ -474,20 +469,7 @@ void NcmpcppStatusChanged(Connection *, StatusChanges changed, void *)
*wFooter << fmtBold << XY(wFooter->GetWidth()-tracklength.length(), 1) << tracklength;
}
if (!block_progressbar_update)
{
double progressbar_size = elapsed/double(Mpd.GetTotalTime());
unsigned howlong = wFooter->GetWidth()*progressbar_size;
*wFooter << Config.progressbar_color;
mvwhline(wFooter->Raw(), 0, 0, 0, wFooter->GetWidth());
if (Mpd.GetTotalTime())
{
for (unsigned i = 0; i < howlong; ++i)
*wFooter << Config.progressbar[0];
if (howlong < wFooter->GetWidth())
*wFooter << Config.progressbar[1];
}
*wFooter << Config.statusbar_color;
}
DrawProgressbar(local_elapsed, Mpd.GetTotalTime());
RedrawStatusbar = 0;
}
else
@@ -621,6 +603,21 @@ Window &Statusbar()
return *wFooter;
}
void DrawProgressbar(unsigned elapsed, unsigned time)
{
unsigned howlong = time ? wFooter->GetWidth()*elapsed/time : 0;
*wFooter << fmtBold << Config.progressbar_color;
mvwhline(wFooter->Raw(), 0, 0, 0, wFooter->GetWidth());
if (time)
{
for (unsigned i = 0; i < howlong; ++i)
*wFooter << Config.progressbar[0];
if (howlong < wFooter->GetWidth())
*wFooter << Config.progressbar[1];
}
*wFooter << clEnd << fmtBoldEnd;
}
void ShowMessage(const char *format, ...)
{
if (MessagesAllowed && allow_statusbar_unlock)

View File

@@ -41,6 +41,7 @@ void NcmpcppStatusChanged(MPD::Connection *, MPD::StatusChanges, void *);
void NcmpcppErrorCallback(MPD::Connection *, int, const char *, void *);
Window &Statusbar();
void DrawProgressbar(unsigned elapsed, unsigned time);
void ShowMessage(const char *, ...) GNUC_PRINTF(1, 2);
void StatusbarGetStringHelper(const std::wstring &);