summaryrefslogtreecommitdiffstatshomepage
path: root/src/frontend/mame/ui/menu.cpp
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2016-07-09 01:06:33 +1000
committer Vas Crabb <vas@vastheman.com>2016-07-09 01:07:10 +1000
commit7738284b0e6a3b4e5ee066fb5b93f0c7ef77db25 (patch)
tree2aaca94890afa65ef803db8c7f71e5a185ba1646 /src/frontend/mame/ui/menu.cpp
parent45de5e113eefa03e583d97ec2095a48d2a791f62 (diff)
another baby step untangling the menu code
Diffstat (limited to 'src/frontend/mame/ui/menu.cpp')
-rw-r--r--src/frontend/mame/ui/menu.cpp61
1 files changed, 27 insertions, 34 deletions
diff --git a/src/frontend/mame/ui/menu.cpp b/src/frontend/mame/ui/menu.cpp
index 80895713ba2..623511ae50c 100644
--- a/src/frontend/mame/ui/menu.cpp
+++ b/src/frontend/mame/ui/menu.cpp
@@ -211,6 +211,8 @@ menu::menu(mame_ui_manager &mui, render_container *_container)
, m_event()
, m_pool(nullptr)
, m_focus(focused_menu::main)
+ , m_resetpos(0)
+ , m_resetref(nullptr)
{
container = _container;
@@ -244,12 +246,12 @@ menu::~menu()
void menu::reset(reset_options options)
{
// based on the reset option, set the reset info
- resetpos = 0;
- resetref = nullptr;
+ m_resetpos = 0;
+ m_resetref = nullptr;
if (options == reset_options::REMEMBER_POSITION)
- resetpos = selected;
+ m_resetpos = selected;
else if (options == reset_options::REMEMBER_REF)
- resetref = item[selected].ref;
+ m_resetref = get_selection_ref();
// reset all the pools and the item.size() back to 0
for (pool *ppool = m_pool; ppool != nullptr; ppool = ppool->next)
@@ -368,9 +370,9 @@ void menu::item_append(std::string &&text, std::string &&subtext, UINT32 flags,
item.emplace_back(std::move(pitem));
// update the selection if we need to
- if (resetpos == index || (resetref != nullptr && resetref == ref))
+ if (m_resetpos == index || (m_resetref != nullptr && m_resetref == ref))
selected = index;
- if (resetpos == item.size() - 1)
+ if (m_resetpos == (item.size() - 1))
selected = item.size() - 1;
}
@@ -420,7 +422,7 @@ const menu::event *menu::process(UINT32 flags, float x0, float y0)
}
// update the selected item in the event
- if (m_event.iptkey != IPT_INVALID && selected >= 0 && selected < item.size())
+ if ((m_event.iptkey != IPT_INVALID) && selection_valid())
{
m_event.itemref = item[selected].ref;
m_event.type = item[selected].type;
@@ -463,17 +465,6 @@ void *menu::m_pool_alloc(size_t size)
//-------------------------------------------------
-// get_selection - retrieves the index
-// of the currently selected menu item
-//-------------------------------------------------
-
-void *menu::get_selection()
-{
- return (selected >= 0 && selected < item.size()) ? item[selected].ref : nullptr;
-}
-
-
-//-------------------------------------------------
// set_selection - changes the index
// of the currently selected menu item
//-------------------------------------------------
@@ -482,11 +473,13 @@ void menu::set_selection(void *selected_itemref)
{
selected = -1;
for (int itemnum = 0; itemnum < item.size(); itemnum++)
+ {
if (item[itemnum].ref == selected_itemref)
{
selected = itemnum;
break;
}
+ }
}
@@ -570,7 +563,7 @@ void menu::draw(UINT32 flags, float origx0, float origy0)
if (!customonly)
ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR);
- if (top_line < 0 || selected == 0)
+ if (top_line < 0 || is_first_selected())
top_line = 0;
if (selected >= (top_line + visible_lines))
top_line = selected - (visible_lines / 2);
@@ -778,7 +771,7 @@ void menu::draw(UINT32 flags, float origx0, float origy0)
}
// if there is something special to add, do it by calling the virtual method
- custom_render((selected >= 0 && selected < item.size()) ? item[selected].ref : nullptr, customtop, custombottom, x1, y1, x2, y2);
+ custom_render(get_selection_ref(), customtop, custombottom, x1, y1, x2, y2);
}
void menu::custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2)
@@ -907,7 +900,7 @@ void menu::handle_events(UINT32 flags)
{
selected = hover;
m_event.iptkey = IPT_UI_SELECT;
- if (selected == item.size() - 1)
+ if (is_last_selected())
{
m_event.iptkey = IPT_UI_CANCEL;
menu::stack_pop(machine());
@@ -927,7 +920,7 @@ void menu::handle_events(UINT32 flags)
top_line -= local_menu_event.num_lines;
return;
}
- (selected == 0) ? selected = top_line = item.size() - 1 : selected -= local_menu_event.num_lines;
+ is_first_selected() ? selected = top_line = item.size() - 1 : selected -= local_menu_event.num_lines;
validate_selection(-1);
top_line -= (selected <= top_line && top_line != 0);
if (selected <= top_line && visitems != visible_lines)
@@ -940,7 +933,7 @@ void menu::handle_events(UINT32 flags)
top_line += local_menu_event.num_lines;
return;
}
- (selected == item.size() - 1) ? selected = top_line = 0 : selected += local_menu_event.num_lines;
+ is_last_selected() ? selected = top_line = 0 : selected += local_menu_event.num_lines;
validate_selection(1);
top_line += (selected >= top_line + visitems + (top_line != 0));
if (selected >= (top_line + visitems + (top_line != 0)))
@@ -981,7 +974,7 @@ void menu::handle_keys(UINT32 flags)
// if we hit select, return TRUE or pop the stack, depending on the item
if (exclusive_input_pressed(IPT_UI_SELECT, 0))
{
- if (selected == item.size() - 1)
+ if (is_last_selected())
{
m_event.iptkey = IPT_UI_CANCEL;
menu::stack_pop(machine());
@@ -1025,7 +1018,7 @@ void menu::handle_keys(UINT32 flags)
top_line--;
return;
}
- (selected == 0) ? selected = top_line = item.size() - 1 : --selected;
+ is_first_selected() ? selected = top_line = item.size() - 1 : --selected;
validate_selection(-1);
top_line -= (selected <= top_line && top_line != 0);
if (selected <= top_line && visitems != visible_lines)
@@ -1040,7 +1033,7 @@ void menu::handle_keys(UINT32 flags)
top_line++;
return;
}
- (selected == item.size() - 1) ? selected = top_line = 0 : ++selected;
+ is_last_selected() ? selected = top_line = 0 : ++selected;
validate_selection(1);
top_line += (selected >= top_line + visitems + (top_line != 0));
if (selected >= (top_line + visitems + (top_line != 0)))
@@ -1484,7 +1477,7 @@ void menu::draw_select_game(UINT32 flags)
if (visible_items < visible_lines)
visible_lines = visible_items;
- if (top_line < 0 || selected == 0)
+ if (top_line < 0 || is_first_selected())
top_line = 0;
if (selected < visible_items && top_line + visible_lines >= visible_items)
top_line = visible_items - visible_lines;
@@ -1633,13 +1626,13 @@ void menu::draw_select_game(UINT32 flags)
x1 = x2;
x2 += right_panel_size;
- draw_right_panel((selected >= 0 && selected < item.size()) ? item[selected].ref : nullptr, x1, y1, x2, y2);
+ draw_right_panel(get_selection_ref(), x1, y1, x2, y2);
x1 = primary_left - UI_BOX_LR_BORDER;
x2 = primary_left + primary_width + UI_BOX_LR_BORDER;
// if there is something special to add, do it by calling the virtual method
- custom_render((selected >= 0 && selected < item.size()) ? item[selected].ref : nullptr, customtop, custombottom, x1, y1, x2, y2);
+ custom_render(get_selection_ref(), customtop, custombottom, x1, y1, x2, y2);
// return the number of visible lines, minus 1 for top arrow and 1 for bottom arrow
visitems = visible_lines - (top_line != 0) - (top_line + visible_lines != visible_items);
@@ -1711,7 +1704,7 @@ void menu::handle_main_keys(UINT32 flags)
// if we hit select, return TRUE or pop the stack, depending on the item
if (exclusive_input_pressed(IPT_UI_SELECT, 0))
{
- if (selected == item.size() - 1 && m_focus == focused_menu::main)
+ if (is_last_selected() && m_focus == focused_menu::main)
{
m_event.iptkey = IPT_UI_CANCEL;
menu::stack_pop(machine());
@@ -1771,7 +1764,7 @@ void menu::handle_main_keys(UINT32 flags)
return;
}
- if (selected == visible_items + 1 || selected == 0 || ui_error)
+ if (selected == visible_items + 1 || is_first_selected() || ui_error)
return;
selected--;
@@ -1798,7 +1791,7 @@ void menu::handle_main_keys(UINT32 flags)
return;
}
- if (selected == item.size() - 1 || selected == visible_items - 1 || ui_error)
+ if (is_last_selected() || selected == visible_items - 1 || ui_error)
return;
selected++;
@@ -2744,7 +2737,7 @@ void menu::draw_palette_menu()
}
// if there is something special to add, do it by calling the virtual method
- custom_render((selected >= 0 && selected < item.size()) ? item[selected].ref : nullptr, customtop, custombottom, x1, y1, x2, y2);
+ custom_render(get_selection_ref(), customtop, custombottom, x1, y1, x2, y2);
// return the number of visible lines, minus 1 for top arrow and 1 for bottom arrow
visitems = visible_lines - (top_line != 0) - (top_line + visible_lines != item.size());
@@ -2890,7 +2883,7 @@ void menu::draw_dats_menu()
}
// if there is something special to add, do it by calling the virtual method
- custom_render((selected >= 0 && selected < item.size()) ? item[selected].ref : nullptr, customtop, custombottom, x1, y1, x2, y2);
+ custom_render(get_selection_ref(), customtop, custombottom, x1, y1, x2, y2);
// return the number of visible lines, minus 1 for top arrow and 1 for bottom arrow
visitems = visible_lines - (top_line != 0) - (top_line + visible_lines != visible_items);