summaryrefslogtreecommitdiff
path: root/apps/menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/menu.c')
-rw-r--r--apps/menu.c66
1 files changed, 28 insertions, 38 deletions
diff --git a/apps/menu.c b/apps/menu.c
index eb29b43f3b..eb4bf0e1c9 100644
--- a/apps/menu.c
+++ b/apps/menu.c
@@ -73,7 +73,7 @@ static void get_menu_callback(const struct menu_item_ex *m,
73{ 73{
74 if (m->flags&(MENU_HAS_DESC|MENU_DYNAMIC_DESC)) 74 if (m->flags&(MENU_HAS_DESC|MENU_DYNAMIC_DESC))
75 *menu_callback= m->callback_and_desc->menu_callback; 75 *menu_callback= m->callback_and_desc->menu_callback;
76 else 76 else
77 *menu_callback = m->menu_callback; 77 *menu_callback = m->menu_callback;
78} 78}
79 79
@@ -101,7 +101,7 @@ static const char* get_menu_item_name(int selected_item,
101 const struct menu_item_ex *menu = (const struct menu_item_ex *)data; 101 const struct menu_item_ex *menu = (const struct menu_item_ex *)data;
102 int type = (menu->flags&MENU_TYPE_MASK); 102 int type = (menu->flags&MENU_TYPE_MASK);
103 selected_item = get_menu_selection(selected_item, menu); 103 selected_item = get_menu_selection(selected_item, menu);
104 104
105 (void)buffer_len; 105 (void)buffer_len;
106 /* only MT_MENU or MT_RETURN_ID is allowed in here */ 106 /* only MT_MENU or MT_RETURN_ID is allowed in here */
107 if (type == MT_RETURN_ID) 107 if (type == MT_RETURN_ID)
@@ -111,13 +111,13 @@ static const char* get_menu_item_name(int selected_item,
111 menu->menu_get_name_and_icon->list_get_name_data, buffer); 111 menu->menu_get_name_and_icon->list_get_name_data, buffer);
112 return menu->strings[selected_item]; 112 return menu->strings[selected_item];
113 } 113 }
114 114
115 menu = menu->submenus[selected_item]; 115 menu = menu->submenus[selected_item];
116 116
117 if ((menu->flags&MENU_DYNAMIC_DESC) && (type != MT_SETTING_W_TEXT)) 117 if ((menu->flags&MENU_DYNAMIC_DESC) && (type != MT_SETTING_W_TEXT))
118 return menu->menu_get_name_and_icon->list_get_name(selected_item, 118 return menu->menu_get_name_and_icon->list_get_name(selected_item,
119 menu->menu_get_name_and_icon->list_get_name_data, buffer); 119 menu->menu_get_name_and_icon->list_get_name_data, buffer);
120 120
121 type = (menu->flags&MENU_TYPE_MASK); 121 type = (menu->flags&MENU_TYPE_MASK);
122 if ((type == MT_SETTING) || (type == MT_SETTING_W_TEXT)) 122 if ((type == MT_SETTING) || (type == MT_SETTING_W_TEXT))
123 { 123 {
@@ -135,7 +135,7 @@ static enum themable_icons menu_get_icon(int selected_item, void * data)
135 const struct menu_item_ex *menu = (const struct menu_item_ex *)data; 135 const struct menu_item_ex *menu = (const struct menu_item_ex *)data;
136 int menu_icon = Icon_NOICON; 136 int menu_icon = Icon_NOICON;
137 selected_item = get_menu_selection(selected_item, menu); 137 selected_item = get_menu_selection(selected_item, menu);
138 138
139 if ((menu->flags&MENU_TYPE_MASK) == MT_RETURN_ID) 139 if ((menu->flags&MENU_TYPE_MASK) == MT_RETURN_ID)
140 { 140 {
141 return Icon_Menu_functioncall; 141 return Icon_Menu_functioncall;
@@ -145,7 +145,7 @@ static enum themable_icons menu_get_icon(int selected_item, void * data)
145 menu_icon = menu->callback_and_desc->icon_id; 145 menu_icon = menu->callback_and_desc->icon_id;
146 else if (menu->flags&MENU_DYNAMIC_DESC) 146 else if (menu->flags&MENU_DYNAMIC_DESC)
147 menu_icon = menu->menu_get_name_and_icon->icon_id; 147 menu_icon = menu->menu_get_name_and_icon->icon_id;
148 148
149 if (menu_icon == Icon_NOICON) 149 if (menu_icon == Icon_NOICON)
150 { 150 {
151 switch (menu->flags&MENU_TYPE_MASK) 151 switch (menu->flags&MENU_TYPE_MASK)
@@ -194,7 +194,7 @@ static void init_menu_lists(const struct menu_item_ex *menu,
194 current_subitems_count++; 194 current_subitems_count++;
195 } 195 }
196 } 196 }
197 else 197 else
198 { 198 {
199 current_subitems[current_subitems_count] = i; 199 current_subitems[current_subitems_count] = i;
200 current_subitems_count++; 200 current_subitems_count++;
@@ -219,7 +219,7 @@ static void init_menu_lists(const struct menu_item_ex *menu,
219 gui_synclist_set_nb_items(lists,current_subitems_count); 219 gui_synclist_set_nb_items(lists,current_subitems_count);
220 gui_synclist_limit_scroll(lists,true); 220 gui_synclist_limit_scroll(lists,true);
221 gui_synclist_select_item(lists, find_menu_selection(selected)); 221 gui_synclist_select_item(lists, find_menu_selection(selected));
222 222
223 get_menu_callback(menu,&menu_callback); 223 get_menu_callback(menu,&menu_callback);
224 if (callback && menu_callback) 224 if (callback && menu_callback)
225 menu_callback(ACTION_ENTER_MENUITEM,menu); 225 menu_callback(ACTION_ENTER_MENUITEM,menu);
@@ -234,13 +234,13 @@ static int talk_menu_item(int selected_item, void *data)
234 int type; 234 int type;
235 unsigned char *str; 235 unsigned char *str;
236 int sel = get_menu_selection(selected_item, menu); 236 int sel = get_menu_selection(selected_item, menu);
237 237
238 if ((menu->flags&MENU_TYPE_MASK) == MT_MENU) 238 if ((menu->flags&MENU_TYPE_MASK) == MT_MENU)
239 { 239 {
240 type = menu->submenus[sel]->flags&MENU_TYPE_MASK; 240 type = menu->submenus[sel]->flags&MENU_TYPE_MASK;
241 if ((type == MT_SETTING) || (type == MT_SETTING_W_TEXT)) 241 if ((type == MT_SETTING) || (type == MT_SETTING_W_TEXT))
242 talk_setting(menu->submenus[sel]->variable); 242 talk_setting(menu->submenus[sel]->variable);
243 else 243 else
244 { 244 {
245 if (menu->submenus[sel]->flags&(MENU_DYNAMIC_DESC)) 245 if (menu->submenus[sel]->flags&(MENU_DYNAMIC_DESC))
246 { 246 {
@@ -264,7 +264,7 @@ static int talk_menu_item(int selected_item, void *data)
264 else 264 else
265 id = P2ID(menu->submenus[sel]->callback_and_desc->desc); 265 id = P2ID(menu->submenus[sel]->callback_and_desc->desc);
266 if (id != -1) 266 if (id != -1)
267 talk_id(id,false); 267 talk_id(id,false);
268 } 268 }
269 } 269 }
270 else if(((menu->flags&MENU_TYPE_MASK) == MT_RETURN_ID)) 270 else if(((menu->flags&MENU_TYPE_MASK) == MT_RETURN_ID))
@@ -285,9 +285,8 @@ void do_setting_from_menu(const struct menu_item_ex *temp,
285 struct viewport parent[NB_SCREENS]) 285 struct viewport parent[NB_SCREENS])
286{ 286{
287 int setting_id, oldval; 287 int setting_id, oldval;
288 const struct settings_list *setting = find_setting( 288 const struct settings_list *setting =
289 temp->variable, 289 find_setting(temp->variable, &setting_id);
290 &setting_id);
291 char *title; 290 char *title;
292 char padded_title[MAX_PATH]; 291 char padded_title[MAX_PATH];
293 int var_type = setting->flags&F_T_MASK; 292 int var_type = setting->flags&F_T_MASK;
@@ -305,7 +304,7 @@ void do_setting_from_menu(const struct menu_item_ex *temp,
305 title = temp->callback_and_desc->desc; 304 title = temp->callback_and_desc->desc;
306 else 305 else
307 title = ID2P(setting->lang_id); 306 title = ID2P(setting->lang_id);
308 307
309 /* Pad the title string by repeating it. This is needed 308 /* Pad the title string by repeating it. This is needed
310 so the scroll settings title can actually be used to 309 so the scroll settings title can actually be used to
311 test the setting */ 310 test the setting */
@@ -328,7 +327,7 @@ void do_setting_from_menu(const struct menu_item_ex *temp,
328 padded_title[i] = '\0'; 327 padded_title[i] = '\0';
329 title = padded_title; 328 title = padded_title;
330 } 329 }
331 330
332 option_screen((struct settings_list *)setting, parent, 331 option_screen((struct settings_list *)setting, parent,
333 setting->flags&F_TEMPVAR, title); 332 setting->flags&F_TEMPVAR, title);
334} 333}
@@ -345,7 +344,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
345 bool redraw_lists; 344 bool redraw_lists;
346 FOR_NB_SCREENS(i) 345 FOR_NB_SCREENS(i)
347 viewportmanager_theme_enable(i, !hide_theme, NULL); 346 viewportmanager_theme_enable(i, !hide_theme, NULL);
348 347
349 const struct menu_item_ex *menu_stack[MAX_MENUS]; 348 const struct menu_item_ex *menu_stack[MAX_MENUS];
350 int menu_stack_selected_item[MAX_MENUS]; 349 int menu_stack_selected_item[MAX_MENUS];
351 int stack_top = 0; 350 int stack_top = 0;
@@ -370,7 +369,6 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
370 in_stringlist = ((menu->flags&MENU_TYPE_MASK) == MT_RETURN_ID); 369 in_stringlist = ((menu->flags&MENU_TYPE_MASK) == MT_RETURN_ID);
371 /* load the callback, and only reload it if menu changes */ 370 /* load the callback, and only reload it if menu changes */
372 get_menu_callback(menu, &menu_callback); 371 get_menu_callback(menu, &menu_callback);
373
374 372
375#ifdef HAVE_BUTTONBAR 373#ifdef HAVE_BUTTONBAR
376 if (!hide_theme) 374 if (!hide_theme)
@@ -391,7 +389,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
391 action = get_action(CONTEXT_MAINMENU, 389 action = get_action(CONTEXT_MAINMENU,
392 list_do_action_timeout(&lists, HZ)); 390 list_do_action_timeout(&lists, HZ));
393 /* HZ so the status bar redraws corectly */ 391 /* HZ so the status bar redraws corectly */
394 392
395 if (menu_callback) 393 if (menu_callback)
396 { 394 {
397 int old_action = action; 395 int old_action = action;
@@ -477,11 +475,10 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
477 { 475 {
478 case GO_TO_PREVIOUS: 476 case GO_TO_PREVIOUS:
479 break; 477 break;
480 case 0: /* reset setting */ 478 case 0: /* reset setting */
481 reset_setting(setting, setting->setting); 479 reset_setting(setting, setting->setting);
482 break;
483#ifdef HAVE_QUICKSCREEN
484 break; 480 break;
481#ifdef HAVE_QUICKSCREEN
485 case 1: /* set as top QS item */ 482 case 1: /* set as top QS item */
486 set_as_qs_item(setting, QUICKSCREEN_TOP); 483 set_as_qs_item(setting, QUICKSCREEN_TOP);
487 break; 484 break;
@@ -513,10 +510,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
513 bool exiting_menu = false; 510 bool exiting_menu = false;
514 in_stringlist = false; 511 in_stringlist = false;
515 /* might be leaving list, so stop scrolling */ 512 /* might be leaving list, so stop scrolling */
516 FOR_NB_SCREENS(i) 513 gui_synclist_scroll_stop(&lists);
517 {
518 screens[i].scroll_stop(&vps[i]);
519 }
520 if (menu_callback) 514 if (menu_callback)
521 menu_callback(ACTION_EXIT_MENUITEM, menu); 515 menu_callback(ACTION_EXIT_MENUITEM, menu);
522 516
@@ -546,10 +540,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
546 { 540 {
547 int type; 541 int type;
548 /* entering an item that may not be a list, so stop scrolling */ 542 /* entering an item that may not be a list, so stop scrolling */
549 FOR_NB_SCREENS(i) 543 gui_synclist_scroll_stop(&lists);
550 {
551 screens[i].scroll_stop(&vps[i]);
552 }
553#ifdef HAVE_BUTTONBAR 544#ifdef HAVE_BUTTONBAR
554 if (!hide_theme) 545 if (!hide_theme)
555 { 546 {
@@ -562,7 +553,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
562 redraw_lists = true; 553 redraw_lists = true;
563 if (in_stringlist) 554 if (in_stringlist)
564 type = (menu->flags&MENU_TYPE_MASK); 555 type = (menu->flags&MENU_TYPE_MASK);
565 else 556 else
566 { 557 {
567 type = (temp->flags&MENU_TYPE_MASK); 558 type = (temp->flags&MENU_TYPE_MASK);
568 get_menu_callback(temp, &menu_callback); 559 get_menu_callback(temp, &menu_callback);
@@ -592,7 +583,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
592 if (temp->flags&MENU_FUNC_USEPARAM) 583 if (temp->flags&MENU_FUNC_USEPARAM)
593 return_value = temp->function->function_w_param( 584 return_value = temp->function->function_w_param(
594 temp->function->param); 585 temp->function->param);
595 else 586 else
596 return_value = temp->function->function(); 587 return_value = temp->function->function();
597 if (!(menu->flags&MENU_EXITAFTERTHISMENU) || 588 if (!(menu->flags&MENU_EXITAFTERTHISMENU) ||
598 (temp->flags&MENU_EXITAFTERTHISMENU)) 589 (temp->flags&MENU_EXITAFTERTHISMENU))
@@ -665,7 +656,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
665 ret = MENU_ATTACHED_USB; 656 ret = MENU_ATTACHED_USB;
666 done = true; 657 done = true;
667 } 658 }
668 659
669 if (redraw_lists && !done) 660 if (redraw_lists && !done)
670 { 661 {
671 if (menu_callback) 662 if (menu_callback)
@@ -686,8 +677,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
686 *start_selected = get_menu_selection( 677 *start_selected = get_menu_selection(
687 gui_synclist_get_sel_pos(&lists), menu); 678 gui_synclist_get_sel_pos(&lists), menu);
688 } 679 }
689 FOR_NB_SCREENS(i) 680 FOR_NB_SCREENS(i)
690 viewportmanager_theme_undo(i, false); 681 viewportmanager_theme_undo(i, false);
691 return ret; 682 return ret;
692} 683}
693