diff options
Diffstat (limited to 'src/frontend/mame/ui/inputopts.cpp')
-rw-r--r-- | src/frontend/mame/ui/inputopts.cpp | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/src/frontend/mame/ui/inputopts.cpp b/src/frontend/mame/ui/inputopts.cpp new file mode 100644 index 00000000000..6884574c6a5 --- /dev/null +++ b/src/frontend/mame/ui/inputopts.cpp @@ -0,0 +1,141 @@ +// license:BSD-3-Clause +// copyright-holders:Vas Crabb +/*************************************************************************** + + ui/inputopts.cpp + + Input options submenu. + +***************************************************************************/ + +#include "emu.h" +#include "ui/inputopts.h" + +#include "ui/analogipt.h" +#include "ui/inputdevices.h" +#include "ui/inputmap.h" +#include "ui/inputtoggle.h" +#include "ui/keyboard.h" + +#include "natkeyboard.h" + + +namespace ui { + +namespace { + +enum : unsigned +{ + INPUTMAP_GENERAL = 1, + INPUTMAP_MACHINE, + ANALOG, + KEYBOARD, + TOGGLES, + INPUTDEV +}; + + +void scan_inputs(running_machine &machine, bool &inputmap, bool &analog, bool &toggle) +{ + inputmap = analog = toggle = false; + for (auto &port : machine.ioport().ports()) + { + for (ioport_field &field : port.second->fields()) + { + if (field.enabled()) + { + switch (field.type_class()) + { + case INPUT_CLASS_CONTROLLER: + case INPUT_CLASS_MISC: + case INPUT_CLASS_KEYBOARD: + inputmap = true; + if (field.live().toggle) + toggle = true; + break; + default: + break; + } + if (field.is_analog()) + analog = true; + + if (inputmap && analog && toggle) + return; + } + } + } +} + +} // anonymous namespace + + +menu_input_options::menu_input_options(mame_ui_manager &mui, render_container &container) + : menu(mui, container) +{ + set_heading(_("menu-inputopts", "Input Settings")); +} + + +menu_input_options::~menu_input_options() +{ +} + + +void menu_input_options::menu_activated() +{ + reset(reset_options::REMEMBER_REF); +} + + +void menu_input_options::populate(float &customtop, float &custombottom) +{ + bool inputmap, analog, toggle; + scan_inputs(machine(), inputmap, analog, toggle); + + item_append(_("menu-inputopts", "Input Assignments (general)"), 0, (void *)INPUTMAP_GENERAL); + if (inputmap) + item_append(_("menu-inputopts", "Input Assignments (this system)"), 0, (void *)INPUTMAP_MACHINE); + if (analog) + item_append(_("menu-inputopts", "Analog Input Adjustments"), 0, (void *)ANALOG); + if (machine().natkeyboard().keyboard_count()) + item_append(_("menu-inputopts", "Keyboard Selection"), 0, (void *)KEYBOARD); + if (toggle) + item_append(_("menu-inputopts", "Toggle Inputs"), 0, (void *)TOGGLES); + + item_append(menu_item_type::SEPARATOR); + + item_append(_("menu-inputopts", "Input Devices"), 0, (void *)INPUTDEV); + + item_append(menu_item_type::SEPARATOR); +} + + +void menu_input_options::handle(event const *ev) +{ + if (ev && (IPT_UI_SELECT == ev->iptkey)) + { + switch (uintptr_t(ev->itemref)) + { + case INPUTMAP_GENERAL: + stack_push<menu_input_groups>(ui(), container()); + break; + case INPUTMAP_MACHINE: + stack_push<menu_input_specific>(ui(), container()); + break; + case ANALOG: + stack_push<menu_analog>(ui(), container()); + break; + case KEYBOARD: + stack_push<menu_keyboard_mode>(ui(), container()); + break; + case TOGGLES: + stack_push<menu_input_toggles>(ui(), container()); + break; + case INPUTDEV: + stack_push<menu_input_devices>(ui(), container()); + break; + } + } +} + +} // namespace ui |