menu.c do_menu code cleanup

no functional changes here just removal of cruft

Change-Id: Id16c3607608d8f1ddcaf219dcd346f7a996aec5d
This commit is contained in:
William Wilgus 2021-10-27 01:28:46 -04:00
parent 1cec2c7a73
commit f1ef5ab8a6
1 changed files with 68 additions and 64 deletions

View File

@ -67,6 +67,12 @@ static int current_subitems[MAX_MENU_SUBITEMS];
static int current_subitems_count = 0; static int current_subitems_count = 0;
static int talk_menu_item(int selected_item, void *data); static int talk_menu_item(int selected_item, void *data);
struct menu_data_t
{
const struct menu_item_ex *menu;
int selected;
};
static void get_menu_callback(const struct menu_item_ex *m, static void get_menu_callback(const struct menu_item_ex *m,
menu_callback_type *menu_callback) menu_callback_type *menu_callback)
{ {
@ -76,6 +82,19 @@ static void get_menu_callback(const struct menu_item_ex *m,
*menu_callback = m->menu_callback; *menu_callback = m->menu_callback;
} }
static bool query_audio_status(int *old_audio_status)
{
bool redraw_list = false;
/* query audio status to see if it changed */
int new_audio_status = audio_status();
if (*old_audio_status != new_audio_status)
{ /* force a redraw if anything changed the audio status from outside */
*old_audio_status = new_audio_status;
redraw_list = true;
}
return redraw_list;
}
static int get_menu_selection(int selected_item, const struct menu_item_ex *menu) static int get_menu_selection(int selected_item, const struct menu_item_ex *menu)
{ {
int type = (menu->flags&MENU_TYPE_MASK); int type = (menu->flags&MENU_TYPE_MASK);
@ -128,8 +147,7 @@ static const char* get_menu_item_name(int selected_item,
type = (menu->flags&MENU_TYPE_MASK); type = (menu->flags&MENU_TYPE_MASK);
if ((type == MT_SETTING) || (type == MT_SETTING_W_TEXT)) if ((type == MT_SETTING) || (type == MT_SETTING_W_TEXT))
{ {
const struct settings_list *v const struct settings_list *v = find_setting(menu->variable, NULL);
= find_setting(menu->variable, NULL);
if (v) if (v)
return str(v->lang_id); return str(v->lang_id);
else return "Not Done yet!"; else return "Not Done yet!";
@ -158,20 +176,13 @@ static enum themable_icons menu_get_icon(int selected_item, void * data)
if (menu_icon == Icon_NOICON) if (menu_icon == Icon_NOICON)
{ {
switch (menu->flags&MENU_TYPE_MASK) unsigned int flags = (menu->flags&MENU_TYPE_MASK);
{ if(flags == MT_MENU)
case MT_SETTING: menu_icon = Icon_Submenu;
case MT_SETTING_W_TEXT: else if (flags == MT_SETTING || flags == MT_SETTING_W_TEXT)
menu_icon = Icon_Menu_setting; menu_icon = Icon_Menu_setting;
break; else if (flags == MT_FUNCTION_CALL || flags == MT_RETURN_VALUE)
case MT_MENU: menu_icon = Icon_Menu_functioncall;
menu_icon = Icon_Submenu;
break;
case MT_FUNCTION_CALL:
case MT_RETURN_VALUE:
menu_icon = Icon_Menu_functioncall;
break;
}
} }
return menu_icon; return menu_icon;
} }
@ -368,12 +379,15 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
struct viewport parent[NB_SCREENS], bool hide_theme) struct viewport parent[NB_SCREENS], bool hide_theme)
{ {
int selected = start_selected? *start_selected : 0; int selected = start_selected? *start_selected : 0;
int ret = 0;
int action; int action;
struct gui_synclist lists; struct gui_synclist lists;
const struct menu_item_ex *temp = NULL; const struct menu_item_ex *temp = NULL;
const struct menu_item_ex *menu = start_menu; const struct menu_item_ex *menu = start_menu;
int ret = 0;
bool in_stringlist, done = false;
bool redraw_lists; bool redraw_lists;
int old_audio_status = audio_status(); int old_audio_status = audio_status();
#ifdef HAVE_TOUCHSCREEN #ifdef HAVE_TOUCHSCREEN
@ -386,10 +400,9 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
viewportmanager_theme_enable(i, !hide_theme, NULL); viewportmanager_theme_enable(i, !hide_theme, NULL);
const struct menu_item_ex *menu_stack[MAX_MENUS]; struct menu_data_t mstack[MAX_MENUS]; /* menu, selected */
int menu_stack_selected_item[MAX_MENUS];
int stack_top = 0; int stack_top = 0;
bool in_stringlist, done = false;
struct viewport *vps = NULL; struct viewport *vps = NULL;
menu_callback_type menu_callback = NULL; menu_callback_type menu_callback = NULL;
@ -403,42 +416,30 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
gui_synclist_draw(&lists); gui_synclist_draw(&lists);
gui_synclist_speak_item(&lists); gui_synclist_speak_item(&lists);
while (!done) while (!done)
{ {
int new_audio_status;
redraw_lists = false;
keyclick_set_callback(gui_synclist_keyclick_callback, &lists); keyclick_set_callback(gui_synclist_keyclick_callback, &lists);
action = get_action(CONTEXT_MAINMENU|ALLOW_SOFTLOCK, action = get_action(CONTEXT_MAINMENU|ALLOW_SOFTLOCK,
list_do_action_timeout(&lists, HZ)); list_do_action_timeout(&lists, HZ));
/* HZ so the status bar redraws corectly */
/* query audio status to see if it changed */ /* query audio status to see if it changed */
new_audio_status = audio_status(); redraw_lists = query_audio_status(&old_audio_status);
if (old_audio_status != new_audio_status)
{ /* force a redraw if anything changed the audio status
* from outside */
redraw_lists = true;
old_audio_status = new_audio_status;
}
/* HZ so the status bar redraws corectly */
if (menu_callback) if (menu_callback)
{ {
int old_action = action; int new_action = menu_callback(action, menu, &lists);
action = menu_callback(action, menu, &lists); if (new_action == ACTION_EXIT_AFTER_THIS_MENUITEM)
if (action == ACTION_EXIT_AFTER_THIS_MENUITEM) ret = MENU_SELECTED_EXIT; /* exit after return from selection */
{ else if (new_action == ACTION_REDRAW)
action = old_action;
ret = MENU_SELECTED_EXIT; /* will exit after returning
from selection */
}
else if (action == ACTION_REDRAW)
{
action = old_action;
redraw_lists = true; redraw_lists = true;
} else
action = new_action;
} }
if (gui_synclist_do_button(&lists, &action, LIST_WRAP_UNLESS_HELD)) if (LIKELY(gui_synclist_do_button(&lists, &action, LIST_WRAP_UNLESS_HELD)))
continue; continue;
#ifdef HAVE_QUICKSCREEN #ifdef HAVE_QUICKSCREEN
else if (action == ACTION_STD_QUICKSCREEN) else if (action == ACTION_STD_QUICKSCREEN)
@ -505,7 +506,6 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
ID2P(LANG_ONPLAY_MENU_TITLE), NULL, ID2P(LANG_ONPLAY_MENU_TITLE), NULL,
ID2P(LANG_RESET_SETTING)); ID2P(LANG_RESET_SETTING));
const struct menu_item_ex *menu; const struct menu_item_ex *menu;
int menu_selection = 0;
const struct settings_list *setting = const struct settings_list *setting =
find_setting(temp->variable, NULL); find_setting(temp->variable, NULL);
#ifdef HAVE_QUICKSCREEN #ifdef HAVE_QUICKSCREEN
@ -514,7 +514,10 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
else else
#endif #endif
menu = &notquickscreen_able_option; menu = &notquickscreen_able_option;
switch (do_menu(menu, &menu_selection, NULL, false))
int msel = do_menu(menu, NULL, NULL, false);
switch (msel)
{ {
case GO_TO_PREVIOUS: case GO_TO_PREVIOUS:
break; break;
@ -556,10 +559,12 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
} }
else if (action == ACTION_STD_CANCEL) else if (action == ACTION_STD_CANCEL)
{ {
bool exiting_menu = false;
in_stringlist = false;
/* might be leaving list, so stop scrolling */ /* might be leaving list, so stop scrolling */
gui_synclist_scroll_stop(&lists); gui_synclist_scroll_stop(&lists);
bool exiting_menu = false;
in_stringlist = false;
if (menu_callback) if (menu_callback)
menu_callback(ACTION_EXIT_MENUITEM, menu, &lists); menu_callback(ACTION_EXIT_MENUITEM, menu, &lists);
@ -567,15 +572,16 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
done = true; done = true;
else if ((menu->flags&MENU_TYPE_MASK) == MT_MENU) else if ((menu->flags&MENU_TYPE_MASK) == MT_MENU)
exiting_menu = true; exiting_menu = true;
if (stack_top > 0) if (stack_top > 0)
{ {
stack_top--; stack_top--;
menu = menu_stack[stack_top]; menu = mstack[stack_top].menu;
int msel = mstack[stack_top].selected;
if (!exiting_menu && (menu->flags&MENU_EXITAFTERTHISMENU)) if (!exiting_menu && (menu->flags&MENU_EXITAFTERTHISMENU))
done = true; done = true;
else else
init_menu_lists(menu, &lists, init_menu_lists(menu, &lists, msel, false, vps);
menu_stack_selected_item[stack_top], false, vps);
redraw_lists = true; redraw_lists = true;
/* new menu, so reload the callback */ /* new menu, so reload the callback */
get_menu_callback(menu, &menu_callback); get_menu_callback(menu, &menu_callback);
@ -588,19 +594,18 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
} }
else if (action == ACTION_STD_OK) else if (action == ACTION_STD_OK)
{ {
int type = (menu->flags&MENU_TYPE_MASK);
/* entering an item that may not be a list, so stop scrolling */ /* entering an item that may not be a list, so stop scrolling */
gui_synclist_scroll_stop(&lists); gui_synclist_scroll_stop(&lists);
redraw_lists = true;
int type = (menu->flags&MENU_TYPE_MASK);
selected = get_menu_selection(gui_synclist_get_sel_pos(&lists), menu); selected = get_menu_selection(gui_synclist_get_sel_pos(&lists), menu);
if (type == MT_MENU) if (type == MT_MENU)
temp = menu->submenus[selected]; temp = menu->submenus[selected];
else else if (!in_stringlist)
type = -1; type = -1;
redraw_lists = true; if (!in_stringlist && temp)
if (in_stringlist)
type = (menu->flags&MENU_TYPE_MASK);
else if (temp)
{ {
type = (temp->flags&MENU_TYPE_MASK); type = (temp->flags&MENU_TYPE_MASK);
get_menu_callback(temp, &menu_callback); get_menu_callback(temp, &menu_callback);
@ -616,8 +621,8 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
case MT_MENU: case MT_MENU:
if (stack_top < MAX_MENUS) if (stack_top < MAX_MENUS)
{ {
menu_stack[stack_top] = menu; mstack[stack_top].menu = menu;
menu_stack_selected_item[stack_top] = selected; mstack[stack_top].selected = selected;
stack_top++; stack_top++;
menu = temp; menu = temp;
init_menu_lists(menu, &lists, 0, true, vps); init_menu_lists(menu, &lists, 0, true, vps);
@ -661,8 +666,8 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
} }
else if (stack_top < MAX_MENUS) else if (stack_top < MAX_MENUS)
{ {
menu_stack[stack_top] = menu; mstack[stack_top].menu = menu;
menu_stack_selected_item[stack_top] = selected; mstack[stack_top].selected = selected;
stack_top++; stack_top++;
menu = temp; menu = temp;
init_menu_lists(menu,&lists,0,false, vps); init_menu_lists(menu,&lists,0,false, vps);
@ -731,8 +736,8 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
the selected item from the menu do_menu() was called from */ the selected item from the menu do_menu() was called from */
if (stack_top > 0) if (stack_top > 0)
{ {
menu = menu_stack[0]; menu = mstack[0].menu;
init_menu_lists(menu,&lists,menu_stack_selected_item[0],true, vps); init_menu_lists(menu,&lists,mstack[0].selected,true, vps);
} }
*start_selected = get_menu_selection( *start_selected = get_menu_selection(
gui_synclist_get_sel_pos(&lists), menu); gui_synclist_get_sel_pos(&lists), menu);
@ -748,6 +753,5 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
tsm == old_global_mode)) tsm == old_global_mode))
touchscreen_set_mode(tsm); touchscreen_set_mode(tsm);
#endif #endif
return ret; return ret;
} }