diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/lang/english.lang | 56 | ||||
-rw-r--r-- | apps/menus/playlist_menu.c | 22 | ||||
-rw-r--r-- | apps/onplay.c | 154 | ||||
-rw-r--r-- | apps/settings.h | 8 | ||||
-rw-r--r-- | apps/settings_list.c | 9 |
5 files changed, 194 insertions, 55 deletions
diff --git a/apps/lang/english.lang b/apps/lang/english.lang index 9b3f6712e4..80a29601a0 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -15618,3 +15618,59 @@ *: "Clear List & Play Next" </voice> </phrase> +<phrase> + id: LANG_QUEUE_MENU + desc: in onplay menu + user: core + <source> + *: "Queue..." + </source> + <dest> + *: "Queue..." + </dest> + <voice> + *: "Queue..." + </voice> +</phrase> +<phrase> + id: LANG_SHOW_QUEUE_OPTIONS + desc: in Current Playlist settings + user: core + <source> + *: "Show Queue Options" + </source> + <dest> + *: "Show Queue Options" + </dest> + <voice> + *: "Show Queue Options" + </voice> +</phrase> +<phrase> + id: LANG_SHOW_SHUFFLED_ADDING_OPTIONS + desc: in Current Playlist settings + user: core + <source> + *: "Show Shuffled Adding Options" + </source> + <dest> + *: "Show Shuffled Adding Options" + </dest> + <voice> + *: "Show Shuffled Adding Options" + </voice> +</phrase> +<phrase> + id: LANG_IN_SUBMENU + desc: in Settings + user: core + <source> + *: "In Submenu" + </source> + <dest> + *: "In Submenu" + </dest> + <voice> + *: "In Submenu" + </voice> +</phrase>
\ No newline at end of file diff --git a/apps/menus/playlist_menu.c b/apps/menus/playlist_menu.c index b0d9a44a9e..dfb9d73d62 100644 --- a/apps/menus/playlist_menu.c +++ b/apps/menus/playlist_menu.c @@ -80,15 +80,14 @@ static int playlist_view_(void) playlist_viewer_ex(NULL); return 0; } -MENUITEM_FUNCTION(create_playlist_item, 0, ID2P(LANG_CREATE_PLAYLIST), +MENUITEM_FUNCTION(create_playlist_item, 0, ID2P(LANG_CREATE_PLAYLIST), create_playlist, NULL, NULL, Icon_NOICON); MENUITEM_FUNCTION(view_cur_playlist, 0, - ID2P(LANG_VIEW_DYNAMIC_PLAYLIST), + ID2P(LANG_VIEW_DYNAMIC_PLAYLIST), playlist_view_, NULL, NULL, Icon_NOICON); -MENUITEM_FUNCTION(save_playlist, MENU_FUNC_USEPARAM, ID2P(LANG_SAVE_DYNAMIC_PLAYLIST), +MENUITEM_FUNCTION(save_playlist, MENU_FUNC_USEPARAM, ID2P(LANG_SAVE_DYNAMIC_PLAYLIST), save_playlist_screen, NULL, NULL, Icon_NOICON); MENUITEM_SETTING(recursive_dir_insert, &global_settings.recursive_dir_insert, NULL); -MENUITEM_SETTING(warn_on_erase, &global_settings.warnon_erase_dynplaylist, NULL); static int clear_catalog_directory(void) { catalog_set_directory(NULL); @@ -96,22 +95,29 @@ static int clear_catalog_directory(void) splash(HZ, ID2P(LANG_RESET_DONE_CLEAR)); return false; } -MENUITEM_FUNCTION(clear_catalog_directory_item, 0, ID2P(LANG_RESET_PLAYLISTCAT_DIR), +MENUITEM_FUNCTION(clear_catalog_directory_item, 0, ID2P(LANG_RESET_PLAYLISTCAT_DIR), clear_catalog_directory, NULL, NULL, Icon_file_view_menu); /* Playlist viewer settings submenu */ MENUITEM_SETTING(show_icons, &global_settings.playlist_viewer_icons, NULL); MENUITEM_SETTING(show_indices, &global_settings.playlist_viewer_indices, NULL); -MENUITEM_SETTING(track_display, +MENUITEM_SETTING(track_display, &global_settings.playlist_viewer_track_display, NULL); -MAKE_MENU(viewer_settings_menu, ID2P(LANG_PLAYLISTVIEWER_SETTINGS), +MAKE_MENU(viewer_settings_menu, ID2P(LANG_PLAYLISTVIEWER_SETTINGS), NULL, Icon_Playlist, &show_icons, &show_indices, &track_display); +/* Current Playlist submenu */ +MENUITEM_SETTING(warn_on_erase, &global_settings.warnon_erase_dynplaylist, NULL); +MENUITEM_SETTING(show_shuffled_adding_options, &global_settings.show_shuffled_adding_options, NULL); +MENUITEM_SETTING(show_queue_options, &global_settings.show_queue_options, NULL); +MAKE_MENU(currentplaylist_settings_menu, ID2P(LANG_CURRENT_PLAYLIST), + NULL, Icon_Playlist, + &warn_on_erase, &show_shuffled_adding_options, &show_queue_options); MAKE_MENU(playlist_settings, ID2P(LANG_PLAYLISTS), NULL, Icon_Playlist, - &viewer_settings_menu, &recursive_dir_insert, &warn_on_erase); + &viewer_settings_menu, &recursive_dir_insert, ¤tplaylist_settings_menu); MAKE_MENU(playlist_options, ID2P(LANG_PLAYLISTS), NULL, Icon_Playlist, &create_playlist_item, &view_cur_playlist, diff --git a/apps/onplay.c b/apps/onplay.c index 35d9a82bfd..be92a2909a 100644 --- a/apps/onplay.c +++ b/apps/onplay.c @@ -582,22 +582,8 @@ static int playlist_queue_func(void *param) } static int treeplaylist_wplayback_callback(int action, - const struct menu_item_ex* this_item, - struct gui_synclist *this_list) -{ - (void)this_item; - (void)this_list; - switch (action) - { - case ACTION_REQUEST_MENUITEM: - if (audio_status() & AUDIO_STATUS_PLAY) - return action; - else - return ACTION_EXIT_MENUITEM; - break; - } - return action; -} + const struct menu_item_ex* this_item, + struct gui_synclist *this_list); static int treeplaylist_callback(int action, const struct menu_item_ex *this_item, @@ -624,40 +610,95 @@ MENUITEM_FUNCTION(i_last_shuf_pl_item, MENU_FUNC_USEPARAM, /* queue items */ MENUITEM_FUNCTION(q_pl_item, MENU_FUNC_USEPARAM, ID2P(LANG_QUEUE), playlist_queue_func, (intptr_t*)PLAYLIST_INSERT, - treeplaylist_wplayback_callback, Icon_Playlist); + treeplaylist_callback, Icon_Playlist); MENUITEM_FUNCTION(q_first_pl_item, MENU_FUNC_USEPARAM, ID2P(LANG_QUEUE_FIRST), playlist_queue_func, (intptr_t*)PLAYLIST_INSERT_FIRST, - treeplaylist_wplayback_callback, Icon_Playlist); + treeplaylist_callback, Icon_Playlist); MENUITEM_FUNCTION(q_last_pl_item, MENU_FUNC_USEPARAM, ID2P(LANG_QUEUE_LAST), playlist_queue_func, (intptr_t*)PLAYLIST_INSERT_LAST, - treeplaylist_wplayback_callback, Icon_Playlist); + treeplaylist_callback, Icon_Playlist); MENUITEM_FUNCTION(q_shuf_pl_item, MENU_FUNC_USEPARAM, ID2P(LANG_QUEUE_SHUFFLED), playlist_queue_func, (intptr_t*)PLAYLIST_INSERT_SHUFFLED, - treeplaylist_wplayback_callback, Icon_Playlist); + treeplaylist_callback, Icon_Playlist); MENUITEM_FUNCTION(q_last_shuf_pl_item, MENU_FUNC_USEPARAM, ID2P(LANG_QUEUE_LAST_SHUFFLED), playlist_queue_func, (intptr_t*)PLAYLIST_INSERT_LAST_SHUFFLED, treeplaylist_callback, Icon_Playlist); + +/* queue items in submenu */ +MENUITEM_FUNCTION(q_pl_submenu_item, MENU_FUNC_USEPARAM, ID2P(LANG_QUEUE), + playlist_queue_func, (intptr_t*)PLAYLIST_INSERT, + NULL, Icon_Playlist); +MENUITEM_FUNCTION(q_first_pl_submenu_item, MENU_FUNC_USEPARAM, ID2P(LANG_QUEUE_FIRST), + playlist_queue_func, (intptr_t*)PLAYLIST_INSERT_FIRST, + NULL, Icon_Playlist); +MENUITEM_FUNCTION(q_last_pl_submenu_item, MENU_FUNC_USEPARAM, ID2P(LANG_QUEUE_LAST), + playlist_queue_func, (intptr_t*)PLAYLIST_INSERT_LAST, + NULL, Icon_Playlist); +MENUITEM_FUNCTION(q_shuf_pl_submenu_item, MENU_FUNC_USEPARAM, + ID2P(LANG_QUEUE_SHUFFLED), playlist_queue_func, + (intptr_t*)PLAYLIST_INSERT_SHUFFLED, + treeplaylist_callback, Icon_Playlist); +MENUITEM_FUNCTION(q_last_shuf_pl_submenu_item, MENU_FUNC_USEPARAM, + ID2P(LANG_QUEUE_LAST_SHUFFLED), playlist_queue_func, + (intptr_t*)PLAYLIST_INSERT_LAST_SHUFFLED, + treeplaylist_callback, Icon_Playlist); + +MAKE_ONPLAYMENU(queue_menu, ID2P(LANG_QUEUE_MENU), + treeplaylist_wplayback_callback, Icon_Playlist, + &q_pl_submenu_item, + &q_first_pl_submenu_item, + &q_last_pl_submenu_item, + &q_shuf_pl_submenu_item, + &q_last_shuf_pl_submenu_item); + +static int treeplaylist_wplayback_callback(int action, + const struct menu_item_ex* this_item, + struct gui_synclist *this_list) +{ + (void)this_list; + switch (action) + { + case ACTION_REQUEST_MENUITEM: + if ((audio_status() & AUDIO_STATUS_PLAY) && + (this_item != &queue_menu || + global_settings.show_queue_options == QUEUE_SHOW_IN_SUBMENU)) + return action; + else + return ACTION_EXIT_MENUITEM; + break; + } + return action; +} + /* replace playlist */ MENUITEM_FUNCTION(replace_pl_item, MENU_FUNC_USEPARAM, ID2P(LANG_CLEAR_LIST_AND_PLAY_NEXT), playlist_insert_func, (intptr_t*)PLAYLIST_REPLACE, NULL, Icon_Playlist); +MAKE_ONPLAYMENU(tree_playlist_menu, ID2P(LANG_CURRENT_PLAYLIST), + treeplaylist_callback, Icon_Playlist, -MAKE_ONPLAYMENU( tree_playlist_menu, ID2P(LANG_CURRENT_PLAYLIST), - treeplaylist_callback, Icon_Playlist, + /* insert */ + &i_pl_item, + &i_first_pl_item, + &i_last_pl_item, + &i_shuf_pl_item, + &i_last_shuf_pl_item, - /* insert */ - &i_pl_item, &i_first_pl_item, &i_last_pl_item, - &i_shuf_pl_item, &i_last_shuf_pl_item, - /* queue */ + /* queue */ + &q_pl_item, + &q_first_pl_item, + &q_last_pl_item, + &q_shuf_pl_item, + &q_last_shuf_pl_item, - &q_pl_item, &q_first_pl_item, &q_last_pl_item, - &q_shuf_pl_item, &q_last_shuf_pl_item, + /* Queue submenu */ + &queue_menu, - /* replace */ - &replace_pl_item + /* replace */ + &replace_pl_item ); static int treeplaylist_callback(int action, const struct menu_item_ex *this_item, @@ -669,36 +710,55 @@ static int treeplaylist_callback(int action, case ACTION_REQUEST_MENUITEM: if (this_item == &tree_playlist_menu) { - if (((selected_file_attr & FILE_ATTR_MASK) == - FILE_ATTR_AUDIO) || - ((selected_file_attr & FILE_ATTR_MASK) == FILE_ATTR_M3U)|| - (selected_file_attr & ATTR_DIRECTORY)) - { - return action; - } + if ((selected_file_attr & FILE_ATTR_MASK) == FILE_ATTR_AUDIO || + (selected_file_attr & FILE_ATTR_MASK) == FILE_ATTR_M3U || + (selected_file_attr & ATTR_DIRECTORY)) + return action; } - else if (this_item == &i_pl_item) + else if (this_item == &i_pl_item && + global_status.resume_index != -1) { - if (global_status.resume_index != -1) - return action; + return action; + } + else if ((this_item == &q_pl_item || + this_item == &q_first_pl_item || + this_item == &q_last_pl_item) && + global_settings.show_queue_options == QUEUE_SHOW_AT_TOPLEVEL && + (audio_status() & AUDIO_STATUS_PLAY)) + { + return action; } else if (this_item == &i_shuf_pl_item) { - if ((global_status.resume_index != -1) && - ((audio_status() & AUDIO_STATUS_PLAY) || - (selected_file_attr & ATTR_DIRECTORY) || - ((selected_file_attr & FILE_ATTR_MASK) == FILE_ATTR_M3U))) + if (global_settings.show_shuffled_adding_options && + (global_status.resume_index != -1) && + ((audio_status() & AUDIO_STATUS_PLAY) || + (selected_file_attr & ATTR_DIRECTORY) || + ((selected_file_attr & FILE_ATTR_MASK) == FILE_ATTR_M3U))) + { + return action; + } + } + else if (this_item == &q_shuf_pl_submenu_item || + (this_item == &q_shuf_pl_item && + global_settings.show_queue_options == QUEUE_SHOW_AT_TOPLEVEL)) + { + if (global_settings.show_shuffled_adding_options && + (audio_status() & AUDIO_STATUS_PLAY)) { return action; } } else if (this_item == &i_last_shuf_pl_item || - this_item == &q_last_shuf_pl_item) + this_item == &q_last_shuf_pl_submenu_item || + (this_item == &q_last_shuf_pl_item && + global_settings.show_queue_options == QUEUE_SHOW_AT_TOPLEVEL)) { - if ((playlist_amount() > 0) && + if (global_settings.show_shuffled_adding_options && + (playlist_amount() > 0) && (audio_status() & AUDIO_STATUS_PLAY) && ((selected_file_attr & ATTR_DIRECTORY) || - ((selected_file_attr & FILE_ATTR_MASK) == FILE_ATTR_M3U))) + ((selected_file_attr & FILE_ATTR_MASK) == FILE_ATTR_M3U))) { return action; } diff --git a/apps/settings.h b/apps/settings.h index 60f2b44588..cc60617de4 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -109,6 +109,12 @@ enum NUM_REPEAT_MODES }; +enum +{ + QUEUE_HIDE = 0, + QUEUE_SHOW_AT_TOPLEVEL, + QUEUE_SHOW_IN_SUBMENU +}; /* dir filter options */ /* Note: Any new filter modes need to be added before NUM_FILTER_MODES. @@ -574,6 +580,8 @@ struct user_settings bool fade_on_stop; /* fade on pause/unpause/stop */ bool playlist_shuffle; bool warnon_erase_dynplaylist; /* warn when erasing dynamic playlist */ + bool show_shuffled_adding_options; /* whether to display options for adding shuffled tracks to dynamic playlist */ + int show_queue_options; /* how and whether to display options to queue tracks */ /* playlist viewer settings */ bool playlist_viewer_icons; /* display icons on viewer */ diff --git a/apps/settings_list.c b/apps/settings_list.c index cf52f26080..e5c02f6bf3 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c @@ -1788,6 +1788,15 @@ const struct settings_list settings[] = { OFFON_SETTING(0, warnon_erase_dynplaylist, LANG_WARN_ERASEDYNPLAYLIST_MENU, true, "warn when erasing dynamic playlist",NULL), + OFFON_SETTING(0, show_shuffled_adding_options, LANG_SHOW_SHUFFLED_ADDING_OPTIONS, true, + "show shuffled adding options", NULL), + CHOICE_SETTING(0, show_queue_options, LANG_SHOW_QUEUE_OPTIONS, 1, + "show queue options", "off,on,in submenu", + NULL, 3, + ID2P(LANG_SET_BOOL_NO), + ID2P(LANG_SET_BOOL_YES), + ID2P(LANG_IN_SUBMENU)), + #ifdef HAVE_BACKLIGHT #ifdef HAS_BUTTON_HOLD CHOICE_SETTING(0, backlight_on_button_hold, LANG_BACKLIGHT_ON_BUTTON_HOLD, |