From 1f5ee2a3665e2a21d39b55f65f6c9c9a1de4e7fa Mon Sep 17 00:00:00 2001 From: Jonathan Gordon Date: Sun, 25 Mar 2007 14:31:56 +0000 Subject: convert the xobox menu to the new API so it can be used as an example for plugin devs Includes some fixes in the api to handle this. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12907 a1c6a512-1295-4272-9138-f99709370657 --- apps/menu.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) (limited to 'apps/menu.c') diff --git a/apps/menu.c b/apps/menu.c index 32b50d4..a519c1a 100644 --- a/apps/menu.c +++ b/apps/menu.c @@ -142,6 +142,11 @@ static void menu_get_icon(int selected_item, void * data, ICON * icon) int menu_icon = Icon_NOICON; selected_item = get_menu_selection(selected_item, menu); + if ((menu->flags&MENU_TYPE_MASK) == MT_RETURN_ID) + { + *icon = bitmap_icons_6x8[Icon_Menu_functioncall]; + return; + } menu = menu->submenus[selected_item]; if (menu->flags&MENU_HAS_DESC) menu_icon = menu->callback_and_desc->icon_id; @@ -177,22 +182,27 @@ static void init_menu_lists(const struct menu_item_ex *menu, struct gui_synclist *lists, int selected, bool callback) { int i, count = MENU_GET_COUNT(menu->flags); + int type = (menu->flags&MENU_TYPE_MASK); menu_callback_type menu_callback = NULL; ICON icon = NOICON; current_subitems_count = 0; - if ((menu->flags&MENU_TYPE_MASK) == MT_OLD_MENU) + if (type == MT_OLD_MENU) { init_oldmenu(menu, lists, selected, callback); return; } - + if (type == MT_RETURN_ID) + get_menu_callback(menu, &menu_callback); + for (i=0; isubmenus[i],&menu_callback); + if (type != MT_RETURN_ID) + get_menu_callback(menu->submenus[i],&menu_callback); if (menu_callback) { - if (menu_callback(ACTION_REQUEST_MENUITEM,menu->submenus[i]) + if (menu_callback(ACTION_REQUEST_MENUITEM, + type==MT_RETURN_ID ? (void*)(intptr_t)i: menu->submenus[i]) != ACTION_EXIT_MENUITEM) { current_subitems[current_subitems_count] = i; @@ -524,13 +534,15 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected) if (in_stringlist) type = (menu->flags&MENU_TYPE_MASK); else - type = (temp->flags&MENU_TYPE_MASK); - get_menu_callback(temp, &menu_callback); - if (menu_callback) { - action = menu_callback(ACTION_ENTER_MENUITEM,temp); - if (action == ACTION_EXIT_MENUITEM) - break; + type = (temp->flags&MENU_TYPE_MASK); + get_menu_callback(temp, &menu_callback); + if (menu_callback) + { + action = menu_callback(ACTION_ENTER_MENUITEM,temp); + if (action == ACTION_EXIT_MENUITEM) + break; + } } switch (type) { -- cgit v1.1