Index: rockbox-devel/apps/lang/english.lang =================================================================== --- rockbox-devel.orig/apps/lang/english.lang +++ rockbox-devel/apps/lang/english.lang @@ -10448,3 +10448,73 @@ *: "of" + + id: VOICE_NOW_PLAYING + desc: playlist viewer + user: + + *: "" + + + *: "" + + + *: "Now playing" + + + + id: VOICE_TRACK_TO_MOVE + desc: playlist viewer + user: + + *: "" + + + *: "" + + + *: "Track to move" + + + + id: VOICE_QUEUED + desc: playlist viewer + user: + + *: "" + + + *: "" + + + *: "Queued" + + + + id: VOICE_BAD_TRACK + desc: playlist viewer + user: + + *: "" + + + *: "" + + + *: "Bad track" + + + + id: VOICE_MOVING_TRACK + desc: playlist viewer + user: + + *: "" + + + *: "" + + + *: "Moving track" + + Index: rockbox-devel/apps/playlist_viewer.c =================================================================== --- rockbox-devel.orig/apps/playlist_viewer.c +++ rockbox-devel/apps/playlist_viewer.c @@ -609,6 +609,29 @@ void playlist_callback_icons(int selecte #endif } +static void say_item(int selected_item, struct playlist_viewer *local_viewer) +{ + struct playlist_entry *track= + playlist_buffer_get_track(&(local_viewer->buffer), selected_item); + shutup(); + if(global_settings.playlist_viewer_icons) { + if (track->index == local_viewer->current_playing_track) + talk_id(VOICE_NOW_PLAYING, true); + if (track->index == local_viewer->move_track) + talk_id(VOICE_TRACK_TO_MOVE, true); + if (track->queued) + talk_id(VOICE_QUEUED, true); + } + if (track->skipped) + talk_id(VOICE_BAD_TRACK, true); + if (global_settings.playlist_viewer_indices) + talk_number(track->display_index, true); + + if(global_settings.playlist_viewer_track_display) + talk_fullpath(track->name, true); + else talk_file_or_spell(NULL, track->name, NULL, true); +} + /* Main viewer function. Filename identifies playlist to be viewed. If NULL, view current playlist. */ bool playlist_viewer_ex(char* filename) @@ -617,6 +640,7 @@ bool playlist_viewer_ex(char* filename) bool exit=false; /* exit viewer */ int button; struct gui_synclist playlist_lists; + bool skip_saying_item = false; if (!playlist_viewer_init(&viewer, filename, false)) goto exit; @@ -662,6 +686,17 @@ bool playlist_viewer_ex(char* filename) gui_synclist_draw(&playlist_lists); } + if (global_settings.talk_menu && !skip_saying_item) + { + say_item(viewer.selected_track, &viewer); + if (viewer.move_track != -1) + { + talk_id(VOICE_PAUSE, true); + talk_id(VOICE_MOVING_TRACK, true); + } + } + skip_saying_item = false; + /* Timeout so we can determine if play status has changed */ button = get_action(CONTEXT_TREE,HZ/2); int list_action; @@ -761,9 +796,13 @@ bool playlist_viewer_ex(char* filename) case ACTION_NONE: gui_syncstatusbar_draw(&statusbars, false); + skip_saying_item = true; break; default: + if(list_action != ACTION_STD_PREV + && list_action != ACTION_STD_NEXT) + skip_saying_item = true; if(default_event_handler(button) == SYS_USB_CONNECTED) { ret = true; @@ -779,6 +818,7 @@ exit: action_signalscreenchange(); return ret; } + char * playlist_search_callback_name(int selected_item, void * data, char *buffer) { int *found_indicies = (int*)data; @@ -788,6 +828,14 @@ char * playlist_search_callback_name(int return(buffer); } +static void say_search_item(int selected_item, int *found_indicies) +{ + static struct playlist_track_info track; + playlist_get_track_info(viewer.playlist,found_indicies[selected_item],&track); + if(global_settings.playlist_viewer_track_display) + talk_fullpath(track.filename, false); + else talk_file_or_spell(NULL, track.filename, NULL, false); +} void playlist_search_callback_icons(int selected_item, void * data, ICON * icon) { @@ -806,8 +854,10 @@ bool search_playlist(void) int i, playlist_count; int found_indicies[MAX_PLAYLIST_ENTRIES],found_indicies_count = 0; int button; + int list_action; struct gui_synclist playlist_lists; struct playlist_track_info track; + bool say_fresh_line = true; if (!playlist_viewer_init(&viewer, 0, false)) return ret; @@ -815,6 +865,7 @@ bool search_playlist(void) return ret; lcd_clear_display(); playlist_count = playlist_amount_ex(viewer.playlist); + cond_talk_ids_fq(LANG_WAIT); for (i=0;(i