diff options
Diffstat (limited to 'src/frontend/mame/ui/confswitch.cpp')
-rw-r--r-- | src/frontend/mame/ui/confswitch.cpp | 155 |
1 files changed, 79 insertions, 76 deletions
diff --git a/src/frontend/mame/ui/confswitch.cpp b/src/frontend/mame/ui/confswitch.cpp index 7d6030ce669..946062b9a1d 100644 --- a/src/frontend/mame/ui/confswitch.cpp +++ b/src/frontend/mame/ui/confswitch.cpp @@ -171,103 +171,106 @@ void menu_confswitch::populate() } -void menu_confswitch::handle(event const *ev) +bool menu_confswitch::handle(event const *ev) { - // handle events - if (ev && ev->itemref) + if (!ev || !ev->itemref) + return false; + + if (uintptr_t(ev->itemref) == 1U) { - if (uintptr_t(ev->itemref) == 1U) - { - // reset - if (ev->iptkey == IPT_UI_SELECT) - machine().schedule_hard_reset(); - } - else - { - // actual settings - ioport_field &field(*reinterpret_cast<ioport_field *>(ev->itemref)); - bool changed(false); + // reset + if (ev->iptkey == IPT_UI_SELECT) + machine().schedule_hard_reset(); + } + else + { + // actual settings + ioport_field &field(*reinterpret_cast<ioport_field *>(ev->itemref)); + bool changed(false); - switch (ev->iptkey) + switch (ev->iptkey) + { + // left goes to previous setting + case IPT_UI_LEFT: + field.select_previous_setting(); + changed = true; + break; + + // right goes to next setting + case IPT_UI_SELECT: + case IPT_UI_RIGHT: + field.select_next_setting(); + changed = true; + break; + + // if cleared, reset to default value + case IPT_UI_CLEAR: { - // left goes to previous setting - case IPT_UI_LEFT: - field.select_previous_setting(); - changed = true; - break; - - // right goes to next setting - case IPT_UI_SELECT: - case IPT_UI_RIGHT: - field.select_next_setting(); - changed = true; - break; - - // if cleared, reset to default value - case IPT_UI_CLEAR: + ioport_field::user_settings settings; + field.get_user_settings(settings); + if (field.defvalue() != settings.value) { - ioport_field::user_settings settings; - field.get_user_settings(settings); - if (field.defvalue() != settings.value) - { - settings.value = field.defvalue(); - field.set_user_settings(settings); - changed = true; - } + settings.value = field.defvalue(); + field.set_user_settings(settings); + changed = true; } - break; + } + break; - // trick to get previous group - depend on headings having null reference - case IPT_UI_PREV_GROUP: + // trick to get previous group - depend on headings having null reference + case IPT_UI_PREV_GROUP: + { + auto current = selected_index(); + bool found_break = false; + while (0 < current) { - auto current = selected_index(); - bool found_break = false; - while (0 < current) + if (!found_break) { - if (!found_break) - { - if (!item(--current).ref()) - found_break = true; - } - else if (!item(current - 1).ref()) - { - set_selected_index(current); - set_top_line(current - 1); - break; - } - else - { - --current; - } + if (!item(--current).ref()) + found_break = true; + } + else if (!item(current - 1).ref()) + { + set_selected_index(current); + set_top_line(current - 1); + return true; + } + else + { + --current; } } - break; + } + break; - // trick to get next group - depend on special item references - case IPT_UI_NEXT_GROUP: + // trick to get next group - depend on special item references + case IPT_UI_NEXT_GROUP: + { + auto current = selected_index(); + while (item_count() > ++current) { - auto current = selected_index(); - while (item_count() > ++current) + if (!item(current).ref()) { - if (!item(current).ref()) + if ((item_count() > (current + 1)) && (uintptr_t(item(current + 1).ref()) != 1)) { - if ((item_count() > (current + 1)) && (uintptr_t(item(current + 1).ref()) != 1)) - { - set_selected_index(current + 1); - set_top_line(current); - } - break; + set_selected_index(current + 1); + set_top_line(current); + return true; } + break; } } - break; } - - // if anything changed, rebuild the menu, trying to stay on the same field - if (changed) - reset(reset_options::REMEMBER_REF); + break; } + + // if anything changed, rebuild the menu, trying to stay on the same field + if (changed) + reset(reset_options::REMEMBER_REF); } + + // changing settings triggers an item rebuild because it can affect whether things are enabled + return false; } |