1
0
Fork 0
forked from len0rd/rockbox

Give most of the items in the main menu a context menu

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13126 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jonathan Gordon 2007-04-12 15:28:51 +00:00
parent 88c05bd3c1
commit f9fb49284e
3 changed files with 47 additions and 11 deletions

View file

@ -477,6 +477,12 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected)
{ {
list_stop_handler(); list_stop_handler();
} }
else if (action == ACTION_STD_CONTEXT &&
menu == &root_menu_)
{
ret = GO_TO_ROOTITEM_CONTEXT;
done = true;
}
else if (action == ACTION_STD_MENU) else if (action == ACTION_STD_MENU)
{ {
if ((menu->flags&MENU_TYPE_MASK) == MT_OLD_MENU) if ((menu->flags&MENU_TYPE_MASK) == MT_OLD_MENU)

View file

@ -70,6 +70,7 @@
struct root_items { struct root_items {
int (*function)(void* param); int (*function)(void* param);
void* param; void* param;
const struct menu_item_ex *context_menu;
}; };
static int last_screen = GO_TO_ROOT; /* unfortunatly needed so we can resume static int last_screen = GO_TO_ROOT; /* unfortunatly needed so we can resume
or goto current track based on previous or goto current track based on previous
@ -250,23 +251,31 @@ static int load_bmarks(void* param)
bookmark_mrb_load(); bookmark_mrb_load();
return GO_TO_PREVIOUS; return GO_TO_PREVIOUS;
} }
/* These are all static const'd from apps/menus/ *.c
so little hack so we can use them */
extern struct menu_item_ex
file_menu,
tagcache_menu,
manage_settings,
recording_setting_menu,
bookmark_settings_menu,
system_menu;
static const struct root_items items[] = { static const struct root_items items[] = {
[GO_TO_FILEBROWSER] = { browser, (void*)GO_TO_FILEBROWSER }, [GO_TO_FILEBROWSER] = { browser, (void*)GO_TO_FILEBROWSER, &file_menu},
[GO_TO_DBBROWSER] = { browser, (void*)GO_TO_DBBROWSER }, [GO_TO_DBBROWSER] = { browser, (void*)GO_TO_DBBROWSER, &tagcache_menu },
[GO_TO_WPS] = { wpsscrn, NULL }, [GO_TO_WPS] = { wpsscrn, NULL, &playback_menu_item },
[GO_TO_MAINMENU] = { menu, NULL }, [GO_TO_MAINMENU] = { menu, NULL, &manage_settings },
#ifdef HAVE_RECORDING #ifdef HAVE_RECORDING
[GO_TO_RECSCREEN] = { recscrn, NULL }, [GO_TO_RECSCREEN] = { recscrn, NULL, &recording_setting_menu },
#endif #endif
#if CONFIG_TUNER #if CONFIG_TUNER
[GO_TO_FM] = { radio, NULL }, [GO_TO_FM] = { radio, NULL, NULL },
#endif #endif
[GO_TO_RECENTBMARKS] = { load_bmarks, NULL }, [GO_TO_RECENTBMARKS] = { load_bmarks, NULL, &bookmark_settings_menu },
[GO_TO_BROWSEPLUGINS] = { browser, (void*)GO_TO_BROWSEPLUGINS }, [GO_TO_BROWSEPLUGINS] = { browser, (void*)GO_TO_BROWSEPLUGINS, NULL },
}; };
static const int nb_items = sizeof(items)/sizeof(*items); static const int nb_items = sizeof(items)/sizeof(*items);
@ -392,7 +401,25 @@ static inline int load_screen(int screen)
last_screen = old_previous; last_screen = old_previous;
return ret_val; return ret_val;
} }
static int load_context_screen(int selection)
{
const struct menu_item_ex *context_menu = NULL;
if (root_menu__[selection]->flags&MT_RETURN_VALUE)
{
int item = root_menu__[selection]->value;
context_menu = items[item].context_menu;
}
/* special cases */
else if (root_menu__[selection] == &info_menu)
{
context_menu = &system_menu;
}
if (context_menu)
return do_menu(context_menu, NULL);
else
return GO_TO_PREVIOUS;
}
void root_menu(void) void root_menu(void)
{ {
int previous_browser = GO_TO_FILEBROWSER; int previous_browser = GO_TO_FILEBROWSER;
@ -455,7 +482,9 @@ void root_menu(void)
case GO_TO_PREVIOUS_MUSIC: case GO_TO_PREVIOUS_MUSIC:
next_screen = previous_music; next_screen = previous_music;
break; break;
case GO_TO_ROOTITEM_CONTEXT:
next_screen = load_context_screen(selected);
break;
default: default:
if (next_screen == GO_TO_FILEBROWSER if (next_screen == GO_TO_FILEBROWSER
#ifdef HAVE_TAGCACHE #ifdef HAVE_TAGCACHE

View file

@ -27,6 +27,7 @@ enum {
MENU_ATTACHED_USB = -10, MENU_ATTACHED_USB = -10,
MENU_SELECTED_EXIT = -9, MENU_SELECTED_EXIT = -9,
GO_TO_ROOTITEM_CONTEXT = -5,
GO_TO_PREVIOUS_MUSIC = -4, GO_TO_PREVIOUS_MUSIC = -4,
GO_TO_PREVIOUS_BROWSER = -3, GO_TO_PREVIOUS_BROWSER = -3,
GO_TO_PREVIOUS = -2, GO_TO_PREVIOUS = -2,