Add a basic statusbar
Unfortunately so far the user can't toggle the options.
This commit is contained in:
parent
e808d06651
commit
c4965726f4
63
nncmpp.c
63
nncmpp.c
|
@ -1143,7 +1143,7 @@ static int
|
||||||
app_fitting_items (void)
|
app_fitting_items (void)
|
||||||
{
|
{
|
||||||
// The raw number of items that would have fit on the terminal
|
// The raw number of items that would have fit on the terminal
|
||||||
return LINES - g.header_height;
|
return LINES - g.header_height - 1 /* status bar */;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -1264,6 +1264,61 @@ app_draw_view (void)
|
||||||
app_draw_scrollbar ();
|
app_draw_scrollbar ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
app_write_mpd_status (struct row_buffer *buf)
|
||||||
|
{
|
||||||
|
struct str_map *map = &g.playback_info;
|
||||||
|
|
||||||
|
// TODO: "N hours N minutes" ("stats" -> "playtime" or count in code)
|
||||||
|
char *stats;
|
||||||
|
if (g.playlist.len == 1)
|
||||||
|
stats = xstrdup_printf ("%zu song", g.playlist.len);
|
||||||
|
else
|
||||||
|
stats = xstrdup_printf ("%zu songs", g.playlist.len);
|
||||||
|
row_buffer_append (buf, stats, APP_ATTR (NORMAL));
|
||||||
|
free (stats);
|
||||||
|
|
||||||
|
struct row_buffer right;
|
||||||
|
row_buffer_init (&right);
|
||||||
|
|
||||||
|
const char *s;
|
||||||
|
bool repeat = (s = str_map_find (map, "repeat")) && strcmp (s, "0");
|
||||||
|
bool random = (s = str_map_find (map, "random")) && strcmp (s, "0");
|
||||||
|
bool single = (s = str_map_find (map, "single")) && strcmp (s, "0");
|
||||||
|
bool consume = (s = str_map_find (map, "consume")) && strcmp (s, "0");
|
||||||
|
|
||||||
|
chtype a[2] = { APP_ATTR (NORMAL), APP_ATTR (HIGHLIGHT) };
|
||||||
|
row_buffer_append_args (&right,
|
||||||
|
" ", APP_ATTR (NORMAL), "repeat", a[repeat], NULL);
|
||||||
|
row_buffer_append_args (&right,
|
||||||
|
" ", APP_ATTR (NORMAL), "random", a[random], NULL);
|
||||||
|
row_buffer_append_args (&right,
|
||||||
|
" ", APP_ATTR (NORMAL), "single", a[single], NULL);
|
||||||
|
row_buffer_append_args (&right,
|
||||||
|
" ", APP_ATTR (NORMAL), "consume", a[consume], NULL);
|
||||||
|
|
||||||
|
row_buffer_space (buf,
|
||||||
|
MAX (0, COLS - buf->total_width - right.total_width),
|
||||||
|
APP_ATTR (NORMAL));
|
||||||
|
row_buffer_append_buffer (buf, &right);
|
||||||
|
row_buffer_free (&right);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
app_draw_statusbar (void)
|
||||||
|
{
|
||||||
|
struct row_buffer buf;
|
||||||
|
row_buffer_init (&buf);
|
||||||
|
|
||||||
|
// TODO: display all errors in here with some timeout
|
||||||
|
// TODO: task status such as "Updating database..."
|
||||||
|
if (g.client.state == MPD_CONNECTED)
|
||||||
|
app_write_mpd_status (&buf);
|
||||||
|
|
||||||
|
move (LINES - 1, 0);
|
||||||
|
app_flush_buffer (&buf, COLS, APP_ATTR (NORMAL));
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
app_on_refresh (void *user_data)
|
app_on_refresh (void *user_data)
|
||||||
{
|
{
|
||||||
|
@ -1272,6 +1327,7 @@ app_on_refresh (void *user_data)
|
||||||
|
|
||||||
app_draw_header ();
|
app_draw_header ();
|
||||||
app_draw_view ();
|
app_draw_view ();
|
||||||
|
app_draw_statusbar ();
|
||||||
|
|
||||||
refresh ();
|
refresh ();
|
||||||
}
|
}
|
||||||
|
@ -2751,7 +2807,7 @@ mpd_on_events (unsigned subsystems, void *user_data)
|
||||||
if (subsystems & MPD_SUBSYSTEM_DATABASE)
|
if (subsystems & MPD_SUBSYSTEM_DATABASE)
|
||||||
library_tab_reload (NULL);
|
library_tab_reload (NULL);
|
||||||
|
|
||||||
if (subsystems & (MPD_SUBSYSTEM_PLAYER
|
if (subsystems & (MPD_SUBSYSTEM_PLAYER | MPD_SUBSYSTEM_OPTIONS
|
||||||
| MPD_SUBSYSTEM_PLAYLIST | MPD_SUBSYSTEM_MIXER))
|
| MPD_SUBSYSTEM_PLAYLIST | MPD_SUBSYSTEM_MIXER))
|
||||||
mpd_request_info ();
|
mpd_request_info ();
|
||||||
else
|
else
|
||||||
|
@ -3054,7 +3110,8 @@ app_log_handler (void *user_data, const char *quote, const char *fmt,
|
||||||
|
|
||||||
// If the standard error output isn't redirected, try our best at showing
|
// If the standard error output isn't redirected, try our best at showing
|
||||||
// the message to the user; it will probably get overdrawn soon
|
// the message to the user; it will probably get overdrawn soon
|
||||||
// TODO: remember it somewhere so that it stays shown for a while
|
// TODO: remember it somewhere so that it stays shown for a while,
|
||||||
|
// probably in the status bar, see hex.c
|
||||||
if (!isatty (STDERR_FILENO))
|
if (!isatty (STDERR_FILENO))
|
||||||
fprintf (stderr, "%s\n", message.str);
|
fprintf (stderr, "%s\n", message.str);
|
||||||
else if (g_debug_tab.active)
|
else if (g_debug_tab.active)
|
||||||
|
|
Loading…
Reference in New Issue