a bit of prep for making selected index private (nw)

This commit is contained in:
Vas Crabb 2016-11-23 13:31:33 +11:00
parent 95254fb277
commit 57d7d67812
6 changed files with 37 additions and 32 deletions

View File

@ -485,7 +485,7 @@ void menu_colors_ui::handle()
if (menu_event != nullptr && menu_event->itemref != nullptr && menu_event->iptkey == IPT_UI_SELECT)
{
if ((uintptr_t)menu_event->itemref != MUI_RESTORE)
menu::stack_push<menu_rgb_ui>(ui(), container(), &m_color_table[(uintptr_t)menu_event->itemref].color, item[selected].text);
menu::stack_push<menu_rgb_ui>(ui(), container(), &m_color_table[(uintptr_t)menu_event->itemref].color, selected_item().text);
else
{
changed = true;
@ -1024,7 +1024,7 @@ void menu_palette_sel::handle()
{
if (menu_event->iptkey == IPT_UI_SELECT)
{
m_original = rgb_t((uint32_t)strtoul(item[selected].subtext.c_str(), nullptr, 16));
m_original = rgb_t(uint32_t(strtoul(selected_item().subtext.c_str(), nullptr, 16)));
reset_parent(reset_options::SELECT_FIRST);
stack_pop();
}
@ -1118,7 +1118,7 @@ void menu_palette_sel::draw(uint32_t flags)
ui().draw_outlined_box(container(), x1, y1, x2, y2, UI_BACKGROUND_COLOR);
// determine the first visible line based on the current selection
int top_line = selected - visible_lines / 2;
int top_line = selected_index() - visible_lines / 2;
if (top_line < 0)
top_line = 0;
if (top_line + visible_lines >= item.size())
@ -1151,7 +1151,7 @@ void menu_palette_sel::draw(uint32_t flags)
rgb_t fgcolor = UI_TEXT_COLOR;
rgb_t bgcolor = UI_TEXT_BG_COLOR;
if (itemnum == selected)
if (is_selected(itemnum))
{
// if we're selected, draw with a different background
fgcolor = UI_SELECTED_COLOR;

View File

@ -91,7 +91,7 @@ void menu_directory::handle()
const event *menu_event = process(0);
if (menu_event != nullptr && menu_event->itemref != nullptr && menu_event->iptkey == IPT_UI_SELECT)
menu::stack_push<menu_display_actual>(ui(), container(), selected);
menu::stack_push<menu_display_actual>(ui(), container(), selected_index());
}
//-------------------------------------------------
@ -391,7 +391,7 @@ void menu_add_change_folder::handle()
// check for entries which matches our search buffer
if (update_selected)
{
const int cur_selected = selected;
const int cur_selected = selected_index();
int entry, bestmatch = 0;
// from current item to the end
@ -583,7 +583,7 @@ void menu_remove_folder::handle()
if (menu_event != nullptr && menu_event->itemref != nullptr && menu_event->iptkey == IPT_UI_SELECT)
{
std::string tmppath, error_string;
m_folders.erase(m_folders.begin() + selected);
m_folders.erase(m_folders.begin() + selected_index());
for (int x = 0; x < m_folders.size(); ++x)
{
tmppath.append(m_folders[x]);

View File

@ -449,7 +449,7 @@ const menu::event *menu::process(uint32_t flags, float x0, float y0)
// update the selected item in the event
if ((m_event.iptkey != IPT_INVALID) && selection_valid())
{
m_event.itemref = item[selected].ref;
m_event.itemref = get_selection_ref();
m_event.type = item[selected].type;
return &m_event;
}
@ -591,7 +591,7 @@ void menu::draw(uint32_t flags)
top_line = 0;
if (selected >= (top_line + m_visible_lines))
top_line = selected - (m_visible_lines / 2);
if ((top_line > (item.size() - m_visible_lines)) || (selected == (item.size() - 1)))
if ((top_line > (item.size() - m_visible_lines)) || is_last_selected())
top_line = item.size() - m_visible_lines;
// if scrolling, show arrows
@ -635,7 +635,7 @@ void menu::draw(uint32_t flags)
hover = itemnum;
// if we're selected, draw with a different background
if (itemnum == selected)
if (is_selected(itemnum))
{
fgcolor = fgcolor2 = fgcolor3 = UI_SELECTED_COLOR;
bgcolor = UI_SELECTED_BG_COLOR;
@ -713,7 +713,7 @@ void menu::draw(uint32_t flags)
if (ui().get_string_width(subitem_text) > effective_width - item_width)
{
subitem_text = "...";
if (itemnum == selected)
if (is_selected(itemnum))
selected_subitem_too_big = true;
}
@ -732,7 +732,7 @@ void menu::draw(uint32_t flags)
ui::text_layout::RIGHT, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, subitem_invert ? fgcolor3 : fgcolor2, bgcolor, &subitem_width, nullptr);
// apply arrows
if (itemnum == selected && (pitem.flags & FLAG_LEFT_ARROW))
if (is_selected(itemnum) && (pitem.flags & FLAG_LEFT_ARROW))
{
draw_arrow(
effective_left + effective_width - subitem_width - gutter_width,
@ -742,7 +742,7 @@ void menu::draw(uint32_t flags)
fgcolor,
ROT90 ^ ORIENTATION_FLIP_X);
}
if (itemnum == selected && (pitem.flags & FLAG_RIGHT_ARROW))
if (is_selected(itemnum) && (pitem.flags & FLAG_RIGHT_ARROW))
{
draw_arrow(
effective_left + effective_width + gutter_width - lr_arrow_width,
@ -759,7 +759,7 @@ void menu::draw(uint32_t flags)
// if the selected subitem is too big, display it in a separate offset box
if (selected_subitem_too_big)
{
menu_item const &pitem = item[selected];
menu_item const &pitem = selected_item();
bool const subitem_invert(pitem.flags & FLAG_INVERT);
auto const linenum = selected - top_line;
float const line_y = visible_top + (float)linenum * line_height;
@ -934,7 +934,7 @@ void menu::handle_events(uint32_t flags, event &ev)
top_line += m_visible_lines - 2;
return;
}
selected += m_visible_lines - 2 + (selected == 0);
selected += m_visible_lines - 2 + is_first_selected();
if (selected > item.size() - 1)
selected = item.size() - 1;
top_line += m_visible_lines - 2;
@ -1046,8 +1046,8 @@ void menu::handle_keys(uint32_t flags, int &iptkey)
validate_selection(1);
// swallow left/right keys if they are not appropriate
bool ignoreleft = ((item[selected].flags & FLAG_LEFT_ARROW) == 0);
bool ignoreright = ((item[selected].flags & FLAG_RIGHT_ARROW) == 0);
bool ignoreleft = ((selected_item().flags & FLAG_LEFT_ARROW) == 0);
bool ignoreright = ((selected_item().flags & FLAG_RIGHT_ARROW) == 0);
if ((item[0].flags & FLAG_UI_DATS))
ignoreleft = ignoreright = false;
@ -1101,7 +1101,7 @@ void menu::handle_keys(uint32_t flags, int &iptkey)
// page down advances by m_visible_items
if (exclusive_input_pressed(iptkey, IPT_UI_PAGE_DOWN, 6))
{
selected += m_visible_lines - 2 + (selected == 0);
selected += m_visible_lines - 2 + is_first_selected();
top_line += m_visible_lines - 2;
if (selected > item.size() - 1)

View File

@ -50,9 +50,6 @@ public:
virtual ~menu();
int hover; // which item is being hovered over
std::vector<menu_item> item; // array of items
// append a new item to the end of the menu
void item_append(const std::string &text, const std::string &subtext, uint32_t flags, void *ref, menu_item_type type = menu_item_type::UNKNOWN);
void item_append(std::string &&text, std::string &&subtext, uint32_t flags, void *ref, menu_item_type type = menu_item_type::UNKNOWN);
@ -131,6 +128,9 @@ protected:
render_bounds mouse; // mouse position if iptkey == IPT_CUSTOM
};
int hover; // which item is being hovered over
std::vector<menu_item> item; // array of items
int top_line; // main box top line
int l_sw_hover;
int l_hover;
@ -170,7 +170,12 @@ protected:
// retrieves the ref of the currently selected menu item or nullptr
void *get_selection_ref() const { return selection_valid() ? item[selected].ref : nullptr; }
menu_item &selected_item() { return item[selected]; }
menu_item const &selected_item() const { return item[selected]; }
int selected_index() const { return selected; }
bool selection_valid() const { return (0 <= selected) && (item.size() > selected); }
bool is_selected(int index) const { return selection_valid() && (selected == index); }
bool is_first_selected() const { return 0 == selected; }
bool is_last_selected() const { return (item.size() - 1) == selected; }
@ -235,7 +240,7 @@ protected:
// get arrows status
template <typename T>
uint32_t get_arrow_flags(T min, T max, T actual)
static uint32_t get_arrow_flags(T min, T max, T actual)
{
return ((actual > min) ? FLAG_LEFT_ARROW : 0) | ((actual < max) ? FLAG_RIGHT_ARROW : 0);
}

View File

@ -184,7 +184,7 @@ void menu_select_game::handle()
// if i have to reselect a software, force software list submenu
if (reselect_last::get())
{
const game_driver *driver = (const game_driver *)item[selected].ref;
const game_driver *const driver = reinterpret_cast<const game_driver *>(get_selection_ref());
menu::stack_push<menu_select_software>(ui(), container(), driver);
return;
}

View File

@ -413,7 +413,7 @@ void menu_select_launch::inkey_navigation()
case focused_menu::main:
if (selected <= visible_items)
{
m_prev_selected = item[selected].ref;
m_prev_selected = get_selection_ref();
selected = visible_items + 1;
}
else
@ -794,8 +794,8 @@ void menu_select_launch::handle_keys(uint32_t flags, int &iptkey)
validate_selection(1);
// swallow left/right keys if they are not appropriate
bool ignoreleft = ((item[selected].flags & FLAG_LEFT_ARROW) == 0);
bool ignoreright = ((item[selected].flags & FLAG_RIGHT_ARROW) == 0);
bool ignoreleft = ((selected_item().flags & FLAG_LEFT_ARROW) == 0);
bool ignoreright = ((selected_item().flags & FLAG_RIGHT_ARROW) == 0);
bool leftclose = (ui_globals::panels_status == HIDE_BOTH || ui_globals::panels_status == HIDE_LEFT_PANEL);
bool rightclose = (ui_globals::panels_status == HIDE_BOTH || ui_globals::panels_status == HIDE_RIGHT_PANEL);
@ -1017,7 +1017,7 @@ void menu_select_launch::handle_events(uint32_t flags, event &ev)
if (hover >= 0 && hover < item.size())
{
if (hover >= visible_items - 1 && selected < visible_items)
m_prev_selected = item[selected].ref;
m_prev_selected = get_selection_ref();
selected = hover;
m_focus = focused_menu::main;
}
@ -1111,7 +1111,7 @@ void menu_select_launch::handle_events(uint32_t flags, event &ev)
ev.iptkey = IPT_UI_SELECT;
}
if (selected == item.size() - 1)
if (is_last_selected())
{
ev.iptkey = IPT_UI_CANCEL;
stack_pop();
@ -1125,7 +1125,7 @@ void menu_select_launch::handle_events(uint32_t flags, event &ev)
{
if (local_menu_event.zdelta > 0)
{
if (selected >= visible_items || selected == 0 || m_ui_error)
if (selected >= visible_items || is_first_selected() || m_ui_error)
break;
selected -= local_menu_event.num_lines;
if (selected < top_line + (top_line != 0))
@ -1163,7 +1163,7 @@ void menu_select_launch::handle_events(uint32_t flags, event &ev)
if (hover >= 0 && hover < item.size() - skip_main_items - 1)
{
selected = hover;
m_prev_selected = item[selected].ref;
m_prev_selected = get_selection_ref();
m_focus = focused_menu::main;
ev.iptkey = IPT_CUSTOM;
ev.mouse.x0 = local_menu_event.mouse_x;
@ -1275,7 +1275,7 @@ void menu_select_launch::draw(uint32_t flags)
hover = itemnum;
// if we're selected, draw with a different background
if (itemnum == selected && m_focus == focused_menu::main)
if (is_selected(itemnum) && m_focus == focused_menu::main)
{
fgcolor = rgb_t(0xff, 0xff, 0x00);
bgcolor = rgb_t(0xff, 0xff, 0xff);
@ -1366,7 +1366,7 @@ void menu_select_launch::draw(uint32_t flags)
hover = count;
// if we're selected, draw with a different background
if (count == selected && m_focus == focused_menu::main)
if (is_selected(count) && m_focus == focused_menu::main)
{
fgcolor = rgb_t(0xff, 0xff, 0x00);
bgcolor = rgb_t(0xff, 0xff, 0xff);