diff options
author | Christian Soffke <christian.soffke@gmail.com> | 2021-03-12 19:24:58 +0100 |
---|---|---|
committer | Solomon Peachy <pizza@shaftnet.org> | 2021-03-14 23:36:03 +0000 |
commit | 2d8e0f7c907ee0d50e6e55fc9ed5f94a43ab5d67 (patch) | |
tree | 57d7525bc71142b11ec7164e53f1d656de8ed335 | |
parent | 99383a0f9ba9e940a4017890965494c373a7f09a (diff) | |
download | rockbox-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.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 | ||||
-rw-r--r-- | manual/appendix/config_file_options.tex | 4 | ||||
-rw-r--r-- | manual/configure_rockbox/playlist_options.tex | 40 | ||||
-rw-r--r-- | manual/main_menu/main.tex | 2 | ||||
-rw-r--r-- | manual/working_with_playlists/main.tex | 8 |
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 | } |
83 | MENUITEM_FUNCTION(create_playlist_item, 0, ID2P(LANG_CREATE_PLAYLIST), | 83 | MENUITEM_FUNCTION(create_playlist_item, 0, ID2P(LANG_CREATE_PLAYLIST), |
84 | create_playlist, NULL, NULL, Icon_NOICON); | 84 | create_playlist, NULL, NULL, Icon_NOICON); |
85 | MENUITEM_FUNCTION(view_cur_playlist, 0, | 85 | MENUITEM_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); |
88 | MENUITEM_FUNCTION(save_playlist, MENU_FUNC_USEPARAM, ID2P(LANG_SAVE_DYNAMIC_PLAYLIST), | 88 | MENUITEM_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); |
90 | MENUITEM_SETTING(recursive_dir_insert, &global_settings.recursive_dir_insert, NULL); | 90 | MENUITEM_SETTING(recursive_dir_insert, &global_settings.recursive_dir_insert, NULL); |
91 | MENUITEM_SETTING(warn_on_erase, &global_settings.warnon_erase_dynplaylist, NULL); | ||
92 | static int clear_catalog_directory(void) | 91 | static 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 | } |
99 | MENUITEM_FUNCTION(clear_catalog_directory_item, 0, ID2P(LANG_RESET_PLAYLISTCAT_DIR), | 98 | MENUITEM_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 */ |
103 | MENUITEM_SETTING(show_icons, &global_settings.playlist_viewer_icons, NULL); | 102 | MENUITEM_SETTING(show_icons, &global_settings.playlist_viewer_icons, NULL); |
104 | MENUITEM_SETTING(show_indices, &global_settings.playlist_viewer_indices, NULL); | 103 | MENUITEM_SETTING(show_indices, &global_settings.playlist_viewer_indices, NULL); |
105 | MENUITEM_SETTING(track_display, | 104 | MENUITEM_SETTING(track_display, |
106 | &global_settings.playlist_viewer_track_display, NULL); | 105 | &global_settings.playlist_viewer_track_display, NULL); |
107 | MAKE_MENU(viewer_settings_menu, ID2P(LANG_PLAYLISTVIEWER_SETTINGS), | 106 | MAKE_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 */ | ||
111 | MENUITEM_SETTING(warn_on_erase, &global_settings.warnon_erase_dynplaylist, NULL); | ||
112 | MENUITEM_SETTING(show_shuffled_adding_options, &global_settings.show_shuffled_adding_options, NULL); | ||
113 | MENUITEM_SETTING(show_queue_options, &global_settings.show_queue_options, NULL); | ||
114 | MAKE_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 | ||
112 | MAKE_MENU(playlist_settings, ID2P(LANG_PLAYLISTS), NULL, | 118 | MAKE_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, ¤tplaylist_settings_menu); |
115 | MAKE_MENU(playlist_options, ID2P(LANG_PLAYLISTS), NULL, | 121 | MAKE_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 | ||
584 | static int treeplaylist_wplayback_callback(int action, | 584 | static 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 | ||
602 | static int treeplaylist_callback(int action, | 588 | static 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 */ |
625 | MENUITEM_FUNCTION(q_pl_item, MENU_FUNC_USEPARAM, ID2P(LANG_QUEUE), | 611 | MENUITEM_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); |
628 | MENUITEM_FUNCTION(q_first_pl_item, MENU_FUNC_USEPARAM, ID2P(LANG_QUEUE_FIRST), | 614 | MENUITEM_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); |
631 | MENUITEM_FUNCTION(q_last_pl_item, MENU_FUNC_USEPARAM, ID2P(LANG_QUEUE_LAST), | 617 | MENUITEM_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); |
634 | MENUITEM_FUNCTION(q_shuf_pl_item, MENU_FUNC_USEPARAM, | 620 | MENUITEM_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); |
638 | MENUITEM_FUNCTION(q_last_shuf_pl_item, MENU_FUNC_USEPARAM, | 624 | MENUITEM_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 */ | ||
630 | MENUITEM_FUNCTION(q_pl_submenu_item, MENU_FUNC_USEPARAM, ID2P(LANG_QUEUE), | ||
631 | playlist_queue_func, (intptr_t*)PLAYLIST_INSERT, | ||
632 | NULL, Icon_Playlist); | ||
633 | MENUITEM_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); | ||
636 | MENUITEM_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); | ||
639 | MENUITEM_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); | ||
643 | MENUITEM_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 | |||
648 | MAKE_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 | |||
656 | static 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 */ |
643 | MENUITEM_FUNCTION(replace_pl_item, MENU_FUNC_USEPARAM, ID2P(LANG_CLEAR_LIST_AND_PLAY_NEXT), | 676 | MENUITEM_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 | ||
680 | MAKE_ONPLAYMENU(tree_playlist_menu, ID2P(LANG_CURRENT_PLAYLIST), | ||
681 | treeplaylist_callback, Icon_Playlist, | ||
647 | 682 | ||
648 | MAKE_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 | ); |
662 | static int treeplaylist_callback(int action, | 703 | static 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 | ||
112 | enum | ||
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} |
3 | The \setting{Playlist} sub menu allows you to configure settings | 3 | |
4 | The \setting{Playlists} submenu allows you to configure settings | ||
4 | related to playlists. | 5 | related 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} |
72 | To create a playlist containing some or all of the music on your \dap{}, you can use the | 72 | To 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. | ||
120 | The 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} | ||
123 | or \setting{Show Queue Options} to customize the displayed set of options.} | ||
124 | |||
119 | The \setting{Current Playlist Submenu} can be used to add either single tracks or | 125 | The \setting{Current Playlist Submenu} can be used to add either single tracks or |
120 | entire directories to a playlist. If the \setting{Current Playlist Submenu} is | 126 | entire directories to a playlist. If the \setting{Current Playlist Submenu} is |
121 | invoked on a single track, it will put only that track into the playlist. | 127 | invoked on a single track, it will put only that track into the playlist. |