From 4718a1e7526b3e7601a51c9bf55395d1950b1ffe Mon Sep 17 00:00:00 2001 From: Jonathan Gordon Date: Thu, 8 Feb 2007 04:33:41 +0000 Subject: beginning of the new menu system. This commit shouldnt break anything, but comming ones might.. report bugs in http://forums.rockbox.org/index.php?topic=8703.0 and more info at http://www.rockbox.org/twiki/bin/view/Main/SettingsRecode git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12227 a1c6a512-1295-4272-9138-f99709370657 --- apps/menu.h | 178 ++++++++++++++++++++++++++++++------------------------------ 1 file changed, 88 insertions(+), 90 deletions(-) (limited to 'apps/menu.h') diff --git a/apps/menu.h b/apps/menu.h index f9a3d1f..b0a1b4c 100644 --- a/apps/menu.h +++ b/apps/menu.h @@ -22,101 +22,14 @@ #include -/* button definitions */ -#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) -#define MENU_EXIT BUTTON_LEFT -#define MENU_EXIT2 BUTTON_OFF -#define MENU_EXIT_MENU BUTTON_MODE -#define MENU_ENTER BUTTON_RIGHT -#define MENU_ENTER2 BUTTON_SELECT - -#define MENU_RC_EXIT BUTTON_RC_STOP -#define MENU_RC_EXIT_MENU BUTTON_RC_MODE -#define MENU_RC_ENTER BUTTON_RC_ON -#define MENU_RC_ENTER2 BUTTON_RC_MENU - - -#elif CONFIG_KEYPAD == RECORDER_PAD - -#define MENU_EXIT BUTTON_LEFT -#define MENU_EXIT2 BUTTON_OFF -#define MENU_EXIT_MENU BUTTON_F1 -#define MENU_ENTER BUTTON_RIGHT -#define MENU_ENTER2 BUTTON_PLAY - -#define MENU_RC_EXIT BUTTON_RC_STOP -#define MENU_RC_ENTER BUTTON_RC_PLAY - -#elif CONFIG_KEYPAD == PLAYER_PAD -#define MENU_EXIT BUTTON_STOP -#define MENU_EXIT_MENU BUTTON_MENU -#define MENU_ENTER BUTTON_PLAY - -#define MENU_RC_EXIT BUTTON_RC_STOP -#define MENU_RC_ENTER BUTTON_RC_PLAY - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define MENU_EXIT BUTTON_LEFT -#define MENU_EXIT_MENU BUTTON_MENU -#define MENU_ENTER BUTTON_RIGHT - -#elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD) - -/* TODO: Check menu button assignments */ - -#define MENU_NEXT BUTTON_DOWN -#define MENU_PREV BUTTON_UP -#define MENU_EXIT BUTTON_LEFT -#define MENU_EXIT_MENU BUTTON_MENU -#define MENU_ENTER BUTTON_RIGHT -#define MENU_ENTER2 BUTTON_SELECT - -#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD - -#define MENU_NEXT BUTTON_DOWN -#define MENU_PREV BUTTON_UP -#define MENU_EXIT BUTTON_LEFT -#define MENU_EXIT_MENU BUTTON_PLAY -#define MENU_ENTER BUTTON_RIGHT - -#elif CONFIG_KEYPAD == IAUDIO_X5_PAD - -#define MENU_NEXT BUTTON_DOWN -#define MENU_PREV BUTTON_UP -#define MENU_EXIT BUTTON_LEFT -#define MENU_EXIT_MENU BUTTON_REC -#define MENU_ENTER BUTTON_RIGHT -#define MENU_ENTER2 BUTTON_SELECT - -#elif CONFIG_KEYPAD == GIGABEAT_PAD - -#define MENU_EXIT BUTTON_LEFT -#define MENU_EXIT2 BUTTON_A -#define MENU_EXIT_MENU BUTTON_MENU -#define MENU_ENTER BUTTON_RIGHT -#define MENU_ENTER2 BUTTON_SELECT -#define MENU_NEXT BUTTON_DOWN -#define MENU_PREV BUTTON_UP - -#elif CONFIG_KEYPAD == IRIVER_H10_PAD - -#define MENU_NEXT BUTTON_SCROLL_DOWN -#define MENU_PREV BUTTON_SCROLL_UP -#define MENU_EXIT BUTTON_LEFT -#define MENU_EXIT_MENU BUTTON_REW -#define MENU_ENTER BUTTON_RIGHT -#define MENU_ENTER2 BUTTON_FF - -#endif - struct menu_item { unsigned char *desc; /* string or ID */ bool (*function) (void); /* return true if USB was connected */ }; -int menu_init(const struct menu_item* mitems, int count, int (*callback)(int, int), - const char *button1, const char *button2, const char *button3); +int menu_init(const struct menu_item* mitems, int count, + int (*callback)(int, int), + const char *button1, const char *button2, const char *button3); void menu_exit(int menu); void put_cursorxy(int x, int y, bool on); @@ -125,6 +38,8 @@ void put_cursorxy(int x, int y, bool on); int menu_show(int m); #define MENU_ATTACHED_USB -1 #define MENU_SELECTED_EXIT -2 +#define MENU_EXIT_ALL -3 +#define MENU_RETURN_TO_WPS -4 bool menu_run(int menu); int menu_cursor(int menu); @@ -138,4 +53,87 @@ void menu_insert(int menu, int position, char *desc, bool (*function) (void)); void menu_set_cursor(int menu, int position); void menu_talk_selected(int m); + +enum menu_item_type { + MT_MENU = 0, + MT_SETTING, + MT_FUNCTION_CALL, /* used when the standard code wont work */ + MT_FUNCTION_WITH_PARAM, + MT_RETURN_ID, /* returns the position of the selected item (starting at 0)*/ +}; + +typedef int (*menu_function)(void); +struct menu_func_with_param { + int (*function)(void* param); + void *param; +}; + +#define MENU_TYPE_MASK 0xF /* MT_* type */ +#define MENU_HAS_DESC 0x10 +#define MENU_COUNT_MASK (~(MENU_TYPE_MASK|MENU_HAS_DESC)) /* unless we need more flags*/ +#define MENU_COUNT_SHIFT 5 + +struct menu_item_ex { + int flags; /* above defines */ + union { + const struct menu_item_ex **submenus; /* used with MT_MENU */ + void *variable; /* used with MT_SETTING, + must be in the settings_list.c list */ + int (*function)(void); /* used with MT_FUNCTION_CALL */ + const struct menu_func_with_param + *func_with_param; /* MT_FUNCTION_WITH_PARAM */ + const char **strings; /* used with MT_RETURN_ID */ + }; + union { + int (*menu_callback)(int action, const struct menu_item_ex *this_item); + const struct menu_callback_with_desc { + int (*menu_callback)(int action, + const struct menu_item_ex *this_item); + unsigned char *desc; /* string or ID */ + } *callback_and_desc; + }; +}; + +typedef int (*menu_callback_type)(int action, + const struct menu_item_ex *this_item); +int do_menu(const struct menu_item_ex *menu); + +#define MENU_ITEM_COUNT(c) (c<