diff options
author | 2019-11-16 02:21:45 +1100 | |
---|---|---|
committer | 2019-11-16 02:21:45 +1100 | |
commit | 85eeea5d57762ad516a9be394bd167920b142ab0 (patch) | |
tree | 19bd7d5de466d34e1e0c6f64acd0fe10a0d3be2f /src/frontend/mame/ui/inputmap.cpp | |
parent | 35f40a8200ec3c27351f0ff9f8f8721361c16dff (diff) |
Display emulated analog input values on the anaolg controls menu screen
Diffstat (limited to 'src/frontend/mame/ui/inputmap.cpp')
-rw-r--r-- | src/frontend/mame/ui/inputmap.cpp | 196 |
1 files changed, 2 insertions, 194 deletions
diff --git a/src/frontend/mame/ui/inputmap.cpp b/src/frontend/mame/ui/inputmap.cpp index eb90215520e..cc91e92766e 100644 --- a/src/frontend/mame/ui/inputmap.cpp +++ b/src/frontend/mame/ui/inputmap.cpp @@ -9,16 +9,16 @@ *********************************************************************/ #include "emu.h" +#include "ui/inputmap.h" #include "uiinput.h" #include "ui/ui.h" -#include "ui/menu.h" -#include "ui/inputmap.h" #include <algorithm> namespace ui { + /*************************************************************************** CONSTANTS ***************************************************************************/ @@ -740,196 +740,4 @@ void menu_settings_dip_switches::custom_render_one(float x1, float y1, float x2, } } - -/*------------------------------------------------- - menu_analog - handle the analog settings menu --------------------------------------------------*/ - -void menu_analog::handle() -{ - /* process the menu */ - const event *menu_event = process(PROCESS_LR_REPEAT); - - /* handle events */ - if (menu_event != nullptr && menu_event->itemref != nullptr) - { - analog_item_data *data = (analog_item_data *)menu_event->itemref; - int newval = data->cur; - - switch (menu_event->iptkey) - { - /* if selected, reset to default value */ - case IPT_UI_SELECT: - newval = data->defvalue; - break; - - /* left decrements */ - case IPT_UI_LEFT: - newval -= machine().input().code_pressed(KEYCODE_LSHIFT) ? 10 : 1; - break; - - /* right increments */ - case IPT_UI_RIGHT: - newval += machine().input().code_pressed(KEYCODE_LSHIFT) ? 10 : 1; - break; - } - - /* clamp to range */ - if (newval < data->min) - newval = data->min; - if (newval > data->max) - newval = data->max; - - /* if things changed, update */ - if (newval != data->cur) - { - ioport_field::user_settings settings; - - /* get the settings and set the new value */ - data->field->get_user_settings(settings); - switch (data->type) - { - case ANALOG_ITEM_KEYSPEED: settings.delta = newval; break; - case ANALOG_ITEM_CENTERSPEED: settings.centerdelta = newval; break; - case ANALOG_ITEM_REVERSE: settings.reverse = newval; break; - case ANALOG_ITEM_SENSITIVITY: settings.sensitivity = newval; break; - } - data->field->set_user_settings(settings); - - /* rebuild the menu */ - reset(reset_options::REMEMBER_POSITION); - } - } -} - - -/*------------------------------------------------- - menu_analog_populate - populate the analog - settings menu --------------------------------------------------*/ - -menu_analog::menu_analog(mame_ui_manager &mui, render_container &container) : menu(mui, container) -{ -} - -void menu_analog::populate(float &customtop, float &custombottom) -{ - std::string prev_owner; - bool first_entry = true; - - /* loop over input ports and add the items */ - for (auto &port : machine().ioport().ports()) - for (ioport_field &field : port.second->fields()) - if (field.is_analog() && field.enabled()) - { - ioport_field::user_settings settings; - int use_autocenter = false; - int type; - - /* based on the type, determine if we enable autocenter */ - switch (field.type()) - { - case IPT_POSITIONAL: - case IPT_POSITIONAL_V: - if (field.analog_wraps()) - break; - - case IPT_AD_STICK_X: - case IPT_AD_STICK_Y: - case IPT_AD_STICK_Z: - case IPT_PADDLE: - case IPT_PADDLE_V: - case IPT_PEDAL: - case IPT_PEDAL2: - case IPT_PEDAL3: - use_autocenter = true; - break; - - default: - break; - } - - /* get the user settings */ - field.get_user_settings(settings); - - /* iterate over types */ - for (type = 0; type < ANALOG_ITEM_COUNT; type++) - if (type != ANALOG_ITEM_CENTERSPEED || use_autocenter) - { - analog_item_data *data; - uint32_t flags = 0; - std::string text; - std::string subtext; - if (strcmp(field.device().tag(), prev_owner.c_str()) != 0) - { - if (first_entry) - first_entry = false; - else - item_append(menu_item_type::SEPARATOR); - item_append(string_format("[root%s]", field.device().tag()), "", 0, nullptr); - prev_owner.assign(field.device().tag()); - } - - /* allocate a data item for tracking what this menu item refers to */ - data = (analog_item_data *)m_pool_alloc(sizeof(*data)); - data->field = &field; - data->type = type; - - /* determine the properties of this item */ - switch (type) - { - default: - case ANALOG_ITEM_KEYSPEED: - text = string_format("%s Digital Speed", field.name()); - subtext = string_format("%d", settings.delta); - data->min = 0; - data->max = 255; - data->cur = settings.delta; - data->defvalue = field.delta(); - break; - - case ANALOG_ITEM_CENTERSPEED: - text = string_format("%s Autocenter Speed", field.name()); - subtext = string_format("%d", settings.centerdelta); - data->min = 0; - data->max = 255; - data->cur = settings.centerdelta; - data->defvalue = field.centerdelta(); - break; - - case ANALOG_ITEM_REVERSE: - text = string_format("%s Reverse", field.name()); - subtext.assign(settings.reverse ? "On" : "Off"); - data->min = 0; - data->max = 1; - data->cur = settings.reverse; - data->defvalue = field.analog_reverse(); - break; - - case ANALOG_ITEM_SENSITIVITY: - text = string_format("%s Sensitivity", field.name()); - subtext = string_format("%d", settings.sensitivity); - data->min = 1; - data->max = 255; - data->cur = settings.sensitivity; - data->defvalue = field.sensitivity(); - break; - } - - /* put on arrows */ - if (data->cur > data->min) - flags |= FLAG_LEFT_ARROW; - if (data->cur < data->max) - flags |= FLAG_RIGHT_ARROW; - - /* append a menu item */ - item_append(std::move(text), std::move(subtext), flags, data); - } - } -} - -menu_analog::~menu_analog() -{ -} - } // namespace ui |