Index: trunk/apps/lang/english.lang =================================================================== --- trunk.orig/apps/lang/english.lang +++ trunk/apps/lang/english.lang @@ -11082,3 +11082,17 @@ *: "OK" + + id: LANG_VOICE_FILETYPE + desc: voice settings menu + user: + + *: "Say file type" + + + *: "Say file type" + + + *: "Say file type" + + Index: trunk/apps/menus/settings_menu.c =================================================================== --- trunk.orig/apps/menus/settings_menu.c +++ trunk/apps/menus/settings_menu.c @@ -412,6 +412,7 @@ MENUITEM_SETTING(talk_dir_item, &global_ MENUITEM_SETTING(talk_dir_clip_item, &global_settings.talk_dir_clip, talk_callback); MENUITEM_SETTING(talk_file_item, &global_settings.talk_file, NULL); MENUITEM_SETTING(talk_file_clip_item, &global_settings.talk_file_clip, talk_callback); +MENUITEM_SETTING(talk_filetype_item, &global_settings.talk_filetype, NULL); static int talk_callback(int action,const struct menu_item_ex *this_item) { static int oldval = 0; @@ -438,7 +439,8 @@ static int talk_callback(int action,cons } MAKE_MENU(voice_settings_menu, ID2P(LANG_VOICE), 0, Icon_Voice, &talk_menu_item, &talk_dir_item, &talk_dir_clip_item, - &talk_file_item, &talk_file_clip_item); + &talk_file_item, &talk_file_clip_item, + &talk_filetype_item); /* VOICE MENU */ /***********************************/ Index: trunk/apps/settings.h =================================================================== --- trunk.orig/apps/settings.h +++ trunk/apps/settings.h @@ -535,6 +535,7 @@ struct user_settings bool talk_dir_clip; /* use directory .talk clips */ int talk_file; /* voice file mode: 0=off, 1=number, 2=spell */ bool talk_file_clip; /* use file .talk clips */ + bool talk_filetype; /* say file type */ /* file browser sorting */ int sort_file; /* 0=alpha, 1=date, 2=date (new first), 3=type */ Index: trunk/apps/settings_list.c =================================================================== --- trunk.orig/apps/settings_list.c +++ trunk/apps/settings_list.c @@ -740,6 +740,7 @@ const struct settings_list settings[] = ID2P(LANG_OFF), ID2P(LANG_VOICE_NUMBER), ID2P(LANG_VOICE_SPELL)), OFFON_SETTING(F_TEMPVAR, talk_file_clip, LANG_VOICE_FILE_TALK, false, "talk file clip", NULL), + OFFON_SETTING(F_TEMPVAR, talk_filetype, LANG_VOICE_FILETYPE, false, "talk filetype", NULL), /* file sorting */ CHOICE_SETTING(0, sort_file, LANG_SORT_FILE, 0 , Index: trunk/apps/tree.c =================================================================== --- trunk.orig/apps/tree.c +++ trunk/apps/tree.c @@ -114,6 +114,7 @@ static int dirbrowse(void); static int ft_play_filenumber(int pos, int attr); static int ft_play_dirname(char* name); static void ft_play_filename(char *dir, char *file); +static bool say_filetype(int attr, bool enqueue); /* * removes the extension of filename (if it doesn't start with a .) @@ -787,8 +788,16 @@ static int dirbrowse() break; case 2: /* dirs spelled */ - talk_spell(name, false); - break; + { + bool enqueue = false; + if(global_settings.talk_filetype) + { + talk_id(VOICE_DIR, enqueue); + enqueue = true; + } + talk_spell(name, enqueue); + } + break; } } } @@ -931,7 +940,15 @@ static int dirbrowse() break; case 2: /* dirs spelled */ - talk_spell(name, false); + { + bool enqueue = false; + if(global_settings.talk_filetype) + { + talk_id(VOICE_DIR, enqueue); + enqueue = true; + } + talk_spell(name, enqueue); + } break; } } @@ -953,7 +970,11 @@ static int dirbrowse() break; case 2: /* files spelled */ - talk_spell(name, false); + { + bool enqueue = false; + enqueue = say_filetype(attr, enqueue); + talk_spell(name, true); + } break; } } @@ -1233,11 +1254,12 @@ void bookmark_play(char *resume_file, in start_wps=true; } -static int ft_play_filenumber(int pos, int attr) +static long get_filetype_voice_id(int attr) { /* try to find a voice ID for the extension, if known */ int j; - int ext_id = -1; /* default to none */ + long ext_id = -1; /* default to none */ + attr &= FILE_ATTR_MASK; /* file type */ for (j=0; j