diff options
author | Steve Bavin <pondlife@pondlife.me> | 2007-10-24 12:32:12 +0000 |
---|---|---|
committer | Steve Bavin <pondlife@pondlife.me> | 2007-10-24 12:32:12 +0000 |
commit | 072a3c5017e4d97a0d8bc56b71d1a8b100784ef7 (patch) | |
tree | 879e85636ba10520bbd0cdd20389f87d1b335dbe /apps/menus/main_menu.c | |
parent | 537b27d58f382277e239bbefaab3bb48a8df245e (diff) | |
download | rockbox-072a3c5017e4d97a0d8bc56b71d1a8b100784ef7.tar.gz rockbox-072a3c5017e4d97a0d8bc56b71d1a8b100784ef7.zip |
Complete info screen voicing; now consistent with displayed screen
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15284 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/menus/main_menu.c')
-rw-r--r-- | apps/menus/main_menu.c | 152 |
1 files changed, 129 insertions, 23 deletions
diff --git a/apps/menus/main_menu.c b/apps/menus/main_menu.c index e94074217a..17cd1bcd37 100644 --- a/apps/menus/main_menu.c +++ b/apps/menus/main_menu.c | |||
@@ -49,7 +49,6 @@ | |||
49 | #include "time.h" | 49 | #include "time.h" |
50 | 50 | ||
51 | 51 | ||
52 | |||
53 | static struct browse_folder_info config = {ROCKBOX_DIR, SHOW_CFG}; | 52 | static struct browse_folder_info config = {ROCKBOX_DIR, SHOW_CFG}; |
54 | 53 | ||
55 | /***********************************/ | 54 | /***********************************/ |
@@ -129,9 +128,52 @@ struct info_data { | |||
129 | unsigned long free2; | 128 | unsigned long free2; |
130 | #endif | 129 | #endif |
131 | }; | 130 | }; |
131 | enum InfoScreenOrder { | ||
132 | Order_SVN_revision = 0, | ||
133 | Order_GAP1, | ||
134 | #if CONFIG_RTC | ||
135 | Order_Time, | ||
136 | Order_Date, | ||
137 | Order_GAP2, | ||
138 | #endif | ||
139 | Order_Buffer, | ||
140 | Order_Batt, | ||
141 | Order_Disk1, /* capacity or internal capacity/free on hotswap */ | ||
142 | Order_Disk2,/* free space or external capacity/free on hotswap */ | ||
143 | Order_Count | ||
144 | }; | ||
145 | #if CONFIG_RTC | ||
146 | const int dayname[] = { | ||
147 | LANG_WEEKDAY_SUNDAY, | ||
148 | LANG_WEEKDAY_MONDAY, | ||
149 | LANG_WEEKDAY_TUESDAY, | ||
150 | LANG_WEEKDAY_WEDNESDAY, | ||
151 | LANG_WEEKDAY_THURSDAY, | ||
152 | LANG_WEEKDAY_FRIDAY, | ||
153 | LANG_WEEKDAY_SATURDAY | ||
154 | }; | ||
155 | |||
156 | const int monthname[] = { | ||
157 | LANG_MONTH_JANUARY, | ||
158 | LANG_MONTH_FEBRUARY, | ||
159 | LANG_MONTH_MARCH, | ||
160 | LANG_MONTH_APRIL, | ||
161 | LANG_MONTH_MAY, | ||
162 | LANG_MONTH_JUNE, | ||
163 | LANG_MONTH_JULY, | ||
164 | LANG_MONTH_AUGUST, | ||
165 | LANG_MONTH_SEPTEMBER, | ||
166 | LANG_MONTH_OCTOBER, | ||
167 | LANG_MONTH_NOVEMBER, | ||
168 | LANG_MONTH_DECEMBER | ||
169 | }; | ||
170 | #endif | ||
132 | static char* info_getname(int selected_item, void * data, char *buffer) | 171 | static char* info_getname(int selected_item, void * data, char *buffer) |
133 | { | 172 | { |
134 | struct info_data *info = (struct info_data*)data; | 173 | struct info_data *info = (struct info_data*)data; |
174 | #if CONFIG_RTC | ||
175 | struct tm *tm; | ||
176 | #endif | ||
135 | const unsigned char *kbyte_units[] = { | 177 | const unsigned char *kbyte_units[] = { |
136 | ID2P(LANG_KILOBYTE), | 178 | ID2P(LANG_KILOBYTE), |
137 | ID2P(LANG_MEGABYTE), | 179 | ID2P(LANG_MEGABYTE), |
@@ -154,13 +196,34 @@ static char* info_getname(int selected_item, void * data, char *buffer) | |||
154 | } | 196 | } |
155 | switch (selected_item) | 197 | switch (selected_item) |
156 | { | 198 | { |
157 | case 0: | 199 | case Order_SVN_revision: |
158 | snprintf(buffer, MAX_PATH, "%s: %s", | 200 | snprintf(buffer, MAX_PATH, "%s: %s", |
159 | str(LANG_VERSION), appsversion); | 201 | str(LANG_VERSION), appsversion); |
160 | break; | 202 | break; |
161 | case 1: | 203 | case Order_GAP1: |
204 | #if CONFIG_RTC | ||
205 | case Order_GAP2: | ||
206 | #endif | ||
162 | return ""; | 207 | return ""; |
163 | case 2: /* buffer */ | 208 | #if CONFIG_RTC |
209 | case Order_Time: | ||
210 | tm = get_time(); | ||
211 | snprintf(buffer, MAX_PATH, "%02d:%02d:%02d %s", | ||
212 | global_settings.timeformat == 0 | ||
213 | ?tm->tm_hour:tm->tm_hour-12, | ||
214 | tm->tm_min, tm->tm_sec, | ||
215 | global_settings.timeformat == 0 | ||
216 | ?"":tm->tm_hour>11?"P":"A"); | ||
217 | break; | ||
218 | case Order_Date: | ||
219 | tm = get_time(); | ||
220 | snprintf(buffer, MAX_PATH, "%s %d %s %d", str(dayname[tm->tm_wday]), | ||
221 | tm->tm_year+1900, | ||
222 | str(monthname[tm->tm_mon]), | ||
223 | tm->tm_mday); | ||
224 | break; | ||
225 | #endif | ||
226 | case Order_Buffer: /* buffer */ | ||
164 | { | 227 | { |
165 | long buflen = ((audiobufend - audiobuf) * 2) / 2097; /* avoid overflow */ | 228 | long buflen = ((audiobufend - audiobuf) * 2) / 2097; /* avoid overflow */ |
166 | int integer = buflen / 1000; | 229 | int integer = buflen / 1000; |
@@ -170,7 +233,7 @@ static char* info_getname(int selected_item, void * data, char *buffer) | |||
170 | integer, decimal); | 233 | integer, decimal); |
171 | } | 234 | } |
172 | break; | 235 | break; |
173 | case 3: /* battery */ | 236 | case Order_Batt: /* battery */ |
174 | #if CONFIG_CHARGING == CHARGING_CONTROL | 237 | #if CONFIG_CHARGING == CHARGING_CONTROL |
175 | if (charge_state == CHARGING) | 238 | if (charge_state == CHARGING) |
176 | snprintf(buffer, MAX_PATH, (char *)str(LANG_BATTERY_CHARGE)); | 239 | snprintf(buffer, MAX_PATH, (char *)str(LANG_BATTERY_CHARGE)); |
@@ -186,7 +249,7 @@ static char* info_getname(int selected_item, void * data, char *buffer) | |||
186 | else | 249 | else |
187 | strcpy(buffer, "(n/a)"); | 250 | strcpy(buffer, "(n/a)"); |
188 | break; | 251 | break; |
189 | case 4: /* disc usage 1 */ | 252 | case Order_Disk1: /* disc usage 1 */ |
190 | #ifdef HAVE_MULTIVOLUME | 253 | #ifdef HAVE_MULTIVOLUME |
191 | output_dyn_value(s1, sizeof s1, info->free, kbyte_units, true); | 254 | output_dyn_value(s1, sizeof s1, info->free, kbyte_units, true); |
192 | output_dyn_value(s2, sizeof s2, info->size, kbyte_units, true); | 255 | output_dyn_value(s2, sizeof s2, info->size, kbyte_units, true); |
@@ -197,7 +260,7 @@ static char* info_getname(int selected_item, void * data, char *buffer) | |||
197 | snprintf(buffer, MAX_PATH, SIZE_FMT, str(LANG_DISK_SIZE_INFO), s1); | 260 | snprintf(buffer, MAX_PATH, SIZE_FMT, str(LANG_DISK_SIZE_INFO), s1); |
198 | #endif | 261 | #endif |
199 | break; | 262 | break; |
200 | case 5: /* disc usage 2 */ | 263 | case Order_Disk2: /* disc usage 2 */ |
201 | #ifdef HAVE_MULTIVOLUME | 264 | #ifdef HAVE_MULTIVOLUME |
202 | if (info->size2) | 265 | if (info->size2) |
203 | { | 266 | { |
@@ -223,23 +286,38 @@ static int info_speak_item(int selected_item, void * data) | |||
223 | ID2P(LANG_KILOBYTE), | 286 | ID2P(LANG_KILOBYTE), |
224 | ID2P(LANG_MEGABYTE), | 287 | ID2P(LANG_MEGABYTE), |
225 | ID2P(LANG_GIGABYTE) | 288 | ID2P(LANG_GIGABYTE) |
226 | }; | 289 | }; |
227 | switch (selected_item) | 290 | switch (selected_item) |
228 | { | 291 | { |
229 | case 0:/* version, not voiced, so say the time instead */ | 292 | case Order_SVN_revision: /* version */ |
230 | #if CONFIG_RTC | 293 | talk_id(LANG_VERSION, false); |
231 | talk_date_time(get_time(), false); | 294 | talk_spell(appsversion, true); |
232 | #endif | ||
233 | break; | 295 | break; |
234 | case 1: /* nothing */ | 296 | #if CONFIG_RTC |
297 | case Order_Time: | ||
298 | talk_id(LANG_CURRENT_TIME, false); | ||
299 | talk_time(get_time(), true); | ||
235 | break; | 300 | break; |
236 | case 2: /* buffer, not spoken */ | 301 | case Order_Date: |
302 | talk_date(get_time(), true); | ||
237 | break; | 303 | break; |
238 | case 3: /* battery */ | 304 | #endif |
305 | case Order_Buffer: /* buffer, not spoken */ | ||
306 | { | ||
307 | talk_id(LANG_BUFFER_STAT, false); | ||
308 | long buflen = (audiobufend - audiobuf) / 1024L; | ||
309 | output_dyn_value(NULL, 0, buflen, kbyte_units, true); | ||
310 | break; | ||
311 | } | ||
312 | case Order_Batt: /* battery */ | ||
239 | if (battery_level() >= 0) | 313 | if (battery_level() >= 0) |
240 | { | 314 | { |
241 | talk_id(LANG_BATTERY_TIME, false); | 315 | talk_id(LANG_BATTERY_TIME, false); |
242 | talk_value(battery_level(), UNIT_PERCENT, true); | 316 | talk_value(battery_level(), UNIT_PERCENT, true); |
317 | if(battery_time () / 60 > 0) | ||
318 | talk_value(battery_time () / 60, UNIT_INT, true); | ||
319 | if(battery_time () % 60 > 0) | ||
320 | talk_value(battery_time () % 60, UNIT_INT, true); | ||
243 | #if CONFIG_CHARGING >= CHARGING_MONITOR | 321 | #if CONFIG_CHARGING >= CHARGING_MONITOR |
244 | if (charge_state == CHARGING) | 322 | if (charge_state == CHARGING) |
245 | talk_id(LANG_BATTERY_CHARGE, true); | 323 | talk_id(LANG_BATTERY_CHARGE, true); |
@@ -252,20 +330,27 @@ static int info_speak_item(int selected_item, void * data) | |||
252 | #endif | 330 | #endif |
253 | } | 331 | } |
254 | break; | 332 | break; |
255 | case 4: /* disk 1 */ | 333 | case Order_Disk1: /* disk 1 */ |
256 | talk_id(LANG_DISK_FREE_INFO, false); | ||
257 | #ifdef HAVE_MULTIVOLUME | 334 | #ifdef HAVE_MULTIVOLUME |
335 | talk_id(LANG_DISK_FREE_INFO, false); | ||
258 | talk_id(LANG_DISK_NAME_INTERNAL, true); | 336 | talk_id(LANG_DISK_NAME_INTERNAL, true); |
259 | #endif | ||
260 | output_dyn_value(NULL, 0, info->free, kbyte_units, true); | 337 | output_dyn_value(NULL, 0, info->free, kbyte_units, true); |
338 | #else | ||
339 | talk_id(LANG_DISK_SIZE_INFO, false); | ||
340 | output_dyn_value(NULL, 0, info->size, kbyte_units, true); | ||
341 | #endif | ||
261 | break; | 342 | break; |
262 | case 5: /* disk 2 */ | 343 | case Order_Disk2: /* disk 2 */ |
263 | #ifdef HAVE_MULTIVOLUME | 344 | #ifdef HAVE_MULTIVOLUME |
264 | if (info->size2) | 345 | if (info->size2) |
265 | { | 346 | { |
347 | talk_id(LANG_DISK_FREE_INFO, false); | ||
266 | talk_id(LANG_DISK_NAME_MMC, false); | 348 | talk_id(LANG_DISK_NAME_MMC, false); |
267 | output_dyn_value(NULL, 0, info->free2, kbyte_units, true); | 349 | output_dyn_value(NULL, 0, info->free2, kbyte_units, true); |
268 | } | 350 | } |
351 | #else | ||
352 | talk_id(LANG_DISK_FREE_INFO, false); | ||
353 | output_dyn_value(NULL, 0, info->free, kbyte_units, true); | ||
269 | #endif | 354 | #endif |
270 | break; | 355 | break; |
271 | } | 356 | } |
@@ -274,7 +359,8 @@ static int info_speak_item(int selected_item, void * data) | |||
274 | 359 | ||
275 | static int info_action_callback(int action, struct gui_synclist *lists) | 360 | static int info_action_callback(int action, struct gui_synclist *lists) |
276 | { | 361 | { |
277 | (void)lists; | 362 | if (action == ACTION_STD_CANCEL) |
363 | return action; | ||
278 | if ((action == ACTION_STD_OK) | 364 | if ((action == ACTION_STD_OK) |
279 | #ifdef HAVE_MULTIVOLUME | 365 | #ifdef HAVE_MULTIVOLUME |
280 | || action == SYS_HOTSWAP_INSERTED | 366 | || action == SYS_HOTSWAP_INSERTED |
@@ -294,13 +380,33 @@ static int info_action_callback(int action, struct gui_synclist *lists) | |||
294 | #endif | 380 | #endif |
295 | return ACTION_REDRAW; | 381 | return ACTION_REDRAW; |
296 | } | 382 | } |
383 | else if (lists->gui_list[SCREEN_MAIN].show_selection_marker == true) | ||
384 | { | ||
385 | if (lists->gui_list[SCREEN_MAIN].selected_item == Order_GAP1 | ||
386 | #if CONFIG_RTC | ||
387 | || lists->gui_list[SCREEN_MAIN].selected_item == Order_GAP2 | ||
388 | #endif | ||
389 | ) | ||
390 | { | ||
391 | if (action == ACTION_STD_PREV) | ||
392 | { | ||
393 | gui_synclist_select_item(lists, lists->gui_list[SCREEN_MAIN].selected_item-1); | ||
394 | return ACTION_REDRAW; | ||
395 | } | ||
396 | else if (action == ACTION_STD_NEXT) | ||
397 | { | ||
398 | gui_synclist_select_item(lists, lists->gui_list[SCREEN_MAIN].selected_item+1); | ||
399 | return ACTION_REDRAW; | ||
400 | } | ||
401 | } | ||
402 | } | ||
297 | return action; | 403 | return action; |
298 | } | 404 | } |
299 | static bool show_info(void) | 405 | static bool show_info(void) |
300 | { | 406 | { |
301 | struct info_data data = {.new_data = true}; | 407 | struct info_data data = {.new_data = true }; |
302 | struct simplelist_info info; | 408 | struct simplelist_info info; |
303 | simplelist_info_init(&info, str(LANG_ROCKBOX_INFO), 6, (void*)&data); | 409 | simplelist_info_init(&info, str(LANG_ROCKBOX_INFO), Order_Count, (void*)&data); |
304 | info.hide_selection = !global_settings.talk_menu; | 410 | info.hide_selection = !global_settings.talk_menu; |
305 | info.get_name = info_getname; | 411 | info.get_name = info_getname; |
306 | if(global_settings.talk_menu) | 412 | if(global_settings.talk_menu) |