/*************************************************************************** * __________ __ ___. * Open \______ \ ____ ____ | | _\_ |__ _______ ___ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ * \/ \/ \/ \/ \/ * $Id$ * * Copyright (C) 2002 Robert E. Hak * * All files in this archive are subject to the GNU General Public License. * See the file COPYING in the source tree root for full license agreement. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ****************************************************************************/ #ifndef __MENU_H__ #define __MENU_H__ #include #include "icon.h" #include "icons.h" 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); void menu_exit(int menu); void put_cursorxy(int x, int y, bool on); /* Returns below define, or number of selected menu item*/ 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); char* menu_description(int menu, int position); void menu_delete(int menu, int position); int menu_count(int menu); bool menu_moveup(int menu); bool menu_movedown(int menu); void menu_draw(int menu); 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 */ /* these next two are mutually exclusive */ #define MENU_HAS_DESC 0x10 #define MENU_DYNAMIC_DESC 0x20 /* unless we need more flags*/ #define MENU_COUNT_MASK (~(MENU_TYPE_MASK|MENU_HAS_DESC|MENU_DYNAMIC_DESC)) #define MENU_COUNT_SHIFT 6 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 { /* For settings */ int (*menu_callback)(int action, const struct menu_item_ex *this_item); /* For everything else, except if the text is dynamic */ const struct menu_callback_with_desc { int (*menu_callback)(int action, const struct menu_item_ex *this_item); unsigned char *desc; /* string or ID */ #ifdef HAVE_LCD_BITMAP ICON icon; /* Icon to display */ #endif } *callback_and_desc; /* For when the item text is dynamic */ const struct menu_get_name_and_icon { int (*menu_callback)(int action, const struct menu_item_ex *this_item); char *(*list_get_name)(int selected_item, void * data, char *buffer); void *list_get_name_data; #ifdef HAVE_LCD_BITMAP ICON icon; /* Icon to display */ #endif } *menu_get_name_and_icon; }; }; typedef int (*menu_callback_type)(int action, const struct menu_item_ex *this_item); int do_menu(const struct menu_item_ex *menu); bool do_setting_from_menu(const struct menu_item_ex *temp); #define MENU_ITEM_COUNT(c) (c<