From c2b862ee511ebbfb673e14834fdd1948e3094158 Mon Sep 17 00:00:00 2001 From: rwjuk Date: Mon, 31 Jul 2017 12:05:52 +0100 Subject: [PATCH] Clean up and improve UI of track install window Clean up and improve UI of track install window Cleanup window def Clean up and improve track install window Name track_list.var_484 Format widget definitions Use get_friendly_track_type_name() Guard against NULL --- data/language/en-GB.txt | 4 +- src/openrct2/interface/window.h | 3 +- src/openrct2/localisation/string_ids.h | 3 ++ src/openrct2/windows/InstallTrack.cpp | 54 +++++++++++++++++++------- src/openrct2/windows/TrackList.cpp | 9 ++--- src/openrct2/windows/TrackManage.cpp | 4 +- 6 files changed, 52 insertions(+), 25 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index 05d4abbbd3..28f889fcfb 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -3383,7 +3383,7 @@ STR_3372 :{BLACK}= Cash Machine STR_3373 :{BLACK}= Toilet STR_3374 :Warning: Too many objects selected! STR_3375 :Not all objects in this scenery group could be selected -STR_3376 :Install new track design... +STR_3376 :Install new STR_3377 :{SMALLFONT}{BLACK}Install a new track design file STR_3378 :Install STR_3379 :Cancel @@ -4450,6 +4450,8 @@ STR_6138 :OpenRCT2 is the work of many authors, a full list can be found in { STR_6139 :All product and company names belong to their respective holders. Use of them does not imply any affiliation with or endorsement by them. STR_6140 :Changelog... STR_6141 :RCT1 Bottom Toolbar +STR_6142 :{WINDOW_COLOUR_2}Track name: {BLACK}{STRING} +STR_6143 :{WINDOW_COLOUR_2}Ride type: {BLACK}{STRINGID} ############# # Scenarios # diff --git a/src/openrct2/interface/window.h b/src/openrct2/interface/window.h index c711426967..774a978762 100644 --- a/src/openrct2/interface/window.h +++ b/src/openrct2/interface/window.h @@ -225,8 +225,7 @@ typedef struct scenery_variables { } scenery_variables; typedef struct track_list_variables { - uint16 var_480; - uint16 var_484; + bool track_list_being_updated; bool reload_track_designs; } track_list_variables; diff --git a/src/openrct2/localisation/string_ids.h b/src/openrct2/localisation/string_ids.h index 55f966032c..33c05b34c1 100644 --- a/src/openrct2/localisation/string_ids.h +++ b/src/openrct2/localisation/string_ids.h @@ -3788,6 +3788,9 @@ enum { STR_THEMES_OPTION_RCT1_BOTTOM_TOOLBAR = 6141, + STR_TRACK_DESIGN_NAME = 6142, + STR_TRACK_DESIGN_TYPE = 6143, + // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working STR_COUNT = 32768 }; diff --git a/src/openrct2/windows/InstallTrack.cpp b/src/openrct2/windows/InstallTrack.cpp index 084fbadcc8..0bf5b5a4de 100644 --- a/src/openrct2/windows/InstallTrack.cpp +++ b/src/openrct2/windows/InstallTrack.cpp @@ -42,15 +42,21 @@ enum { WIDX_CANCEL }; +#define WW 380 +#define WH 400 +#define WW_LESS_PADDING (WW - 4) +#define PREVIEW_BUTTONS_LEFT (WW - 25) +#define ACTION_BUTTONS_LEFT (WW - 100) + static rct_widget window_install_track_widgets[] = { - { WWT_FRAME, 0, 0, 401, 0, 399, 0xFFFFFFFF, STR_NONE }, - { WWT_CAPTION, 0, 1, 400, 1, 14, STR_TRACK_DESIGN_INSTALL_WINDOW_TITLE, STR_WINDOW_TITLE_TIP }, - { WWT_CLOSEBOX, 0, 389, 399, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, - { WWT_FLATBTN, 0, 15, 386, 18, 236, 0xFFFFFFFF, STR_NONE }, - { WWT_FLATBTN, 0, 376, 399, 374, 397, SPR_ROTATE_ARROW, STR_ROTATE_90_TIP }, - { WWT_FLATBTN, 0, 376, 399, 350, 373, SPR_SCENERY, STR_TOGGLE_SCENERY_TIP }, - { WWT_DROPDOWN_BUTTON, 0, 303, 397, 241, 252, STR_INSTALL_NEW_TRACK_DESIGN_INSTALL, STR_NONE }, - { WWT_DROPDOWN_BUTTON, 0, 303, 397, 256, 267, STR_INSTALL_NEW_TRACK_DESIGN_CANCEL, STR_NONE }, + { WWT_FRAME, 0, 0, WW - 1, 0, WH-1, STR_NONE, STR_NONE }, + { WWT_CAPTION, 0, 1, WW - 2, 1, 14, STR_TRACK_DESIGN_INSTALL_WINDOW_TITLE, STR_WINDOW_TITLE_TIP }, + { WWT_CLOSEBOX, 0, WW - 13, WW - 3, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, + { WWT_FLATBTN, 0, 4, WW - 5, 18, 236, STR_NONE, STR_NONE }, + { WWT_FLATBTN, 0, PREVIEW_BUTTONS_LEFT, WW_LESS_PADDING, 374, 397, SPR_ROTATE_ARROW, STR_ROTATE_90_TIP }, + { WWT_FLATBTN, 0, PREVIEW_BUTTONS_LEFT, WW_LESS_PADDING, 350, 373, SPR_SCENERY, STR_TOGGLE_SCENERY_TIP }, + { WWT_DROPDOWN_BUTTON, 0, ACTION_BUTTONS_LEFT, WW_LESS_PADDING, 241, 252, STR_INSTALL_NEW_TRACK_DESIGN_INSTALL, STR_NONE }, + { WWT_DROPDOWN_BUTTON, 0, ACTION_BUTTONS_LEFT, WW_LESS_PADDING, 256, 267, STR_INSTALL_NEW_TRACK_DESIGN_CANCEL, STR_NONE }, { WIDGETS_END }, }; @@ -132,11 +138,11 @@ void window_install_track_open(const utf8 *path) sint32 x = screenWidth / 2 - 201; sint32 y = Math::Max(TOP_TOOLBAR_HEIGHT + 1, screenHeight / 2 - 200); - rct_window *w = window_create(x, y, 402, 400, &window_install_track_events, WC_INSTALL_TRACK, 0); + rct_window *w = window_create(x, y, WW, WH, &window_install_track_events, WC_INSTALL_TRACK, 0); w->widgets = window_install_track_widgets; w->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_ROTATE) | (1 << WIDX_TOGGLE_SCENERY) | (1 << WIDX_INSTALL) | (1 << WIDX_CANCEL); window_init_scroll_widgets(w); - w->track_list.var_484 = 0; + w->track_list.track_list_being_updated = false; window_push_others_right(w); _trackPath = _strdup(path); @@ -247,14 +253,34 @@ static void window_install_track_paint(rct_window *w, rct_drawpixelinfo *dpi) } } - // Track design name - gfx_draw_string_centred_clipped(dpi, STR_TRACK_PREVIEW_NAME_FORMAT, &_trackName, COLOUR_BLACK, x, y, 368); - // Information x = w->x + widget->left + 1; - y = w->y + widget->bottom + 2; + y = w->y + widget->bottom + 4; // 0x006D3CF1 -- 0x006d3d71 missing + // Track design name & type + gfx_draw_string_left(dpi, STR_TRACK_DESIGN_NAME, &_trackName, COLOUR_BLACK, x-1, y); + y += 10; + + rct_ride_name rideName; + rct_string_id friendlyTrackName; + + void * objectEntry = object_manager_load_object(&td6->vehicle_object); + if (objectEntry != NULL) + { + sint32 groupIndex = object_manager_get_loaded_object_entry_index(objectEntry); + rideName = get_ride_naming(td6->type, get_ride_entry(groupIndex)); + friendlyTrackName = rideName.name; + } + else + { + // Fall back on the technical track name if the vehicle object cannot be loaded + friendlyTrackName = RideNaming[td6->type].name; + } + + gfx_draw_string_left(dpi, STR_TRACK_DESIGN_TYPE, &friendlyTrackName, COLOUR_BLACK, x, y); + y += 14; + // Stats fixed32_2dp rating = td6->excitement * 10; gfx_draw_string_left(dpi, STR_TRACK_LIST_EXCITEMENT_RATING, &rating, COLOUR_BLACK, x, y); diff --git a/src/openrct2/windows/TrackList.cpp b/src/openrct2/windows/TrackList.cpp index 0b2843af3d..59c9bb6559 100644 --- a/src/openrct2/windows/TrackList.cpp +++ b/src/openrct2/windows/TrackList.cpp @@ -144,8 +144,7 @@ static void _window_track_list_open(ride_list_item item) w->widgets = window_track_list_widgets; w->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_ROTATE) | (1 << WIDX_TOGGLE_SCENERY) | (1 << WIDX_BACK); window_init_scroll_widgets(w); - w->track_list.var_480 = 0xFFFF; - w->track_list.var_484 = 0; + w->track_list.track_list_being_updated = false; w->track_list.reload_track_designs = false; w->selected_list_item = 0; if (_trackDesignsCount != 0 && !(gScreenFlags & SCREEN_FLAGS_TRACK_MANAGER)) { @@ -198,8 +197,6 @@ static void window_track_list_close(rct_window *w) */ static void window_track_list_select(rct_window *w, sint32 index) { - w->track_list.var_480 = index; - // Displays a message if the ride can't load, fix #4080 if (_loadedTrackDesign == nullptr) { window_error_open(STR_CANT_BUILD_PARK_ENTRANCE_HERE, STR_TRACK_LOAD_FAILED_ERROR); @@ -298,7 +295,7 @@ static void window_track_list_scrollgetsize(rct_window *w, sint32 scrollIndex, s */ static void window_track_list_scrollmousedown(rct_window *w, sint32 scrollIndex, sint32 x, sint32 y) { - if (!(w->track_list.var_484 & 1)) { + if (!w->track_list.track_list_being_updated) { sint32 i = window_track_list_get_list_item_index_from_position(x, y); if (i != -1) { window_track_list_select(w, i); @@ -312,7 +309,7 @@ static void window_track_list_scrollmousedown(rct_window *w, sint32 scrollIndex, */ static void window_track_list_scrollmouseover(rct_window *w, sint32 scrollIndex, sint32 x, sint32 y) { - if (!(w->track_list.var_484 & 1)) { + if (!w->track_list.track_list_being_updated) { sint32 i = window_track_list_get_list_item_index_from_position(x, y); if (i != -1 && w->selected_list_item != i) { w->selected_list_item = i; diff --git a/src/openrct2/windows/TrackManage.cpp b/src/openrct2/windows/TrackManage.cpp index 05a4d01cad..fd95337e71 100644 --- a/src/openrct2/windows/TrackManage.cpp +++ b/src/openrct2/windows/TrackManage.cpp @@ -164,7 +164,7 @@ static void _window_track_manage_open(track_design_file_ref *tdFileRef) rct_window *trackDesignListWindow = window_find_by_class(WC_TRACK_DESIGN_LIST); if (trackDesignListWindow != nullptr) { - trackDesignListWindow->track_list.var_484 |= 1; + trackDesignListWindow->track_list.track_list_being_updated = true; } _trackDesignFileReference = tdFileRef; @@ -178,7 +178,7 @@ static void window_track_manage_close(rct_window *w) { rct_window *trackDesignListWindow = window_find_by_class(WC_TRACK_DESIGN_LIST); if (trackDesignListWindow != nullptr) { - trackDesignListWindow->track_list.var_484 &= ~1; + trackDesignListWindow->track_list.track_list_being_updated = false; } }