diff options
Diffstat (limited to 'trunk/src/emu/uimenu.h')
-rw-r--r-- | trunk/src/emu/uimenu.h | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/trunk/src/emu/uimenu.h b/trunk/src/emu/uimenu.h new file mode 100644 index 00000000000..e8d42e12e34 --- /dev/null +++ b/trunk/src/emu/uimenu.h @@ -0,0 +1,154 @@ +/*************************************************************************** + + uimenu.h + + Internal MAME menus for the user interface. + + Copyright Nicola Salmoria and the MAME Team. + Visit http://mamedev.org for licensing and usage restrictions. + +***************************************************************************/ + +#pragma once + +#ifndef __UIMENU_H__ +#define __UIMENU_H__ + +#include "render.h" + + +/*************************************************************************** + CONSTANTS +***************************************************************************/ + +/* flags for menu items */ +#define MENU_FLAG_LEFT_ARROW (1 << 0) +#define MENU_FLAG_RIGHT_ARROW (1 << 1) +#define MENU_FLAG_INVERT (1 << 2) +#define MENU_FLAG_MULTILINE (1 << 3) +#define MENU_FLAG_REDTEXT (1 << 4) +#define MENU_FLAG_DISABLE (1 << 5) + +/* special menu item for separators */ +#define MENU_SEPARATOR_ITEM "---" + +/* flags to pass to ui_menu_process */ +#define UI_MENU_PROCESS_NOKEYS 1 +#define UI_MENU_PROCESS_LR_REPEAT 2 +#define UI_MENU_PROCESS_CUSTOM_ONLY 4 + +/* options for ui_menu_reset */ +enum _ui_menu_reset_options +{ + UI_MENU_RESET_SELECT_FIRST, + UI_MENU_RESET_REMEMBER_POSITION, + UI_MENU_RESET_REMEMBER_REF +}; +typedef enum _ui_menu_reset_options ui_menu_reset_options; + + + +/*************************************************************************** + TYPE DEFINITIONS +***************************************************************************/ + +/* forward declarations */ +class ui_menu; + + +/* menu-related callback functions */ +typedef void (*ui_menu_handler_func)(running_machine &machine, ui_menu *menu, void *parameter, void *state); +typedef void (*ui_menu_custom_func)(running_machine &machine, ui_menu *menu, void *state, void *selectedref, float top, float bottom, float x, float y, float x2, float y2); +typedef void (*ui_menu_destroy_state_func)(ui_menu *menu, void *state); + + +/* menu-related events */ +typedef struct _ui_menu_event ui_menu_event; +struct _ui_menu_event +{ + void * itemref; /* reference for the selected item */ + int iptkey; /* one of the IPT_* values from inptport.h */ + unicode_char unichar; /* unicode character if iptkey == IPT_SPECIAL */ +}; + + + +/*************************************************************************** + FUNCTION PROTOTYPES +***************************************************************************/ + + +/* ----- core system management ----- */ + +/* initialization */ +void ui_menu_init(running_machine &machine); + + + +/* ----- core menu management ----- */ + +/* allocate a new menu */ +ui_menu *ui_menu_alloc(running_machine &machine, render_container *container, ui_menu_handler_func handler, void *parameter); + +/* free a menu */ +void ui_menu_free(ui_menu *menu); + +/* free all items in the menu, and all memory allocated from the memory pool */ +void ui_menu_reset(ui_menu *menu, ui_menu_reset_options options); + +/* returns TRUE if the menu has any non-default items in it */ +int ui_menu_populated(ui_menu *menu); + +/* append a new item to the end of the menu */ +void ui_menu_item_append(ui_menu *menu, const char *text, const char *subtext, UINT32 flags, void *ref); + +/* process a menu, drawing it and returning any interesting events */ +const ui_menu_event *ui_menu_process(running_machine &machine, ui_menu *menu, UINT32 flags); + +/* configure the menu for custom rendering */ +void ui_menu_set_custom_render(ui_menu *menu, ui_menu_custom_func custom, float top, float bottom); + +/* allocate permanent memory to represent the menu's state */ +void *ui_menu_alloc_state(ui_menu *menu, size_t size, ui_menu_destroy_state_func destroy_state); + +/* allocate temporary memory from the menu's memory pool */ +void *ui_menu_pool_alloc(ui_menu *menu, size_t size); + +/* make a temporary string copy in the menu's memory pool */ +const char *ui_menu_pool_strdup(ui_menu *menu, const char *string); + +/* retrieves the index of the currently selected menu item */ +void *ui_menu_get_selection(ui_menu *menu); + +/* changes the index of the currently selected menu item */ +void ui_menu_set_selection(ui_menu *menu, void *selected_itemref); + + + +/* ----- menu stack management ----- */ + +/* reset the menus, clearing everything */ +void ui_menu_stack_reset(running_machine &machine); + +/* push a new menu onto the stack */ +void ui_menu_stack_push(ui_menu *menu); + +/* pop a menu from the stack */ +void ui_menu_stack_pop(running_machine &machine); + + + +/* ----- UI system interaction ----- */ + +/* master handler */ +UINT32 ui_menu_ui_handler(running_machine &machine, render_container *container, UINT32 state); + +/* slider handler */ +UINT32 ui_slider_ui_handler(running_machine &machine, render_container *container, UINT32 state); + +/* force game select menu */ +void ui_menu_force_game_select(running_machine &machine, render_container *container); +int ui_menu_is_force_game_select(void); + + +#endif /* __UIMENU_H__ */ |