diff options
author | Jonathan Gordon <rockbox@jdgordon.info> | 2007-03-03 14:23:03 +0000 |
---|---|---|
committer | Jonathan Gordon <rockbox@jdgordon.info> | 2007-03-03 14:23:03 +0000 |
commit | 97090863a6c7a8e5c785a9bc185482c033e89197 (patch) | |
tree | a071c24077c2ca7c9183b17639a5479ee4735071 /apps | |
parent | 02a871780fdc7e5193028a2eb8b250f88a70074b (diff) | |
download | rockbox-97090863a6c7a8e5c785a9bc185482c033e89197.tar.gz rockbox-97090863a6c7a8e5c785a9bc185482c033e89197.zip |
Allow settings to have a different title in the setting screen than they
have in the menu.
Fixes the scroll speed/step settings
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12572 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r-- | apps/menu.c | 27 | ||||
-rw-r--r-- | apps/menu.h | 11 | ||||
-rw-r--r-- | apps/menus/display_menu.c | 12 |
3 files changed, 37 insertions, 13 deletions
diff --git a/apps/menu.c b/apps/menu.c index 98cce52a47..df786dde55 100644 --- a/apps/menu.c +++ b/apps/menu.c | |||
@@ -334,12 +334,12 @@ static char * get_menu_item_name(int selected_item,void * data, char *buffer) | |||
334 | 334 | ||
335 | menu = menu->submenus[selected_item]; | 335 | menu = menu->submenus[selected_item]; |
336 | 336 | ||
337 | if (menu->flags&MENU_DYNAMIC_DESC) | 337 | if ((menu->flags&MENU_DYNAMIC_DESC) && (type != MT_SETTING_W_TEXT)) |
338 | return menu->menu_get_name_and_icon->list_get_name(selected_item, | 338 | return menu->menu_get_name_and_icon->list_get_name(selected_item, |
339 | menu->menu_get_name_and_icon->list_get_name_data, buffer); | 339 | menu->menu_get_name_and_icon->list_get_name_data, buffer); |
340 | 340 | ||
341 | type = (menu->flags&MENU_TYPE_MASK); | 341 | type = (menu->flags&MENU_TYPE_MASK); |
342 | if (type == MT_SETTING) | 342 | if ((type == MT_SETTING) || (type == MT_SETTING_W_TEXT)) |
343 | { | 343 | { |
344 | const struct settings_list *v | 344 | const struct settings_list *v |
345 | = find_setting(menu->variable, NULL); | 345 | = find_setting(menu->variable, NULL); |
@@ -353,7 +353,7 @@ static char * get_menu_item_name(int selected_item,void * data, char *buffer) | |||
353 | static void menu_get_icon(int selected_item, void * data, ICON * icon) | 353 | static void menu_get_icon(int selected_item, void * data, ICON * icon) |
354 | { | 354 | { |
355 | const struct menu_item_ex *menu = (const struct menu_item_ex *)data; | 355 | const struct menu_item_ex *menu = (const struct menu_item_ex *)data; |
356 | int menu_icon; | 356 | int menu_icon = Icon_NOICON; |
357 | selected_item = get_menu_selection(selected_item, menu); | 357 | selected_item = get_menu_selection(selected_item, menu); |
358 | 358 | ||
359 | menu = menu->submenus[selected_item]; | 359 | menu = menu->submenus[selected_item]; |
@@ -365,6 +365,7 @@ static void menu_get_icon(int selected_item, void * data, ICON * icon) | |||
365 | switch (menu->flags&MENU_TYPE_MASK) | 365 | switch (menu->flags&MENU_TYPE_MASK) |
366 | { | 366 | { |
367 | case MT_SETTING: | 367 | case MT_SETTING: |
368 | case MT_SETTING_W_TEXT: | ||
368 | *icon = bitmap_icons_6x8[Icon_Menu_setting]; | 369 | *icon = bitmap_icons_6x8[Icon_Menu_setting]; |
369 | break; | 370 | break; |
370 | case MT_MENU: | 371 | case MT_MENU: |
@@ -438,12 +439,14 @@ static void talk_menu_item(const struct menu_item_ex *menu, | |||
438 | struct gui_synclist *lists) | 439 | struct gui_synclist *lists) |
439 | { | 440 | { |
440 | int id = -1; | 441 | int id = -1; |
442 | int type; | ||
441 | if (global_settings.talk_menu) | 443 | if (global_settings.talk_menu) |
442 | { | 444 | { |
443 | int sel = get_menu_selection(gui_synclist_get_sel_pos(lists),menu); | 445 | int sel = get_menu_selection(gui_synclist_get_sel_pos(lists),menu); |
444 | if ((menu->flags&MENU_TYPE_MASK) == MT_MENU) | 446 | if ((menu->flags&MENU_TYPE_MASK) == MT_MENU) |
445 | { | 447 | { |
446 | if ((menu->submenus[sel]->flags&MENU_TYPE_MASK) == MT_SETTING) | 448 | type = menu->submenus[sel]->flags&MENU_TYPE_MASK; |
449 | if ((type == MT_SETTING) || (type == MT_SETTING_W_TEXT)) | ||
447 | talk_setting(menu->submenus[sel]->variable); | 450 | talk_setting(menu->submenus[sel]->variable); |
448 | else | 451 | else |
449 | { | 452 | { |
@@ -463,8 +466,14 @@ bool do_setting_from_menu(const struct menu_item_ex *temp) | |||
463 | temp->variable, | 466 | temp->variable, |
464 | &setting_id); | 467 | &setting_id); |
465 | bool ret_val = false; | 468 | bool ret_val = false; |
469 | unsigned char *title; | ||
466 | if (setting) | 470 | if (setting) |
467 | { | 471 | { |
472 | if ((temp->flags&MENU_TYPE_MASK) == MT_SETTING_W_TEXT) | ||
473 | title = temp->callback_and_desc->desc; | ||
474 | else | ||
475 | title = ID2P(setting->lang_id); | ||
476 | |||
468 | if ((setting->flags&F_BOOL_SETTING) == F_BOOL_SETTING) | 477 | if ((setting->flags&F_BOOL_SETTING) == F_BOOL_SETTING) |
469 | { | 478 | { |
470 | bool temp_var, *var; | 479 | bool temp_var, *var; |
@@ -478,7 +487,7 @@ bool do_setting_from_menu(const struct menu_item_ex *temp) | |||
478 | { | 487 | { |
479 | var = (bool*)setting->setting; | 488 | var = (bool*)setting->setting; |
480 | } | 489 | } |
481 | set_bool_options(str(setting->lang_id),var, | 490 | set_bool_options(P2STR(title), var, |
482 | STR(setting->bool_setting->lang_yes), | 491 | STR(setting->bool_setting->lang_yes), |
483 | STR(setting->bool_setting->lang_no), | 492 | STR(setting->bool_setting->lang_no), |
484 | setting->bool_setting->option_callback); | 493 | setting->bool_setting->option_callback); |
@@ -489,7 +498,7 @@ bool do_setting_from_menu(const struct menu_item_ex *temp) | |||
489 | } | 498 | } |
490 | else if (setting->flags&F_T_SOUND) | 499 | else if (setting->flags&F_T_SOUND) |
491 | { | 500 | { |
492 | set_sound(str(setting->lang_id), setting->setting, | 501 | set_sound(P2STR(title), setting->setting, |
493 | setting->sound_setting->setting); | 502 | setting->sound_setting->setting); |
494 | } | 503 | } |
495 | else /* other setting, must be an INT type */ | 504 | else /* other setting, must be an INT type */ |
@@ -519,8 +528,7 @@ bool do_setting_from_menu(const struct menu_item_ex *temp) | |||
519 | min = setting->int_setting->min; | 528 | min = setting->int_setting->min; |
520 | step = setting->int_setting->step; | 529 | step = setting->int_setting->step; |
521 | } | 530 | } |
522 | set_int_ex(str(setting->lang_id), | 531 | set_int_ex(P2STR(title), NULL, |
523 | NULL, | ||
524 | setting->int_setting->unit,var, | 532 | setting->int_setting->unit,var, |
525 | setting->int_setting->option_callback, | 533 | setting->int_setting->option_callback, |
526 | step, min, max, | 534 | step, min, max, |
@@ -561,7 +569,7 @@ bool do_setting_from_menu(const struct menu_item_ex *temp) | |||
561 | j++; | 569 | j++; |
562 | } | 570 | } |
563 | } | 571 | } |
564 | set_option(str(setting->lang_id), var, INT, | 572 | set_option(P2STR(title), var, INT, |
565 | options,j, | 573 | options,j, |
566 | setting-> | 574 | setting-> |
567 | choice_setting->option_callback); | 575 | choice_setting->option_callback); |
@@ -721,6 +729,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected) | |||
721 | temp->func_with_param->param); | 729 | temp->func_with_param->param); |
722 | break; | 730 | break; |
723 | case MT_SETTING: | 731 | case MT_SETTING: |
732 | case MT_SETTING_W_TEXT: | ||
724 | { | 733 | { |
725 | if (do_setting_from_menu(temp)) | 734 | if (do_setting_from_menu(temp)) |
726 | init_menu_lists(menu, &lists, 0, true); | 735 | init_menu_lists(menu, &lists, 0, true); |
diff --git a/apps/menu.h b/apps/menu.h index f5bc2dd179..fa5d7e5b93 100644 --- a/apps/menu.h +++ b/apps/menu.h | |||
@@ -60,6 +60,9 @@ void menu_talk_selected(int m); | |||
60 | enum menu_item_type { | 60 | enum menu_item_type { |
61 | MT_MENU = 0, | 61 | MT_MENU = 0, |
62 | MT_SETTING, | 62 | MT_SETTING, |
63 | MT_SETTING_W_TEXT, /* same as setting, but uses different | ||
64 | text for the setting title, | ||
65 | ID2P() or "literal" for the str param */ | ||
63 | MT_FUNCTION_CALL, /* used when the standard code wont work */ | 66 | MT_FUNCTION_CALL, /* used when the standard code wont work */ |
64 | MT_FUNCTION_WITH_PARAM, | 67 | MT_FUNCTION_WITH_PARAM, |
65 | MT_RETURN_ID, /* returns the position of the selected item (starting at 0)*/ | 68 | MT_RETURN_ID, /* returns the position of the selected item (starting at 0)*/ |
@@ -134,6 +137,14 @@ bool do_setting_from_menu(const struct menu_item_ex *temp); | |||
134 | static const struct menu_item_ex name = \ | 137 | static const struct menu_item_ex name = \ |
135 | {MT_SETTING, {.variable = (void*)var},{callback}}; | 138 | {MT_SETTING, {.variable = (void*)var},{callback}}; |
136 | 139 | ||
140 | /* Use this for settings which have a differnt title in their | ||
141 | setting screen than in the menu (e.g scroll options */ | ||
142 | #define MENUITEM_SETTING_W_TEXT(name, var, str, callback ) \ | ||
143 | static const struct menu_callback_with_desc name##__ = {callback,str, Icon_NOICON};\ | ||
144 | static const struct menu_item_ex name = \ | ||
145 | {MT_SETTING_W_TEXT|MENU_HAS_DESC, {.variable = (void*)var }, \ | ||
146 | {.callback_and_desc = & name##__}}; | ||
147 | |||
137 | /* Use this To create a list of NON-XLATABLE (for the time being) Strings | 148 | /* Use this To create a list of NON-XLATABLE (for the time being) Strings |
138 | When the user enters this list and selects one, the menu will exits | 149 | When the user enters this list and selects one, the menu will exits |
139 | and its return value will be the index of the chosen item */ | 150 | and its return value will be the index of the chosen item */ |
diff --git a/apps/menus/display_menu.c b/apps/menus/display_menu.c index 26eac23f21..1cd6f0e246 100644 --- a/apps/menus/display_menu.c +++ b/apps/menus/display_menu.c | |||
@@ -279,16 +279,20 @@ MAKE_MENU(lcd_remote_settings, ID2P(LANG_LCD_REMOTE_MENU), | |||
279 | 279 | ||
280 | /***********************************/ | 280 | /***********************************/ |
281 | /* SCROLL MENU */ | 281 | /* SCROLL MENU */ |
282 | MENUITEM_SETTING(scroll_speed, &global_settings.scroll_speed, NULL); | 282 | MENUITEM_SETTING_W_TEXT(scroll_speed, &global_settings.scroll_speed, |
283 | ID2P(LANG_SCROLL), NULL); | ||
283 | MENUITEM_SETTING(scroll_delay, &global_settings.scroll_delay, NULL); | 284 | MENUITEM_SETTING(scroll_delay, &global_settings.scroll_delay, NULL); |
284 | #ifdef HAVE_LCD_BITMAP | 285 | #ifdef HAVE_LCD_BITMAP |
285 | MENUITEM_SETTING(scroll_step, &global_settings.scroll_step, NULL); | 286 | MENUITEM_SETTING_W_TEXT(scroll_step, &global_settings.scroll_step, |
287 | ID2P(LANG_SCROLL_STEP_EXAMPLE), NULL); | ||
286 | #endif | 288 | #endif |
287 | MENUITEM_SETTING(bidir_limit, &global_settings.bidir_limit, NULL); | 289 | MENUITEM_SETTING(bidir_limit, &global_settings.bidir_limit, NULL); |
288 | #ifdef HAVE_REMOTE_LCD | 290 | #ifdef HAVE_REMOTE_LCD |
289 | MENUITEM_SETTING(remote_scroll_speed, &global_settings.remote_scroll_speed, NULL); | 291 | MENUITEM_SETTING_W_TEXT(remote_scroll_speed, &global_settings.remote_scroll_speed, |
292 | ID2P(LANG_SCROLL), NULL); | ||
290 | MENUITEM_SETTING(remote_scroll_delay, &global_settings.remote_scroll_delay, NULL); | 293 | MENUITEM_SETTING(remote_scroll_delay, &global_settings.remote_scroll_delay, NULL); |
291 | MENUITEM_SETTING(remote_scroll_step, &global_settings.remote_scroll_step, NULL); | 294 | MENUITEM_SETTING_W_TEXT(remote_scroll_step, &global_settings.remote_scroll_step, |
295 | ID2P(LANG_SCROLL_STEP_EXAMPLE), NULL); | ||
292 | MENUITEM_SETTING(remote_bidir_limit, &global_settings.remote_bidir_limit, NULL); | 296 | MENUITEM_SETTING(remote_bidir_limit, &global_settings.remote_bidir_limit, NULL); |
293 | MAKE_MENU(remote_scroll_sets, ID2P(LANG_REMOTE_SCROLL_SETS), 0, Icon_NOICON, | 297 | MAKE_MENU(remote_scroll_sets, ID2P(LANG_REMOTE_SCROLL_SETS), 0, Icon_NOICON, |
294 | &remote_scroll_speed, &remote_scroll_delay, | 298 | &remote_scroll_speed, &remote_scroll_delay, |