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