summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/ui/sliders.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/ui/sliders.cpp')
-rw-r--r--src/emu/ui/sliders.cpp62
1 files changed, 41 insertions, 21 deletions
diff --git a/src/emu/ui/sliders.cpp b/src/emu/ui/sliders.cpp
index 87508df3dd0..20cb435233a 100644
--- a/src/emu/ui/sliders.cpp
+++ b/src/emu/ui/sliders.cpp
@@ -39,10 +39,10 @@ void ui_menu_sliders::handle()
if (menu_event != nullptr)
{
/* handle keys if there is a valid item selected */
- if (menu_event->itemref != nullptr)
+ if (menu_event->itemref != nullptr && menu_event->type == ui_menu_item_type::UI_MENU_ITEM_TYPE_SLIDER)
{
const slider_state *slider = (const slider_state *)menu_event->itemref;
- INT32 curvalue = (*slider->update)(machine(), slider->arg, nullptr, SLIDER_NOCHANGE);
+ INT32 curvalue = (*slider->update)(machine(), slider->arg, slider->id, nullptr, SLIDER_NOCHANGE);
INT32 increment = 0;
bool alt_pressed = machine().input().code_pressed(KEYCODE_LALT) || machine().input().code_pressed(KEYCODE_RALT);
bool ctrl_pressed = machine().input().code_pressed(KEYCODE_LCONTROL) || machine().input().code_pressed(KEYCODE_RCONTROL);
@@ -104,7 +104,7 @@ void ui_menu_sliders::handle()
newvalue = slider->maxval;
/* update the slider and recompute the menu */
- (*slider->update)(machine(), slider->arg, nullptr, newvalue);
+ (*slider->update)(machine(), slider->arg, slider->id, nullptr, newvalue);
reset(UI_MENU_RESET_REMEMBER_REF);
}
}
@@ -140,27 +140,47 @@ void ui_menu_sliders::populate()
std::string tempstring;
/* add UI sliders */
- for (const slider_state *curslider = machine().ui().get_slider_list(); curslider != nullptr; curslider = curslider->next)
+ std::vector<ui_menu_item> ui_sliders = machine().ui().get_slider_list();
+ for (ui_menu_item item : ui_sliders)
{
- INT32 curval = (*curslider->update)(machine(), curslider->arg, &tempstring, SLIDER_NOCHANGE);
- UINT32 flags = 0;
- if (curval > curslider->minval)
- flags |= MENU_FLAG_LEFT_ARROW;
- if (curval < curslider->maxval)
- flags |= MENU_FLAG_RIGHT_ARROW;
- item_append(curslider->description, tempstring.c_str(), flags, (void *)curslider);
+ if (item.type == ui_menu_item_type::UI_MENU_ITEM_TYPE_SLIDER)
+ {
+ slider_state* slider = reinterpret_cast<slider_state *>(item.ref);
+ INT32 curval = (*slider->update)(machine(), slider->arg, slider->id, &tempstring, SLIDER_NOCHANGE);
+ UINT32 flags = 0;
+ if (curval > slider->minval)
+ flags |= MENU_FLAG_LEFT_ARROW;
+ if (curval < slider->maxval)
+ flags |= MENU_FLAG_RIGHT_ARROW;
+ item_append(slider->description, tempstring.c_str(), flags, (void *)slider, ui_menu_item_type::UI_MENU_ITEM_TYPE_SLIDER);
+ }
+ else
+ {
+ item_append(item);
+ }
}
- /* add OSD sliders */
- for (const slider_state *curslider = (slider_state*)machine().osd().get_slider_list(); curslider != nullptr; curslider = curslider->next)
+ item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
+
+ /* add OSD options */
+ std::vector<ui_menu_item> osd_sliders = machine().osd().get_slider_list();
+ for (ui_menu_item item : osd_sliders)
{
- INT32 curval = (*curslider->update)(machine(), curslider->arg, &tempstring, SLIDER_NOCHANGE);
- UINT32 flags = 0;
- if (curval > curslider->minval)
- flags |= MENU_FLAG_LEFT_ARROW;
- if (curval < curslider->maxval)
- flags |= MENU_FLAG_RIGHT_ARROW;
- item_append(curslider->description, tempstring.c_str(), flags, (void *)curslider);
+ if (item.type == ui_menu_item_type::UI_MENU_ITEM_TYPE_SLIDER)
+ {
+ slider_state* slider = reinterpret_cast<slider_state *>(item.ref);
+ INT32 curval = (*slider->update)(machine(), slider->arg, slider->id, &tempstring, SLIDER_NOCHANGE);
+ UINT32 flags = 0;
+ if (curval > slider->minval)
+ flags |= MENU_FLAG_LEFT_ARROW;
+ if (curval < slider->maxval)
+ flags |= MENU_FLAG_RIGHT_ARROW;
+ item_append(slider->description, tempstring.c_str(), flags, (void *)slider, ui_menu_item_type::UI_MENU_ITEM_TYPE_SLIDER);
+ }
+ else
+ {
+ item_append(item);
+ }
}
custombottom = 2.0f * machine().ui().get_line_height() + 2.0f * UI_BOX_TB_BORDER;
@@ -184,7 +204,7 @@ void ui_menu_sliders::custom_render(void *selectedref, float top, float bottom,
INT32 curval;
/* determine the current value and text */
- curval = (*curslider->update)(machine(), curslider->arg, &tempstring, SLIDER_NOCHANGE);
+ curval = (*curslider->update)(machine(), curslider->arg, curslider->id, &tempstring, SLIDER_NOCHANGE);
/* compute the current and default percentages */
percentage = (float)(curval - curslider->minval) / (float)(curslider->maxval - curslider->minval);