playlist viewer: enable hotkey
'File Browser' hotkeys can now be used while browsing a playlist. The manual has been updated to reflect this and to say that the File Browser hotkey works in the context of the database as well (existing behavior) Change-Id: I51b23e82e0fb00772efdb8784db966d454fb2560
This commit is contained in:
parent
3edf3ba18d
commit
cef9fa22ef
2 changed files with 120 additions and 56 deletions
|
@ -510,6 +510,17 @@ static enum pv_onplay_result show_track_info(const struct playlist_entry *curren
|
||||||
viewer.num_tracks) ? PV_ONPLAY_USB : PV_ONPLAY_UNCHANGED;
|
viewer.num_tracks) ? PV_ONPLAY_USB : PV_ONPLAY_UNCHANGED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static enum pv_onplay_result open_with(const struct playlist_entry *current_track)
|
||||||
|
{
|
||||||
|
char selected_track[MAX_PATH];
|
||||||
|
close_playlist_viewer();
|
||||||
|
snprintf(selected_track, sizeof(selected_track), "%s", current_track->name);
|
||||||
|
|
||||||
|
return (filetype_list_viewers(selected_track) ==
|
||||||
|
PLUGIN_USB_CONNECTED ? PV_ONPLAY_USB_CLOSED : PV_ONPLAY_CLOSED);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef HAVE_TAGCACHE
|
#ifdef HAVE_TAGCACHE
|
||||||
static enum pv_onplay_result open_pictureflow(const struct playlist_entry *current_track)
|
static enum pv_onplay_result open_pictureflow(const struct playlist_entry *current_track)
|
||||||
{
|
{
|
||||||
|
@ -522,6 +533,31 @@ static enum pv_onplay_result open_pictureflow(const struct playlist_entry *curre
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static enum pv_onplay_result delete_track(int current_track_index,
|
||||||
|
int index, bool current_was_playing)
|
||||||
|
{
|
||||||
|
playlist_delete(viewer.playlist, current_track_index);
|
||||||
|
if (current_was_playing)
|
||||||
|
{
|
||||||
|
if (playlist_amount_ex(viewer.playlist) <= 0)
|
||||||
|
audio_stop();
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Start playing new track except if it's the lasttrack
|
||||||
|
track in the playlist and repeat mode is disabled */
|
||||||
|
struct playlist_entry *current_track =
|
||||||
|
playlist_buffer_get_track(&viewer.buffer, index);
|
||||||
|
if (current_track->display_index != viewer.num_tracks ||
|
||||||
|
global_settings.repeat_mode == REPEAT_ALL)
|
||||||
|
{
|
||||||
|
audio_play(0, 0);
|
||||||
|
viewer.current_playing_track = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return PV_ONPLAY_ITEM_REMOVED;
|
||||||
|
}
|
||||||
|
|
||||||
/* Menu of playlist commands. Invoked via ON+PLAY on main viewer screen. */
|
/* Menu of playlist commands. Invoked via ON+PLAY on main viewer screen. */
|
||||||
static enum pv_onplay_result onplay_menu(int index)
|
static enum pv_onplay_result onplay_menu(int index)
|
||||||
{
|
{
|
||||||
|
@ -539,7 +575,7 @@ static enum pv_onplay_result onplay_menu(int index)
|
||||||
#endif
|
#endif
|
||||||
);
|
);
|
||||||
|
|
||||||
bool current = (current_track->index == viewer.current_playing_track);
|
bool current_was_playing = (current_track->index == viewer.current_playing_track);
|
||||||
|
|
||||||
result = do_menu(&menu_items, NULL, NULL, false);
|
result = do_menu(&menu_items, NULL, NULL, false);
|
||||||
if (result == MENU_ATTACHED_USB)
|
if (result == MENU_ATTACHED_USB)
|
||||||
|
@ -565,27 +601,7 @@ static enum pv_onplay_result onplay_menu(int index)
|
||||||
ret = PV_ONPLAY_UNCHANGED;
|
ret = PV_ONPLAY_UNCHANGED;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
/* delete track */
|
ret = delete_track(current_track->index, index, current_was_playing);
|
||||||
playlist_delete(viewer.playlist, current_track->index);
|
|
||||||
if (current)
|
|
||||||
{
|
|
||||||
if (playlist_amount_ex(viewer.playlist) <= 0)
|
|
||||||
audio_stop();
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Start playing new track except if it's the lasttrack
|
|
||||||
track in the playlist and repeat mode is disabled */
|
|
||||||
current_track =
|
|
||||||
playlist_buffer_get_track(&viewer.buffer, index);
|
|
||||||
if (current_track->display_index!=viewer.num_tracks ||
|
|
||||||
global_settings.repeat_mode == REPEAT_ALL)
|
|
||||||
{
|
|
||||||
audio_play(0, 0);
|
|
||||||
viewer.current_playing_track = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ret = PV_ONPLAY_ITEM_REMOVED;
|
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
/* move track */
|
/* move track */
|
||||||
|
@ -724,6 +740,40 @@ static int playlist_callback_voice(int selected_item, void *data)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void update_lists(struct gui_synclist * playlist_lists)
|
||||||
|
{
|
||||||
|
gui_synclist_set_voice_callback(playlist_lists,
|
||||||
|
global_settings.talk_file?
|
||||||
|
&playlist_callback_voice:NULL);
|
||||||
|
gui_synclist_set_icon_callback(playlist_lists,
|
||||||
|
global_settings.playlist_viewer_icons?
|
||||||
|
&playlist_callback_icons:NULL);
|
||||||
|
gui_synclist_set_title(playlist_lists, str(LANG_PLAYLIST), Icon_Playlist);
|
||||||
|
gui_synclist_draw(playlist_lists);
|
||||||
|
gui_synclist_speak_item(playlist_lists);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool update_viewer_with_changes(struct gui_synclist *playlist_lists, enum pv_onplay_result res)
|
||||||
|
{
|
||||||
|
bool exit = false;
|
||||||
|
if (res == PV_ONPLAY_CHANGED ||
|
||||||
|
res == PV_ONPLAY_ITEM_REMOVED)
|
||||||
|
{
|
||||||
|
if (res == PV_ONPLAY_ITEM_REMOVED)
|
||||||
|
gui_synclist_del_item(playlist_lists);
|
||||||
|
update_playlist(true);
|
||||||
|
if (viewer.num_tracks <= 0)
|
||||||
|
exit = true;
|
||||||
|
if (viewer.selected_track >= viewer.num_tracks)
|
||||||
|
viewer.selected_track = viewer.num_tracks-1;
|
||||||
|
dirty = true;
|
||||||
|
}
|
||||||
|
/* the show_icons option in the playlist viewer settings
|
||||||
|
* menu might have changed */
|
||||||
|
update_lists(playlist_lists);
|
||||||
|
return exit;
|
||||||
|
}
|
||||||
|
|
||||||
static void prepare_lists(struct gui_synclist * playlist_lists)
|
static void prepare_lists(struct gui_synclist * playlist_lists)
|
||||||
{
|
{
|
||||||
gui_synclist_init(playlist_lists, playlist_callback_name,
|
gui_synclist_init(playlist_lists, playlist_callback_name,
|
||||||
|
@ -907,26 +957,7 @@ enum playlist_viewer_result playlist_viewer_ex(const char* filename)
|
||||||
goto exit;
|
goto exit;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if (pv_onplay_result == PV_ONPLAY_CHANGED ||
|
exit = update_viewer_with_changes(&playlist_lists, pv_onplay_result);
|
||||||
pv_onplay_result == PV_ONPLAY_ITEM_REMOVED)
|
|
||||||
{
|
|
||||||
if (pv_onplay_result == PV_ONPLAY_ITEM_REMOVED)
|
|
||||||
gui_synclist_del_item(&playlist_lists);
|
|
||||||
update_playlist(true);
|
|
||||||
if (viewer.num_tracks <= 0)
|
|
||||||
exit = true;
|
|
||||||
if (viewer.selected_track >= viewer.num_tracks)
|
|
||||||
viewer.selected_track = viewer.num_tracks-1;
|
|
||||||
dirty = true;
|
|
||||||
}
|
|
||||||
/* the show_icons option in the playlist viewer settings
|
|
||||||
* menu might have changed */
|
|
||||||
gui_synclist_set_icon_callback(&playlist_lists,
|
|
||||||
global_settings.playlist_viewer_icons?
|
|
||||||
&playlist_callback_icons:NULL);
|
|
||||||
gui_synclist_set_title(&playlist_lists, playlist_lists.title, playlist_lists.title_icon);
|
|
||||||
gui_synclist_draw(&playlist_lists);
|
|
||||||
gui_synclist_speak_item(&playlist_lists);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ACTION_STD_MENU:
|
case ACTION_STD_MENU:
|
||||||
|
@ -938,18 +969,50 @@ enum playlist_viewer_result playlist_viewer_ex(const char* filename)
|
||||||
{
|
{
|
||||||
quick_screen_quick(button);
|
quick_screen_quick(button);
|
||||||
update_playlist(true);
|
update_playlist(true);
|
||||||
gui_synclist_set_voice_callback(&playlist_lists,
|
update_lists(&playlist_lists);
|
||||||
global_settings.talk_file?
|
|
||||||
&playlist_callback_voice:NULL);
|
|
||||||
gui_synclist_set_icon_callback(&playlist_lists,
|
|
||||||
global_settings.playlist_viewer_icons?
|
|
||||||
&playlist_callback_icons:NULL);
|
|
||||||
gui_synclist_set_title(&playlist_lists, str(LANG_PLAYLIST), Icon_Playlist);
|
|
||||||
gui_synclist_draw(&playlist_lists);
|
|
||||||
gui_synclist_speak_item(&playlist_lists);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_HOTKEY
|
||||||
|
case ACTION_TREE_HOTKEY:
|
||||||
|
{
|
||||||
|
struct playlist_entry *current_track = playlist_buffer_get_track(
|
||||||
|
&viewer.buffer,
|
||||||
|
viewer.selected_track);
|
||||||
|
enum pv_onplay_result (*do_plugin)(const struct playlist_entry *) = NULL;
|
||||||
|
#ifdef HAVE_TAGCACHE
|
||||||
|
if (global_settings.hotkey_tree == HOTKEY_PICTUREFLOW)
|
||||||
|
do_plugin = &open_pictureflow;
|
||||||
|
#endif
|
||||||
|
if (global_settings.hotkey_tree == HOTKEY_OPEN_WITH)
|
||||||
|
do_plugin = &open_with;
|
||||||
|
|
||||||
|
if (do_plugin != NULL)
|
||||||
|
{
|
||||||
|
if (do_plugin(current_track) == PV_ONPLAY_USB_CLOSED)
|
||||||
|
return PLAYLIST_VIEWER_USB;
|
||||||
|
else if (!open_playlist_viewer(filename, &playlist_lists, true))
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
else if (global_settings.hotkey_tree == HOTKEY_PROPERTIES)
|
||||||
|
{
|
||||||
|
if (show_track_info(current_track) == PV_ONPLAY_USB)
|
||||||
|
{
|
||||||
|
ret = PLAYLIST_VIEWER_USB;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
update_lists(&playlist_lists);
|
||||||
|
}
|
||||||
|
else if (global_settings.hotkey_tree == HOTKEY_DELETE)
|
||||||
|
exit = update_viewer_with_changes(&playlist_lists,
|
||||||
|
delete_track(current_track->index,
|
||||||
|
viewer.selected_track,
|
||||||
|
(current_track->index == viewer.current_playing_track)));
|
||||||
|
else
|
||||||
|
onplay(current_track->name, FILE_ATTR_AUDIO, CONTEXT_STD, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif /* HAVE_HOTKEY */
|
||||||
default:
|
default:
|
||||||
if(default_event_handler(button) == SYS_USB_CONNECTED)
|
if(default_event_handler(button) == SYS_USB_CONNECTED)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
% $Id$ %
|
% $Id$ %
|
||||||
\opt{hotkey}{
|
\opt{hotkey}{
|
||||||
\section{\label{ref:Hotkeys}Hotkeys}
|
\section{\label{ref:Hotkeys}Hotkeys}
|
||||||
Hotkeys are shortcut keys for use in the \nopt{touchscreen}{\setting{File Browser}
|
Hotkeys are shortcut keys for use in the \nopt{touchscreen}{\setting{File Browser},
|
||||||
and }\setting{WPS} screen. To use one, press
|
\setting{Database}, \setting{Playlist Viewer}, and }\setting{WPS} screen. To use one, press
|
||||||
\nopt{touchscreen}{\ActionTreeHotkey{} within the \setting{File Browser} or}
|
\nopt{touchscreen}{\ActionTreeHotkey{} within the \setting{File Browser},
|
||||||
|
\setting{Database}, or \setting{Playlist Viewer}, or}
|
||||||
\ActionWpsHotkey{} within the \setting{WPS}
|
\ActionWpsHotkey{} within the \setting{WPS}
|
||||||
screen.\nopt{touchscreen}{ The assigned function will launch with reference
|
screen.\nopt{touchscreen}{ The assigned function will launch with reference
|
||||||
to the current file or directory, if applicable. Each screen has its own
|
to the current file or directory, if applicable. Each screen has its own
|
||||||
|
|
Loading…
Reference in a new issue