mirror of
https://github.com/holub/mame
synced 2025-05-23 22:20:01 +03:00

- all ui functions now expect a render_container - removed all macros referencing render_container_get_ui - ui_menu_alloc now is passed a container to which to render the menu. This is a first round of changes to allow using ui_* functions in a more generic way.
155 lines
4.8 KiB
C
155 lines
4.8 KiB
C
/***************************************************************************
|
|
|
|
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 */
|
|
typedef struct _ui_menu 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__ */
|