summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/menu.c27
-rw-r--r--apps/menu.h11
-rw-r--r--apps/menus/display_menu.c12
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)
353static void menu_get_icon(int selected_item, void * data, ICON * icon) 353static 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);
60enum menu_item_type { 60enum 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 */
282MENUITEM_SETTING(scroll_speed, &global_settings.scroll_speed, NULL); 282MENUITEM_SETTING_W_TEXT(scroll_speed, &global_settings.scroll_speed,
283 ID2P(LANG_SCROLL), NULL);
283MENUITEM_SETTING(scroll_delay, &global_settings.scroll_delay, NULL); 284MENUITEM_SETTING(scroll_delay, &global_settings.scroll_delay, NULL);
284#ifdef HAVE_LCD_BITMAP 285#ifdef HAVE_LCD_BITMAP
285MENUITEM_SETTING(scroll_step, &global_settings.scroll_step, NULL); 286MENUITEM_SETTING_W_TEXT(scroll_step, &global_settings.scroll_step,
287 ID2P(LANG_SCROLL_STEP_EXAMPLE), NULL);
286#endif 288#endif
287MENUITEM_SETTING(bidir_limit, &global_settings.bidir_limit, NULL); 289MENUITEM_SETTING(bidir_limit, &global_settings.bidir_limit, NULL);
288#ifdef HAVE_REMOTE_LCD 290#ifdef HAVE_REMOTE_LCD
289MENUITEM_SETTING(remote_scroll_speed, &global_settings.remote_scroll_speed, NULL); 291MENUITEM_SETTING_W_TEXT(remote_scroll_speed, &global_settings.remote_scroll_speed,
292 ID2P(LANG_SCROLL), NULL);
290MENUITEM_SETTING(remote_scroll_delay, &global_settings.remote_scroll_delay, NULL); 293MENUITEM_SETTING(remote_scroll_delay, &global_settings.remote_scroll_delay, NULL);
291MENUITEM_SETTING(remote_scroll_step, &global_settings.remote_scroll_step, NULL); 294MENUITEM_SETTING_W_TEXT(remote_scroll_step, &global_settings.remote_scroll_step,
295 ID2P(LANG_SCROLL_STEP_EXAMPLE), NULL);
292MENUITEM_SETTING(remote_bidir_limit, &global_settings.remote_bidir_limit, NULL); 296MENUITEM_SETTING(remote_bidir_limit, &global_settings.remote_bidir_limit, NULL);
293MAKE_MENU(remote_scroll_sets, ID2P(LANG_REMOTE_SCROLL_SETS), 0, Icon_NOICON, 297MAKE_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,