summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Soffke <christian.soffke@gmail.com>2021-03-12 19:24:58 +0100
committerSolomon Peachy <pizza@shaftnet.org>2021-03-14 23:36:03 +0000
commit2d8e0f7c907ee0d50e6e55fc9ed5f94a43ab5d67 (patch)
tree57d7525bc71142b11ec7164e53f1d656de8ed335
parent99383a0f9ba9e940a4017890965494c373a7f09a (diff)
downloadrockbox-2d8e0f7c907ee0d50e6e55fc9ed5f94a43ab5d67.tar.gz
rockbox-2d8e0f7c907ee0d50e6e55fc9ed5f94a43ab5d67.zip
Customizable Current Playlist Submenu
Options to add shuffled tracks and to queue tracks in the Current Playlist Submenu can now be hidden, or the latter can also be put into its own submenu. Users can customize this in Settings by going to "General Settings - Playlists -> Current Playlist" and choosing from "Show Shuffled Adding Options" (No / Yes) or "Show Queue Options" (No / Yes / In Submenu). Allows for the paring down of the set of choices to a minimum of the 4 more common ones for adding tracks to a dynamic playlist (coming from the current total of 11). Defaults have been set so that users have to actively modify their settings to notice any difference, which makes it unlikely that anybody's workflow would be negatively affected by this change. Change-Id: Ibe48fc4da2c79f54cd7272df8e1e3ba9955203e5
-rw-r--r--apps/lang/english.lang56
-rw-r--r--apps/menus/playlist_menu.c22
-rw-r--r--apps/onplay.c154
-rw-r--r--apps/settings.h8
-rw-r--r--apps/settings_list.c9
-rw-r--r--manual/appendix/config_file_options.tex4
-rw-r--r--manual/configure_rockbox/playlist_options.tex40
-rw-r--r--manual/main_menu/main.tex2
-rw-r--r--manual/working_with_playlists/main.tex8
9 files changed, 242 insertions, 61 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 @@
15618 *: "Clear List & Play Next" 15618 *: "Clear List & Play Next"
15619 </voice> 15619 </voice>
15620</phrase> 15620</phrase>
15621<phrase>
15622 id: LANG_QUEUE_MENU
15623 desc: in onplay menu
15624 user: core
15625 <source>
15626 *: "Queue..."
15627 </source>
15628 <dest>
15629 *: "Queue..."
15630 </dest>
15631 <voice>
15632 *: "Queue..."
15633 </voice>
15634</phrase>
15635<phrase>
15636 id: LANG_SHOW_QUEUE_OPTIONS
15637 desc: in Current Playlist settings
15638 user: core
15639 <source>
15640 *: "Show Queue Options"
15641 </source>
15642 <dest>
15643 *: "Show Queue Options"
15644 </dest>
15645 <voice>
15646 *: "Show Queue Options"
15647 </voice>
15648</phrase>
15649<phrase>
15650 id: LANG_SHOW_SHUFFLED_ADDING_OPTIONS
15651 desc: in Current Playlist settings
15652 user: core
15653 <source>
15654 *: "Show Shuffled Adding Options"
15655 </source>
15656 <dest>
15657 *: "Show Shuffled Adding Options"
15658 </dest>
15659 <voice>
15660 *: "Show Shuffled Adding Options"
15661 </voice>
15662</phrase>
15663<phrase>
15664 id: LANG_IN_SUBMENU
15665 desc: in Settings
15666 user: core
15667 <source>
15668 *: "In Submenu"
15669 </source>
15670 <dest>
15671 *: "In Submenu"
15672 </dest>
15673 <voice>
15674 *: "In Submenu"
15675 </voice>
15676</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)
80 playlist_viewer_ex(NULL); 80 playlist_viewer_ex(NULL);
81 return 0; 81 return 0;
82} 82}
83MENUITEM_FUNCTION(create_playlist_item, 0, ID2P(LANG_CREATE_PLAYLIST), 83MENUITEM_FUNCTION(create_playlist_item, 0, ID2P(LANG_CREATE_PLAYLIST),
84 create_playlist, NULL, NULL, Icon_NOICON); 84 create_playlist, NULL, NULL, Icon_NOICON);
85MENUITEM_FUNCTION(view_cur_playlist, 0, 85MENUITEM_FUNCTION(view_cur_playlist, 0,
86 ID2P(LANG_VIEW_DYNAMIC_PLAYLIST), 86 ID2P(LANG_VIEW_DYNAMIC_PLAYLIST),
87 playlist_view_, NULL, NULL, Icon_NOICON); 87 playlist_view_, NULL, NULL, Icon_NOICON);
88MENUITEM_FUNCTION(save_playlist, MENU_FUNC_USEPARAM, ID2P(LANG_SAVE_DYNAMIC_PLAYLIST), 88MENUITEM_FUNCTION(save_playlist, MENU_FUNC_USEPARAM, ID2P(LANG_SAVE_DYNAMIC_PLAYLIST),
89 save_playlist_screen, NULL, NULL, Icon_NOICON); 89 save_playlist_screen, NULL, NULL, Icon_NOICON);
90MENUITEM_SETTING(recursive_dir_insert, &global_settings.recursive_dir_insert, NULL); 90MENUITEM_SETTING(recursive_dir_insert, &global_settings.recursive_dir_insert, NULL);
91MENUITEM_SETTING(warn_on_erase, &global_settings.warnon_erase_dynplaylist, NULL);
92static int clear_catalog_directory(void) 91static int clear_catalog_directory(void)
93{ 92{
94 catalog_set_directory(NULL); 93 catalog_set_directory(NULL);
@@ -96,22 +95,29 @@ static int clear_catalog_directory(void)
96 splash(HZ, ID2P(LANG_RESET_DONE_CLEAR)); 95 splash(HZ, ID2P(LANG_RESET_DONE_CLEAR));
97 return false; 96 return false;
98} 97}
99MENUITEM_FUNCTION(clear_catalog_directory_item, 0, ID2P(LANG_RESET_PLAYLISTCAT_DIR), 98MENUITEM_FUNCTION(clear_catalog_directory_item, 0, ID2P(LANG_RESET_PLAYLISTCAT_DIR),
100 clear_catalog_directory, NULL, NULL, Icon_file_view_menu); 99 clear_catalog_directory, NULL, NULL, Icon_file_view_menu);
101 100
102/* Playlist viewer settings submenu */ 101/* Playlist viewer settings submenu */
103MENUITEM_SETTING(show_icons, &global_settings.playlist_viewer_icons, NULL); 102MENUITEM_SETTING(show_icons, &global_settings.playlist_viewer_icons, NULL);
104MENUITEM_SETTING(show_indices, &global_settings.playlist_viewer_indices, NULL); 103MENUITEM_SETTING(show_indices, &global_settings.playlist_viewer_indices, NULL);
105MENUITEM_SETTING(track_display, 104MENUITEM_SETTING(track_display,
106 &global_settings.playlist_viewer_track_display, NULL); 105 &global_settings.playlist_viewer_track_display, NULL);
107MAKE_MENU(viewer_settings_menu, ID2P(LANG_PLAYLISTVIEWER_SETTINGS), 106MAKE_MENU(viewer_settings_menu, ID2P(LANG_PLAYLISTVIEWER_SETTINGS),
108 NULL, Icon_Playlist, 107 NULL, Icon_Playlist,
109 &show_icons, &show_indices, &track_display); 108 &show_icons, &show_indices, &track_display);
110 109
110/* Current Playlist submenu */
111MENUITEM_SETTING(warn_on_erase, &global_settings.warnon_erase_dynplaylist, NULL);
112MENUITEM_SETTING(show_shuffled_adding_options, &global_settings.show_shuffled_adding_options, NULL);
113MENUITEM_SETTING(show_queue_options, &global_settings.show_queue_options, NULL);
114MAKE_MENU(currentplaylist_settings_menu, ID2P(LANG_CURRENT_PLAYLIST),
115 NULL, Icon_Playlist,
116 &warn_on_erase, &show_shuffled_adding_options, &show_queue_options);
111 117
112MAKE_MENU(playlist_settings, ID2P(LANG_PLAYLISTS), NULL, 118MAKE_MENU(playlist_settings, ID2P(LANG_PLAYLISTS), NULL,
113 Icon_Playlist, 119 Icon_Playlist,
114 &viewer_settings_menu, &recursive_dir_insert, &warn_on_erase); 120 &viewer_settings_menu, &recursive_dir_insert, &currentplaylist_settings_menu);
115MAKE_MENU(playlist_options, ID2P(LANG_PLAYLISTS), NULL, 121MAKE_MENU(playlist_options, ID2P(LANG_PLAYLISTS), NULL,
116 Icon_Playlist, 122 Icon_Playlist,
117 &create_playlist_item, &view_cur_playlist, 123 &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)
582} 582}
583 583
584static int treeplaylist_wplayback_callback(int action, 584static int treeplaylist_wplayback_callback(int action,
585 const struct menu_item_ex* this_item, 585 const struct menu_item_ex* this_item,
586 struct gui_synclist *this_list) 586 struct gui_synclist *this_list);
587{
588 (void)this_item;
589 (void)this_list;
590 switch (action)
591 {
592 case ACTION_REQUEST_MENUITEM:
593 if (audio_status() & AUDIO_STATUS_PLAY)
594 return action;
595 else
596 return ACTION_EXIT_MENUITEM;
597 break;
598 }
599 return action;
600}
601 587
602static int treeplaylist_callback(int action, 588static int treeplaylist_callback(int action,
603 const struct menu_item_ex *this_item, 589 const struct menu_item_ex *this_item,
@@ -624,40 +610,95 @@ MENUITEM_FUNCTION(i_last_shuf_pl_item, MENU_FUNC_USEPARAM,
624/* queue items */ 610/* queue items */
625MENUITEM_FUNCTION(q_pl_item, MENU_FUNC_USEPARAM, ID2P(LANG_QUEUE), 611MENUITEM_FUNCTION(q_pl_item, MENU_FUNC_USEPARAM, ID2P(LANG_QUEUE),
626 playlist_queue_func, (intptr_t*)PLAYLIST_INSERT, 612 playlist_queue_func, (intptr_t*)PLAYLIST_INSERT,
627 treeplaylist_wplayback_callback, Icon_Playlist); 613 treeplaylist_callback, Icon_Playlist);
628MENUITEM_FUNCTION(q_first_pl_item, MENU_FUNC_USEPARAM, ID2P(LANG_QUEUE_FIRST), 614MENUITEM_FUNCTION(q_first_pl_item, MENU_FUNC_USEPARAM, ID2P(LANG_QUEUE_FIRST),
629 playlist_queue_func, (intptr_t*)PLAYLIST_INSERT_FIRST, 615 playlist_queue_func, (intptr_t*)PLAYLIST_INSERT_FIRST,
630 treeplaylist_wplayback_callback, Icon_Playlist); 616 treeplaylist_callback, Icon_Playlist);
631MENUITEM_FUNCTION(q_last_pl_item, MENU_FUNC_USEPARAM, ID2P(LANG_QUEUE_LAST), 617MENUITEM_FUNCTION(q_last_pl_item, MENU_FUNC_USEPARAM, ID2P(LANG_QUEUE_LAST),
632 playlist_queue_func, (intptr_t*)PLAYLIST_INSERT_LAST, 618 playlist_queue_func, (intptr_t*)PLAYLIST_INSERT_LAST,
633 treeplaylist_wplayback_callback, Icon_Playlist); 619 treeplaylist_callback, Icon_Playlist);
634MENUITEM_FUNCTION(q_shuf_pl_item, MENU_FUNC_USEPARAM, 620MENUITEM_FUNCTION(q_shuf_pl_item, MENU_FUNC_USEPARAM,
635 ID2P(LANG_QUEUE_SHUFFLED), playlist_queue_func, 621 ID2P(LANG_QUEUE_SHUFFLED), playlist_queue_func,
636 (intptr_t*)PLAYLIST_INSERT_SHUFFLED, 622 (intptr_t*)PLAYLIST_INSERT_SHUFFLED,
637 treeplaylist_wplayback_callback, Icon_Playlist); 623 treeplaylist_callback, Icon_Playlist);
638MENUITEM_FUNCTION(q_last_shuf_pl_item, MENU_FUNC_USEPARAM, 624MENUITEM_FUNCTION(q_last_shuf_pl_item, MENU_FUNC_USEPARAM,
639 ID2P(LANG_QUEUE_LAST_SHUFFLED), playlist_queue_func, 625 ID2P(LANG_QUEUE_LAST_SHUFFLED), playlist_queue_func,
640 (intptr_t*)PLAYLIST_INSERT_LAST_SHUFFLED, 626 (intptr_t*)PLAYLIST_INSERT_LAST_SHUFFLED,
641 treeplaylist_callback, Icon_Playlist); 627 treeplaylist_callback, Icon_Playlist);
628
629/* queue items in submenu */
630MENUITEM_FUNCTION(q_pl_submenu_item, MENU_FUNC_USEPARAM, ID2P(LANG_QUEUE),
631 playlist_queue_func, (intptr_t*)PLAYLIST_INSERT,
632 NULL, Icon_Playlist);
633MENUITEM_FUNCTION(q_first_pl_submenu_item, MENU_FUNC_USEPARAM, ID2P(LANG_QUEUE_FIRST),
634 playlist_queue_func, (intptr_t*)PLAYLIST_INSERT_FIRST,
635 NULL, Icon_Playlist);
636MENUITEM_FUNCTION(q_last_pl_submenu_item, MENU_FUNC_USEPARAM, ID2P(LANG_QUEUE_LAST),
637 playlist_queue_func, (intptr_t*)PLAYLIST_INSERT_LAST,
638 NULL, Icon_Playlist);
639MENUITEM_FUNCTION(q_shuf_pl_submenu_item, MENU_FUNC_USEPARAM,
640 ID2P(LANG_QUEUE_SHUFFLED), playlist_queue_func,
641 (intptr_t*)PLAYLIST_INSERT_SHUFFLED,
642 treeplaylist_callback, Icon_Playlist);
643MENUITEM_FUNCTION(q_last_shuf_pl_submenu_item, MENU_FUNC_USEPARAM,
644 ID2P(LANG_QUEUE_LAST_SHUFFLED), playlist_queue_func,
645 (intptr_t*)PLAYLIST_INSERT_LAST_SHUFFLED,
646 treeplaylist_callback, Icon_Playlist);
647
648MAKE_ONPLAYMENU(queue_menu, ID2P(LANG_QUEUE_MENU),
649 treeplaylist_wplayback_callback, Icon_Playlist,
650 &q_pl_submenu_item,
651 &q_first_pl_submenu_item,
652 &q_last_pl_submenu_item,
653 &q_shuf_pl_submenu_item,
654 &q_last_shuf_pl_submenu_item);
655
656static int treeplaylist_wplayback_callback(int action,
657 const struct menu_item_ex* this_item,
658 struct gui_synclist *this_list)
659{
660 (void)this_list;
661 switch (action)
662 {
663 case ACTION_REQUEST_MENUITEM:
664 if ((audio_status() & AUDIO_STATUS_PLAY) &&
665 (this_item != &queue_menu ||
666 global_settings.show_queue_options == QUEUE_SHOW_IN_SUBMENU))
667 return action;
668 else
669 return ACTION_EXIT_MENUITEM;
670 break;
671 }
672 return action;
673}
674
642/* replace playlist */ 675/* replace playlist */
643MENUITEM_FUNCTION(replace_pl_item, MENU_FUNC_USEPARAM, ID2P(LANG_CLEAR_LIST_AND_PLAY_NEXT), 676MENUITEM_FUNCTION(replace_pl_item, MENU_FUNC_USEPARAM, ID2P(LANG_CLEAR_LIST_AND_PLAY_NEXT),
644 playlist_insert_func, (intptr_t*)PLAYLIST_REPLACE, 677 playlist_insert_func, (intptr_t*)PLAYLIST_REPLACE,
645 NULL, Icon_Playlist); 678 NULL, Icon_Playlist);
646 679
680MAKE_ONPLAYMENU(tree_playlist_menu, ID2P(LANG_CURRENT_PLAYLIST),
681 treeplaylist_callback, Icon_Playlist,
647 682
648MAKE_ONPLAYMENU( tree_playlist_menu, ID2P(LANG_CURRENT_PLAYLIST), 683 /* insert */
649 treeplaylist_callback, Icon_Playlist, 684 &i_pl_item,
685 &i_first_pl_item,
686 &i_last_pl_item,
687 &i_shuf_pl_item,
688 &i_last_shuf_pl_item,
650 689
651 /* insert */ 690 /* queue */
652 &i_pl_item, &i_first_pl_item, &i_last_pl_item, 691 &q_pl_item,
653 &i_shuf_pl_item, &i_last_shuf_pl_item, 692 &q_first_pl_item,
654 /* queue */ 693 &q_last_pl_item,
694 &q_shuf_pl_item,
695 &q_last_shuf_pl_item,
655 696
656 &q_pl_item, &q_first_pl_item, &q_last_pl_item, 697 /* Queue submenu */
657 &q_shuf_pl_item, &q_last_shuf_pl_item, 698 &queue_menu,
658 699
659 /* replace */ 700 /* replace */
660 &replace_pl_item 701 &replace_pl_item
661 ); 702 );
662static int treeplaylist_callback(int action, 703static int treeplaylist_callback(int action,
663 const struct menu_item_ex *this_item, 704 const struct menu_item_ex *this_item,
@@ -669,36 +710,55 @@ static int treeplaylist_callback(int action,
669 case ACTION_REQUEST_MENUITEM: 710 case ACTION_REQUEST_MENUITEM:
670 if (this_item == &tree_playlist_menu) 711 if (this_item == &tree_playlist_menu)
671 { 712 {
672 if (((selected_file_attr & FILE_ATTR_MASK) == 713 if ((selected_file_attr & FILE_ATTR_MASK) == FILE_ATTR_AUDIO ||
673 FILE_ATTR_AUDIO) || 714 (selected_file_attr & FILE_ATTR_MASK) == FILE_ATTR_M3U ||
674 ((selected_file_attr & FILE_ATTR_MASK) == FILE_ATTR_M3U)|| 715 (selected_file_attr & ATTR_DIRECTORY))
675 (selected_file_attr & ATTR_DIRECTORY)) 716 return action;
676 {
677 return action;
678 }
679 } 717 }
680 else if (this_item == &i_pl_item) 718 else if (this_item == &i_pl_item &&
719 global_status.resume_index != -1)
681 { 720 {
682 if (global_status.resume_index != -1) 721 return action;
683 return action; 722 }
723 else if ((this_item == &q_pl_item ||
724 this_item == &q_first_pl_item ||
725 this_item == &q_last_pl_item) &&
726 global_settings.show_queue_options == QUEUE_SHOW_AT_TOPLEVEL &&
727 (audio_status() & AUDIO_STATUS_PLAY))
728 {
729 return action;
684 } 730 }
685 else if (this_item == &i_shuf_pl_item) 731 else if (this_item == &i_shuf_pl_item)
686 { 732 {
687 if ((global_status.resume_index != -1) && 733 if (global_settings.show_shuffled_adding_options &&
688 ((audio_status() & AUDIO_STATUS_PLAY) || 734 (global_status.resume_index != -1) &&
689 (selected_file_attr & ATTR_DIRECTORY) || 735 ((audio_status() & AUDIO_STATUS_PLAY) ||
690 ((selected_file_attr & FILE_ATTR_MASK) == FILE_ATTR_M3U))) 736 (selected_file_attr & ATTR_DIRECTORY) ||
737 ((selected_file_attr & FILE_ATTR_MASK) == FILE_ATTR_M3U)))
738 {
739 return action;
740 }
741 }
742 else if (this_item == &q_shuf_pl_submenu_item ||
743 (this_item == &q_shuf_pl_item &&
744 global_settings.show_queue_options == QUEUE_SHOW_AT_TOPLEVEL))
745 {
746 if (global_settings.show_shuffled_adding_options &&
747 (audio_status() & AUDIO_STATUS_PLAY))
691 { 748 {
692 return action; 749 return action;
693 } 750 }
694 } 751 }
695 else if (this_item == &i_last_shuf_pl_item || 752 else if (this_item == &i_last_shuf_pl_item ||
696 this_item == &q_last_shuf_pl_item) 753 this_item == &q_last_shuf_pl_submenu_item ||
754 (this_item == &q_last_shuf_pl_item &&
755 global_settings.show_queue_options == QUEUE_SHOW_AT_TOPLEVEL))
697 { 756 {
698 if ((playlist_amount() > 0) && 757 if (global_settings.show_shuffled_adding_options &&
758 (playlist_amount() > 0) &&
699 (audio_status() & AUDIO_STATUS_PLAY) && 759 (audio_status() & AUDIO_STATUS_PLAY) &&
700 ((selected_file_attr & ATTR_DIRECTORY) || 760 ((selected_file_attr & ATTR_DIRECTORY) ||
701 ((selected_file_attr & FILE_ATTR_MASK) == FILE_ATTR_M3U))) 761 ((selected_file_attr & FILE_ATTR_MASK) == FILE_ATTR_M3U)))
702 { 762 {
703 return action; 763 return action;
704 } 764 }
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
109 NUM_REPEAT_MODES 109 NUM_REPEAT_MODES
110}; 110};
111 111
112enum
113{
114 QUEUE_HIDE = 0,
115 QUEUE_SHOW_AT_TOPLEVEL,
116 QUEUE_SHOW_IN_SUBMENU
117};
112 118
113/* dir filter options */ 119/* dir filter options */
114/* Note: Any new filter modes need to be added before NUM_FILTER_MODES. 120/* Note: Any new filter modes need to be added before NUM_FILTER_MODES.
@@ -574,6 +580,8 @@ struct user_settings
574 bool fade_on_stop; /* fade on pause/unpause/stop */ 580 bool fade_on_stop; /* fade on pause/unpause/stop */
575 bool playlist_shuffle; 581 bool playlist_shuffle;
576 bool warnon_erase_dynplaylist; /* warn when erasing dynamic playlist */ 582 bool warnon_erase_dynplaylist; /* warn when erasing dynamic playlist */
583 bool show_shuffled_adding_options; /* whether to display options for adding shuffled tracks to dynamic playlist */
584 int show_queue_options; /* how and whether to display options to queue tracks */
577 585
578 /* playlist viewer settings */ 586 /* playlist viewer settings */
579 bool playlist_viewer_icons; /* display icons on viewer */ 587 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[] = {
1788 OFFON_SETTING(0, warnon_erase_dynplaylist, LANG_WARN_ERASEDYNPLAYLIST_MENU, 1788 OFFON_SETTING(0, warnon_erase_dynplaylist, LANG_WARN_ERASEDYNPLAYLIST_MENU,
1789 true, "warn when erasing dynamic playlist",NULL), 1789 true, "warn when erasing dynamic playlist",NULL),
1790 1790
1791 OFFON_SETTING(0, show_shuffled_adding_options, LANG_SHOW_SHUFFLED_ADDING_OPTIONS, true,
1792 "show shuffled adding options", NULL),
1793 CHOICE_SETTING(0, show_queue_options, LANG_SHOW_QUEUE_OPTIONS, 1,
1794 "show queue options", "off,on,in submenu",
1795 NULL, 3,
1796 ID2P(LANG_SET_BOOL_NO),
1797 ID2P(LANG_SET_BOOL_YES),
1798 ID2P(LANG_IN_SUBMENU)),
1799
1791#ifdef HAVE_BACKLIGHT 1800#ifdef HAVE_BACKLIGHT
1792#ifdef HAS_BUTTON_HOLD 1801#ifdef HAS_BUTTON_HOLD
1793 CHOICE_SETTING(0, backlight_on_button_hold, LANG_BACKLIGHT_ON_BUTTON_HOLD, 1802 CHOICE_SETTING(0, backlight_on_button_hold, LANG_BACKLIGHT_ON_BUTTON_HOLD,
diff --git a/manual/appendix/config_file_options.tex b/manual/appendix/config_file_options.tex
index 87e8a2ab96..abf6cf7f96 100644
--- a/manual/appendix/config_file_options.tex
+++ b/manual/appendix/config_file_options.tex
@@ -143,6 +143,10 @@
143 & on, off & N/A\\ 143 & on, off & N/A\\
144 warn when erasing dynamic playlist 144 warn when erasing dynamic playlist
145 & on, off & N/A\\ 145 & on, off & N/A\\
146 show shuffled adding options
147 & off, on & N/A\\
148 show queue options
149 & off, on, in submenu & N/A\\
146 cuesheet support 150 cuesheet support
147 & on, off & N/A\\ 151 & on, off & N/A\\
148 folder navigation & off, on, random & N/A\\ 152 folder navigation & off, on, random & N/A\\
diff --git a/manual/configure_rockbox/playlist_options.tex b/manual/configure_rockbox/playlist_options.tex
index 35a2648f70..bd493d6e4b 100644
--- a/manual/configure_rockbox/playlist_options.tex
+++ b/manual/configure_rockbox/playlist_options.tex
@@ -1,14 +1,46 @@
1% $Id:$ % 1% $Id:$ %
2\section{\label{ref:PlaylistOptions}Playlist} 2\section{\label{ref:PlaylistOptions}Playlists}
3The \setting{Playlist} sub menu allows you to configure settings 3
4The \setting{Playlists} submenu allows you to configure settings
4related to playlists. 5related to playlists.
6
7
5\begin{description} 8\begin{description}
9
10\item[Playlist Viewer Settings.]
11 This submenu contains settings related to the Playlist Viewer.
12 \begin{description}
13 \item[Show Icons.] This toggles display of the icon for the currently
14 selected playlist entry and the icon for moving a playlist entry
15 \item[Show Indices.] This toggles display of the line numbering for
16 the playlist
17 \item[Track Display.] This toggles between filename only and full path
18 for playlist entries
19 \end{description}
20
6\item[Recursively Insert Directories.] 21\item[Recursively Insert Directories.]
7 If set to \setting{On}, then when a directory is inserted or queued into a 22 If set to \setting{On}, then when a directory is inserted or queued into a
8 dynamic playlist, all subdirectories will also be inserted. If set to \setting{Ask}, 23 dynamic playlist, all subdirectories will also be inserted. If set to \setting{Ask},
9 Rockbox will prompt the user about whether to include sub-directories. 24 Rockbox will prompt the user about whether to include sub-directories.
10 25
11\item[Warn When Erasing Dynamic Playlist.] 26\item[Current Playlist.]
27 This submenu contains settings related to the current dynamic playlist.
28 \begin{description}
29
30 \item[Warn When Erasing Dynamic Playlist.]
12 If set to \setting{Yes}, Rockbox will provide a warning if the user attempts to 31 If set to \setting{Yes}, Rockbox will provide a warning if the user attempts to
13 take an action that will cause Rockbox to erase the current dynamic playlist. 32 take an action that will cause Rockbox to erase the current dynamic playlist.
33
34 \item[Show Shuffled Adding Options.]
35 If set to \setting{No}, Rockbox will not offer to add shuffled tracks
36 in the \setting{Current Playlist submenu}.
37
38 \item[Show Queue Options.]
39 If set to \setting{No}, Rockbox will not display the options to queue items in
40 the \setting{Current Playlist submenu}.
41 If set to \setting{In Submenu}, Rockbox will move the options into a
42 separate submenu.
43
44 \end{description}
45
14\end{description} 46\end{description}
diff --git a/manual/main_menu/main.tex b/manual/main_menu/main.tex
index 7a83c61935..bdb422e10a 100644
--- a/manual/main_menu/main.tex
+++ b/manual/main_menu/main.tex
@@ -163,7 +163,7 @@ The details of this menu are covered in
163 the \setting{Playlist} menu. Both automatically and manually created 163 the \setting{Playlist} menu. Both automatically and manually created
164 playlists can be edited using this menu. 164 playlists can be edited using this menu.
165 165
166\subsection{The Playlist Catalogue Context Menu} 166\subsection{\label{ref:playlistcatalogue_contextmenu}The Playlist Catalogue Context Menu}
167 167
168\begin{description} 168\begin{description}
169\item[Create Playlist:] 169\item[Create Playlist:]
diff --git a/manual/working_with_playlists/main.tex b/manual/working_with_playlists/main.tex
index 16995caf78..8bc233d346 100644
--- a/manual/working_with_playlists/main.tex
+++ b/manual/working_with_playlists/main.tex
@@ -71,7 +71,7 @@ the selected track or directory.
71\subsubsection{By using the Main Menu} 71\subsubsection{By using the Main Menu}
72To create a playlist containing some or all of the music on your \dap{}, you can use the 72To create a playlist containing some or all of the music on your \dap{}, you can use the
73\setting{Create Playlist} command in the \setting{Playlist Catalogue Context Menu} 73\setting{Create Playlist} command in the \setting{Playlist Catalogue Context Menu}
74(see \reference{ref:Contextmenu}). 74(see \reference{ref:playlistcatalogue_contextmenu}).
75 75
76\subsection{Adding music to playlists} 76\subsection{Adding music to playlists}
77 77
@@ -116,6 +116,12 @@ to the playlist file (see \reference{ref:playlistoptions}).
116\item [Queue Last Shuffled.] Corresponds to \setting{Insert Last Shuffled}. 116\item [Queue Last Shuffled.] Corresponds to \setting{Insert Last Shuffled}.
117\end{description} 117\end{description}
118 118
119\note{You can hide the options to add shuffled tracks or to queue tracks, if you wish.
120The latter can also be put into its own submenu. Simply go to
121\setting{Settings} $\rightarrow$ \setting{General Settings} $\rightarrow$ \setting{Playlists}
122$\rightarrow$ \setting{Current Playlist} and select either \setting{Show Shuffled Adding Options}
123or \setting{Show Queue Options} to customize the displayed set of options.}
124
119The \setting{Current Playlist Submenu} can be used to add either single tracks or 125The \setting{Current Playlist Submenu} can be used to add either single tracks or
120entire directories to a playlist. If the \setting{Current Playlist Submenu} is 126entire directories to a playlist. If the \setting{Current Playlist Submenu} is
121invoked on a single track, it will put only that track into the playlist. 127invoked on a single track, it will put only that track into the playlist.