Add some actions, implement playlist control
This commit is contained in:
parent
0b9e21c7fe
commit
c0e07ec5d1
48
nncmpp.c
48
nncmpp.c
@ -521,6 +521,7 @@ static struct app_context
|
|||||||
struct tab *help_tab; ///< Special help tab
|
struct tab *help_tab; ///< Special help tab
|
||||||
struct tab *tabs; ///< All other tabs
|
struct tab *tabs; ///< All other tabs
|
||||||
struct tab *active_tab; ///< Active tab
|
struct tab *active_tab; ///< Active tab
|
||||||
|
struct tab *last_tab; ///< Previous tab
|
||||||
|
|
||||||
// Emulated widgets:
|
// Emulated widgets:
|
||||||
|
|
||||||
@ -1529,6 +1530,10 @@ app_prepend_tab (struct tab *tab)
|
|||||||
static void
|
static void
|
||||||
app_switch_tab (struct tab *tab)
|
app_switch_tab (struct tab *tab)
|
||||||
{
|
{
|
||||||
|
if (tab == g_ctx.active_tab)
|
||||||
|
return;
|
||||||
|
|
||||||
|
g_ctx.last_tab = g_ctx.active_tab;
|
||||||
g_ctx.active_tab = tab;
|
g_ctx.active_tab = tab;
|
||||||
app_invalidate ();
|
app_invalidate ();
|
||||||
}
|
}
|
||||||
@ -1553,6 +1558,8 @@ app_goto_tab (int tab_index)
|
|||||||
\
|
\
|
||||||
XX( QUIT, "Quit application" ) \
|
XX( QUIT, "Quit application" ) \
|
||||||
XX( REDRAW, "Redraw screen" ) \
|
XX( REDRAW, "Redraw screen" ) \
|
||||||
|
XX( HELP_TAB, "Switch to the help tab" ) \
|
||||||
|
XX( LAST_TAB, "Switch to previous tab" ) \
|
||||||
\
|
\
|
||||||
XX( MPD_PREVIOUS, "Previous song" ) \
|
XX( MPD_PREVIOUS, "Previous song" ) \
|
||||||
XX( MPD_TOGGLE, "Toggle play/pause" ) \
|
XX( MPD_TOGGLE, "Toggle play/pause" ) \
|
||||||
@ -1565,6 +1572,7 @@ app_goto_tab (int tab_index)
|
|||||||
XX( MPD_REPLACE, "Replace playlist with song" ) \
|
XX( MPD_REPLACE, "Replace playlist with song" ) \
|
||||||
\
|
\
|
||||||
XX( CHOOSE, "Choose item" ) \
|
XX( CHOOSE, "Choose item" ) \
|
||||||
|
XX( DELETE, "Delete item" ) \
|
||||||
\
|
\
|
||||||
XX( SCROLL_UP, "Scroll up" ) \
|
XX( SCROLL_UP, "Scroll up" ) \
|
||||||
XX( SCROLL_DOWN, "Scroll down" ) \
|
XX( SCROLL_DOWN, "Scroll down" ) \
|
||||||
@ -1625,6 +1633,14 @@ app_process_user_action (enum user_action action)
|
|||||||
clear ();
|
clear ();
|
||||||
app_invalidate ();
|
app_invalidate ();
|
||||||
break;
|
break;
|
||||||
|
case USER_ACTION_LAST_TAB:
|
||||||
|
if (!g_ctx.last_tab)
|
||||||
|
return false;
|
||||||
|
app_switch_tab (g_ctx.last_tab);
|
||||||
|
break;
|
||||||
|
case USER_ACTION_HELP_TAB:
|
||||||
|
app_switch_tab (g_ctx.help_tab);
|
||||||
|
break;
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
||||||
@ -1826,7 +1842,10 @@ static struct binding
|
|||||||
g_default_bindings[] =
|
g_default_bindings[] =
|
||||||
{
|
{
|
||||||
{ "Escape", USER_ACTION_QUIT },
|
{ "Escape", USER_ACTION_QUIT },
|
||||||
|
{ "q", USER_ACTION_QUIT },
|
||||||
{ "C-l", USER_ACTION_REDRAW },
|
{ "C-l", USER_ACTION_REDRAW },
|
||||||
|
{ "M-Tab", USER_ACTION_LAST_TAB },
|
||||||
|
{ "F1", USER_ACTION_HELP_TAB },
|
||||||
|
|
||||||
{ "Home", USER_ACTION_GOTO_TOP },
|
{ "Home", USER_ACTION_GOTO_TOP },
|
||||||
{ "End", USER_ACTION_GOTO_BOTTOM },
|
{ "End", USER_ACTION_GOTO_BOTTOM },
|
||||||
@ -1845,6 +1864,7 @@ g_default_bindings[] =
|
|||||||
|
|
||||||
// Not sure how to set these up, they're pretty arbitrary so far
|
// Not sure how to set these up, they're pretty arbitrary so far
|
||||||
{ "Enter", USER_ACTION_CHOOSE },
|
{ "Enter", USER_ACTION_CHOOSE },
|
||||||
|
{ "Delete", USER_ACTION_DELETE },
|
||||||
{ "a", USER_ACTION_MPD_ADD },
|
{ "a", USER_ACTION_MPD_ADD },
|
||||||
{ "r", USER_ACTION_MPD_REPLACE },
|
{ "r", USER_ACTION_MPD_REPLACE },
|
||||||
|
|
||||||
@ -1906,6 +1926,33 @@ current_tab_on_item_draw (size_t item_index, struct row_buffer *buffer,
|
|||||||
(int) item_index == g_ctx.song ? A_BOLD : 0);
|
(int) item_index == g_ctx.song ? A_BOLD : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
current_tab_on_action (enum user_action action)
|
||||||
|
{
|
||||||
|
struct tab *self = g_ctx.active_tab;
|
||||||
|
if (self->item_selected < 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
struct mpd_client *c = &g_ctx.client;
|
||||||
|
switch (action)
|
||||||
|
{
|
||||||
|
char *song;
|
||||||
|
case USER_ACTION_CHOOSE:
|
||||||
|
song = xstrdup_printf ("%d", self->item_selected);
|
||||||
|
MPD_SIMPLE ("play", song)
|
||||||
|
free (song);
|
||||||
|
return true;
|
||||||
|
case USER_ACTION_DELETE:
|
||||||
|
song = xstrdup_printf ("%d", self->item_selected);
|
||||||
|
MPD_SIMPLE ("delete", song)
|
||||||
|
free (song);
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
current_tab_update (void)
|
current_tab_update (void)
|
||||||
{
|
{
|
||||||
@ -1918,6 +1965,7 @@ current_tab_init (void)
|
|||||||
{
|
{
|
||||||
struct tab *super = &g_current_tab.super;
|
struct tab *super = &g_current_tab.super;
|
||||||
tab_init (super, "Current");
|
tab_init (super, "Current");
|
||||||
|
super->on_action = current_tab_on_action;
|
||||||
super->on_item_draw = current_tab_on_item_draw;
|
super->on_item_draw = current_tab_on_item_draw;
|
||||||
return super;
|
return super;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user