Miscellaneous cleanups to src/emu/ui/menu.?, also added some accessors

This commit is contained in:
Nathan Woods 2014-01-30 15:13:54 +00:00
parent e0b48579cc
commit b3aedc5d7e
3 changed files with 316 additions and 282 deletions

File diff suppressed because it is too large Load Diff

View File

@ -21,7 +21,7 @@
CONSTANTS CONSTANTS
***************************************************************************/ ***************************************************************************/
/* flags for menu items */ // flags for menu items
#define MENU_FLAG_LEFT_ARROW (1 << 0) #define MENU_FLAG_LEFT_ARROW (1 << 0)
#define MENU_FLAG_RIGHT_ARROW (1 << 1) #define MENU_FLAG_RIGHT_ARROW (1 << 1)
#define MENU_FLAG_INVERT (1 << 2) #define MENU_FLAG_INVERT (1 << 2)
@ -29,15 +29,15 @@
#define MENU_FLAG_REDTEXT (1 << 4) #define MENU_FLAG_REDTEXT (1 << 4)
#define MENU_FLAG_DISABLE (1 << 5) #define MENU_FLAG_DISABLE (1 << 5)
/* special menu item for separators */ // special menu item for separators
#define MENU_SEPARATOR_ITEM "---" #define MENU_SEPARATOR_ITEM "---"
/* flags to pass to ui_menu_process */ // flags to pass to ui_menu_process
#define UI_MENU_PROCESS_NOKEYS 1 #define UI_MENU_PROCESS_NOKEYS 1
#define UI_MENU_PROCESS_LR_REPEAT 2 #define UI_MENU_PROCESS_LR_REPEAT 2
#define UI_MENU_PROCESS_CUSTOM_ONLY 4 #define UI_MENU_PROCESS_CUSTOM_ONLY 4
/* options for ui_menu_reset */ // options for ui_menu_reset
enum ui_menu_reset_options enum ui_menu_reset_options
{ {
UI_MENU_RESET_SELECT_FIRST, UI_MENU_RESET_SELECT_FIRST,
@ -51,19 +51,19 @@ enum ui_menu_reset_options
TYPE DEFINITIONS TYPE DEFINITIONS
***************************************************************************/ ***************************************************************************/
/* menu-related events */ // menu-related events
struct ui_menu_event struct ui_menu_event
{ {
void * itemref; /* reference for the selected item */ void * itemref; // reference for the selected item
int iptkey; /* one of the IPT_* values from inptport.h */ int iptkey; // one of the IPT_* values from inptport.h
unicode_char unichar; /* unicode character if iptkey == IPT_SPECIAL */ unicode_char unichar; // unicode character if iptkey == IPT_SPECIAL
}; };
struct ui_menu_pool struct ui_menu_pool
{ {
ui_menu_pool * next; /* chain to next one */ ui_menu_pool * next; // chain to next one
UINT8 * top; /* top of the pool */ UINT8 * top; // top of the pool
UINT8 * end; /* end of the pool */ UINT8 * end; // end of the pool
}; };
@ -86,81 +86,87 @@ public:
running_machine &machine() const { return m_machine; } running_machine &machine() const { return m_machine; }
render_container * container; /* render_container we render to */ render_container * container; // render_container we render to
ui_menu_event menu_event; /* the UI menu_event that occurred */ ui_menu_event menu_event; // the UI menu_event that occurred
ui_menu * parent; /* pointer to parent menu */ ui_menu * parent; // pointer to parent menu
int resetpos; /* reset position */ int resetpos; // reset position
void * resetref; /* reset reference */ void * resetref; // reset reference
int selected; /* which item is selected */ int selected; // which item is selected
int hover; /* which item is being hovered over */ int hover; // which item is being hovered over
int visitems; /* number of visible items */ int visitems; // number of visible items
int numitems; /* number of items in the menu */ int numitems; // number of items in the menu
int allocitems; /* allocated size of array */ int allocitems; // allocated size of array
ui_menu_item * item; /* pointer to array of items */ ui_menu_item * item; // pointer to array of items
float customtop; /* amount of extra height to add at the top */ float customtop; // amount of extra height to add at the top
float custombottom; /* amount of extra height to add at the bottom */ float custombottom; // amount of extra height to add at the bottom
ui_menu_pool * pool; /* list of memory pools */ ui_menu_pool * pool; // list of memory pools
/* free all items in the menu, and all memory allocated from the memory pool */ // free all items in the menu, and all memory allocated from the memory pool
void reset(ui_menu_reset_options options); void reset(ui_menu_reset_options options);
/* returns true if the menu has any non-default items in it */ // returns true if the menu has any non-default items in it
bool populated(); bool populated();
/* append a new item to the end of the menu */ // append a new item to the end of the menu
void item_append(const char *text, const char *subtext, UINT32 flags, void *ref); void item_append(const char *text, const char *subtext, UINT32 flags, void *ref);
/* process a menu, drawing it and returning any interesting events */ // process a menu, drawing it and returning any interesting events
const ui_menu_event *process(UINT32 flags); const ui_menu_event *process(UINT32 flags);
/* configure the menu for custom rendering */ // configure the menu for custom rendering
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2); virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2);
/* allocate temporary memory from the menu's memory pool */ // allocate temporary memory from the menu's memory pool
void *m_pool_alloc(size_t size); void *m_pool_alloc(size_t size);
/* make a temporary string copy in the menu's memory pool */ // make a temporary string copy in the menu's memory pool
const char *pool_strdup(const char *string); const char *pool_strdup(const char *string);
/* retrieves the index of the currently selected menu item */ // retrieves the index of the currently selected menu item
void *get_selection(); void *get_selection();
/* changes the index of the currently selected menu item */ // changes the index of the currently selected menu item
void set_selection(void *selected_itemref); void set_selection(void *selected_itemref);
/* request the specific handling of the game selection main menu */ // request the specific handling of the game selection main menu
bool is_special_main_menu() const; bool is_special_main_menu() const;
void set_special_main_menu(bool disable); void set_special_main_menu(bool disable);
/* Global initialization */ // Global initialization
static void init(running_machine &machine); static void init(running_machine &machine);
static void exit(running_machine &machine); static void exit(running_machine &machine);
/* reset the menus, clearing everything */ // reset the menus, clearing everything
static void stack_reset(running_machine &machine); static void stack_reset(running_machine &machine);
/* push a new menu onto the stack */ // push a new menu onto the stack
static void stack_push(ui_menu *menu); static void stack_push(ui_menu *menu);
/* pop a menu from the stack */ // pop a menu from the stack
static void stack_pop(running_machine &machine); static void stack_pop(running_machine &machine);
/* test if one of the menus in the stack requires hide disable */ // test if one of the menus in the stack requires hide disable
static bool stack_has_special_main_menu(); static bool stack_has_special_main_menu();
/* master handler */ // highlight
static void highlight(render_container *container, float x0, float y0, float x1, float y1, rgb_t bgcolor);
// draw arrow
static void draw_arrow(render_container *container, float x0, float y0, float x1, float y1, rgb_t fgcolor, UINT32 orientation);
// master handler
static UINT32 ui_handler(running_machine &machine, render_container *container, UINT32 state); static UINT32 ui_handler(running_machine &machine, render_container *container, UINT32 state);
/* Used by sliders */ // Used by sliders
void validate_selection(int scandir); void validate_selection(int scandir);
static ui_menu *menu_stack; static ui_menu *menu_stack;
void do_handle(); void do_handle();
/* To be reimplemented in the menu subclass */ // To be reimplemented in the menu subclass
virtual void populate() = 0; virtual void populate() = 0;
/* To be reimplemented in the menu subclass */ // To be reimplemented in the menu subclass
virtual void handle() = 0; virtual void handle() = 0;
private: private:
@ -168,9 +174,8 @@ private:
static bitmap_rgb32 *hilight_bitmap; static bitmap_rgb32 *hilight_bitmap;
static render_texture *hilight_texture, *arrow_texture; static render_texture *hilight_texture, *arrow_texture;
bool special_main_menu; bool m_special_main_menu;
running_machine & m_machine; // machine we are attached to
running_machine & m_machine; /* machine we are attached to */
void draw(bool customonly); void draw(bool customonly);
void draw_text_box(); void draw_text_box();
@ -183,4 +188,4 @@ private:
static void render_triangle(bitmap_argb32 &dest, bitmap_argb32 &source, const rectangle &sbounds, void *param); static void render_triangle(bitmap_argb32 &dest, bitmap_argb32 &source, const rectangle &sbounds, void *param);
}; };
#endif /* __UI_MENU_H__ */ #endif // __UI_MENU_H__

View File

@ -135,7 +135,7 @@ public:
float get_string_width(const char *s); float get_string_width(const char *s);
void draw_outlined_box(render_container *container, float x0, float y0, float x1, float y1, rgb_t backcolor); void draw_outlined_box(render_container *container, float x0, float y0, float x1, float y1, rgb_t backcolor);
void draw_text(render_container *container, const char *buf, float x, float y); void draw_text(render_container *container, const char *buf, float x, float y);
void draw_text_full(render_container *container, const char *origs, float x, float y, float origwrapwidth, int justify, int wrap, int draw, rgb_t fgcolor, rgb_t bgcolor, float *totalwidth, float *totalheight); void draw_text_full(render_container *container, const char *origs, float x, float y, float origwrapwidth, int justify, int wrap, int draw, rgb_t fgcolor, rgb_t bgcolor, float *totalwidth = NULL, float *totalheight = NULL);
void draw_text_box(render_container *container, const char *text, int justify, float xpos, float ypos, rgb_t backcolor); void draw_text_box(render_container *container, const char *text, int justify, float xpos, float ypos, rgb_t backcolor);
void draw_message_window(render_container *container, const char *text); void draw_message_window(render_container *container, const char *text);