From 6ec89fa78b39722dfa91f0690180154e178a2283 Mon Sep 17 00:00:00 2001 From: wolfreak99 Date: Tue, 25 Jul 2017 07:25:31 -0400 Subject: [PATCH] Implement dropdown/spinner combo for changing ride type --- distribution/changelog.txt | 1 + src/openrct2/windows/ride.c | 36 ++++++++++++++++++++++++++++++++++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 9f68bd7129..71ba2f9966 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -20,6 +20,7 @@ - Improved: [#5863] Switching drawing engines no longer requires the application to restart. - Improved: The land tool buttons can now be held down to increase/decrease size. - Improved: Dropdowns longer than 32 items overflow into columns. +- Improved: Ride Type option in ride window is now a dropdown. 0.1.0 (2017-07-12) ------------------------------------------------------------------------ diff --git a/src/openrct2/windows/ride.c b/src/openrct2/windows/ride.c index b1e44174d1..a87c5513b2 100644 --- a/src/openrct2/windows/ride.c +++ b/src/openrct2/windows/ride.c @@ -492,7 +492,8 @@ const uint64 window_ride_page_enabled_widgets[] = { }; const uint64 window_ride_page_hold_down_widgets[] = { - 0, + (1ULL << WIDX_RIDE_TYPE_INCREASE) | + (1ULL << WIDX_RIDE_TYPE_DECREASE), (1ULL << WIDX_VEHICLE_TRAINS_INCREASE) | (1ULL << WIDX_VEHICLE_TRAINS_DECREASE) | (1ULL << WIDX_VEHICLE_CARS_PER_TRAIN_INCREASE) | @@ -2132,6 +2133,29 @@ static void window_ride_show_open_dropdown(rct_window *w, rct_widget *widget) gDropdownDefaultIndex = highlightedIndex; } +static void window_ride_show_ride_type_dropdown(rct_window *w, rct_widget *widget) +{ + assert(_rideType == clamp(0, _rideType, RIDE_TYPE_COUNT)); + + for (sint32 i = 0; i < RIDE_TYPE_COUNT; i++) { + gDropdownItemsFormat[i] = STR_DROPDOWN_MENU_LABEL; + gDropdownItemsArgs[i] = RideNaming[i].name; + } + + window_dropdown_show_text( + w->x + widget->left, + w->y + widget->top, + widget->bottom - widget->top + 1, + w->colours[1], + DROPDOWN_FLAG_STAY_OPEN, + RIDE_TYPE_COUNT + ); + + gDropdownHighlightedIndex = _rideType; + gDropdownDefaultIndex = _rideType; + dropdown_set_checked(_rideType, true); +} + /** * * rct2: 0x006AF1BD @@ -2145,12 +2169,15 @@ static void window_ride_main_mousedown(rct_window *w, rct_widgetindex widgetInde case WIDX_OPEN: window_ride_show_open_dropdown(w, widget); break; + case WIDX_RIDE_TYPE: + window_ride_show_ride_type_dropdown(w, widget); + break; case WIDX_RIDE_TYPE_INCREASE: _rideType = min(RIDE_TYPE_COUNT - 1, _rideType + 1); widget_invalidate(w, WIDX_RIDE_TYPE); break; case WIDX_RIDE_TYPE_DECREASE: - _rideType = max(0, _rideType -1); + _rideType = max(0, _rideType - 1); widget_invalidate(w, WIDX_RIDE_TYPE); break; case WIDX_RIDE_TYPE_APPLY: @@ -2216,6 +2243,11 @@ static void window_ride_main_dropdown(rct_window *w, rct_widgetindex widgetIndex set_format_arg(8, uint32, ride->name_arguments); ride_set_status(w->number, status); break; + case WIDX_RIDE_TYPE: + if (dropdownIndex != -1 && dropdownIndex < RIDE_TYPE_COUNT) { + _rideType = clamp(0, dropdownIndex, RIDE_TYPE_COUNT - 1); + widget_invalidate(w, WIDX_RIDE_TYPE); + } } }