Index: trunk/apps/playlist_viewer.c =================================================================== --- trunk.orig/apps/playlist_viewer.c +++ trunk/apps/playlist_viewer.c @@ -290,7 +290,7 @@ static bool playlist_viewer_init(struct if (!have_list) { /* Nothing to view, exit */ - gui_syncsplash(HZ, str(LANG_CATALOG_NO_PLAYLISTS)); + gui_syncsplash(HZ, ID2P(LANG_CATALOG_NO_PLAYLISTS)); return false; } @@ -558,6 +558,37 @@ static int playlist_callback_icons(int s return Icon_NOICON; } +static int say_item(int selected_item, void *data) +{ + struct playlist_viewer *local_viewer = (struct playlist_viewer *)data; + struct playlist_entry *track= + playlist_buffer_get_track(&(local_viewer->buffer), + selected_item); + (void)selected_item; + 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); + if (viewer.move_track != -1) + { + talk_id(VOICE_PAUSE, true); + talk_id(VOICE_MOVING_TRACK, true); + } + return 0; +} + /* Main viewer function. Filename identifies playlist to be viewed. If NULL, view current playlist. */ bool playlist_viewer_ex(char* filename) @@ -573,10 +604,14 @@ bool playlist_viewer_ex(char* filename) gui_synclist_set_icon_callback(&playlist_lists, global_settings.playlist_viewer_icons? &playlist_callback_icons:NULL); + if (global_settings.talk_file) + gui_synclist_set_voice_callback(&playlist_lists, say_item); gui_synclist_set_nb_items(&playlist_lists, viewer.num_tracks); gui_synclist_select_item(&playlist_lists, viewer.selected_track); gui_synclist_set_title(&playlist_lists, str(LANG_PLAYLIST), Icon_Playlist); gui_synclist_draw(&playlist_lists); + gui_synclist_speak_item(&playlist_lists); + gui_synclist_speak_item(&playlist_lists); while (!exit) { int track; @@ -604,8 +639,8 @@ bool playlist_viewer_ex(char* filename) } /* Timeout so we can determine if play status has changed */ - button = get_action(CONTEXT_TREE,HZ/2); - if( (gui_synclist_do_button(&playlist_lists, &button,LIST_WRAP_UNLESS_HELD)) ) + if(list_do_action(CONTEXT_TREE,HZ/2, + &playlist_lists, &button,LIST_WRAP_UNLESS_HELD)) { viewer.selected_track=gui_synclist_get_sel_pos(&playlist_lists); if(playlist_buffer_needs_reload(&viewer.buffer, @@ -636,8 +671,11 @@ bool playlist_viewer_ex(char* filename) ret_val = playlist_move(viewer.playlist, viewer.move_track, current_track->index); if (ret_val < 0) + { + cond_talk_ids_fq(LANG_MOVE, LANG_FAILED); gui_syncsplash(HZ, (unsigned char *)"%s %s", str(LANG_MOVE), str(LANG_FAILED)); + } update_playlist(true); viewer.move_track = -1; } @@ -660,6 +698,7 @@ bool playlist_viewer_ex(char* filename) goto exit; } gui_synclist_draw(&playlist_lists); + gui_synclist_speak_item(&playlist_lists); break; } @@ -686,6 +725,7 @@ bool playlist_viewer_ex(char* filename) viewer.selected_track = viewer.num_tracks-1; } gui_synclist_draw(&playlist_lists); + gui_synclist_speak_item(&playlist_lists); break; } case ACTION_STD_MENU: @@ -700,6 +740,7 @@ bool playlist_viewer_ex(char* filename) &playlist_callback_icons:NULL ); gui_synclist_draw(&playlist_lists); + gui_synclist_speak_item(&playlist_lists); break; case ACTION_NONE: @@ -717,6 +758,7 @@ bool playlist_viewer_ex(char* filename) } exit: + shutup(); if (viewer.playlist) playlist_close(viewer.playlist); return ret; @@ -731,6 +773,17 @@ static char *playlist_search_callback_na return(buffer); } +static int say_search_item(int selected_item, void *data) +{ + int *found_indicies = (int*)data; + 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); + return 0; +} + bool search_playlist(void) { char search_str[32] = ""; @@ -747,6 +800,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 id: LANG_PLAYLIST_SEARCH_MSG desc: splash number of tracks inserted user: *: "Searching... %d found (%s)" *: "Searching... %d found (%s)" - *: "" + *: "Found" id: LANG_SHUFFLE_PLAYLIST desc: in playlist menu, reshuffles the order in which songs are played user: *: "Reshuffle" *: "Reshuffle" @@ -11303,12 +11303,82 @@ desc: voice settings menu user: *: "Say file type" *: "Say file type" *: "Say file type" + + 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" + +