Add compile-time checked constants for widget ids

This commit is contained in:
Marijn van der Werf 2017-05-02 02:01:29 +02:00 committed by Michael Steenbeek
parent 0debd879da
commit 3cf725745d
22 changed files with 100 additions and 35 deletions

View File

@ -168,7 +168,7 @@ static void shortcut_pause_game()
rct_window *window = window_find_by_class(WC_TOP_TOOLBAR);
if (window != NULL) {
window_invalidate(window);
window_event_mouse_up_call(window, 0);
window_event_mouse_up_call(window, WC_TOP_TOOLBAR__WIDX_PAUSE);
}
}
}
@ -208,39 +208,39 @@ static void shortcut_rotate_construction_object()
// Rotate scenery
rct_window *w = window_find_by_class(WC_SCENERY);
if (w != NULL && !widget_is_disabled(w, 25) && w->widgets[25].type != WWT_EMPTY) {
window_event_mouse_up_call(w, 25);
if (w != NULL && !widget_is_disabled(w, WC_SCENERY__WIDX_SCENERY_ROTATE_OBJECTS_BUTTON) && w->widgets[WC_SCENERY__WIDX_SCENERY_ROTATE_OBJECTS_BUTTON].type != WWT_EMPTY) {
window_event_mouse_up_call(w, WC_SCENERY__WIDX_SCENERY_ROTATE_OBJECTS_BUTTON);
return;
}
// Rotate construction track piece
w = window_find_by_class(WC_RIDE_CONSTRUCTION);
if (w != NULL && !widget_is_disabled(w, 32) && w->widgets[32].type != WWT_EMPTY) {
if (w != NULL && !widget_is_disabled(w, WC_RIDE_CONSTRUCTION__WIDX_ROTATE) && w->widgets[WC_RIDE_CONSTRUCTION__WIDX_ROTATE].type != WWT_EMPTY) {
// Check if building a maze...
if (w->widgets[32].tooltip != STR_RIDE_CONSTRUCTION_BUILD_MAZE_IN_THIS_DIRECTION_TIP) {
window_event_mouse_up_call(w, 32);
if (w->widgets[WC_RIDE_CONSTRUCTION__WIDX_ROTATE].tooltip != STR_RIDE_CONSTRUCTION_BUILD_MAZE_IN_THIS_DIRECTION_TIP) {
window_event_mouse_up_call(w, WC_RIDE_CONSTRUCTION__WIDX_ROTATE);
return;
}
}
// Rotate track design preview
w = window_find_by_class(WC_TRACK_DESIGN_LIST);
if (w != NULL && !widget_is_disabled(w, 5) && w->widgets[5].type != WWT_EMPTY) {
window_event_mouse_up_call(w, 5);
if (w != NULL && !widget_is_disabled(w, WC_TRACK_DESIGN_LIST__WIDX_ROTATE) && w->widgets[WC_TRACK_DESIGN_LIST__WIDX_ROTATE].type != WWT_EMPTY) {
window_event_mouse_up_call(w, WC_TRACK_DESIGN_LIST__WIDX_ROTATE);
return;
}
// Rotate track design placement
w = window_find_by_class(WC_TRACK_DESIGN_PLACE);
if (w != NULL && !widget_is_disabled(w, 3) && w->widgets[3].type != WWT_EMPTY) {
window_event_mouse_up_call(w, 3);
if (w != NULL && !widget_is_disabled(w, WC_TRACK_DESIGN_PLACE__WIDX_ROTATE) && w->widgets[WC_TRACK_DESIGN_PLACE__WIDX_ROTATE].type != WWT_EMPTY) {
window_event_mouse_up_call(w, WC_TRACK_DESIGN_PLACE__WIDX_ROTATE);
return;
}
// Rotate park entrance
w = window_find_by_class(WC_MAP);
if (w != NULL && !widget_is_disabled(w, 20) && w->widgets[20].type != WWT_EMPTY) {
window_event_mouse_up_call(w, 20);
if (w != NULL && !widget_is_disabled(w, WC_MAP__WIDX_ROTATE_90) && w->widgets[WC_MAP__WIDX_ROTATE_90].type != WWT_EMPTY) {
window_event_mouse_up_call(w, WC_MAP__WIDX_ROTATE_90);
return;
}
}
@ -373,7 +373,7 @@ static void shortcut_adjust_land()
rct_window *window = window_find_by_class(WC_TOP_TOOLBAR);
if (window != NULL) {
window_invalidate(window);
window_event_mouse_up_call(window, 8);
window_event_mouse_up_call(window, WC_TOP_TOOLBAR__WIDX_LAND);
}
}
}
@ -389,7 +389,7 @@ static void shortcut_adjust_water()
rct_window *window = window_find_by_class(WC_TOP_TOOLBAR);
if (window != NULL) {
window_invalidate(window);
window_event_mouse_up_call(window, 9);
window_event_mouse_up_call(window, WC_TOP_TOOLBAR__WIDX_WATER);
}
}
}
@ -405,7 +405,7 @@ static void shortcut_build_scenery()
rct_window *window = window_find_by_class(WC_TOP_TOOLBAR);
if (window != NULL) {
window_invalidate(window);
window_event_mouse_up_call(window, 10);
window_event_mouse_up_call(window, WC_TOP_TOOLBAR__WIDX_SCENERY);
}
}
}
@ -421,7 +421,7 @@ static void shortcut_build_paths()
rct_window *window = window_find_by_class(WC_TOP_TOOLBAR);
if (window != NULL) {
window_invalidate(window);
window_event_mouse_up_call(window, 11);
window_event_mouse_up_call(window, WC_TOP_TOOLBAR__WIDX_PATH);
}
}
}

View File

@ -259,15 +259,19 @@ static bool window_other_wheel_input(rct_window *w, sint32 widgetIndex, sint32 w
sint32 previewWidgetIndex;
switch (w->classification) {
case WC_WATER:
previewWidgetIndex = WC_WATER__WIDX_PREVIEW;
break;
case WC_CLEAR_SCENERY:
previewWidgetIndex = WC_CLEAR_SCENERY__WIDX_PREVIEW;
break;
case WC_LAND_RIGHTS:
previewWidgetIndex = 3;
previewWidgetIndex = WC_LAND_RIGHTS__WIDX_PREVIEW;
break;
case WC_LAND:
previewWidgetIndex = 5;
previewWidgetIndex = WC_LAND__WIDX_PREVIEW;
break;
case WC_MAP:
previewWidgetIndex = 13;
previewWidgetIndex = WC_MAP__WIDX_LAND_TOOL;
break;
default:
return false;

View File

@ -482,6 +482,32 @@ enum {
WC_CHAT = 223,
};
#define validate_global_widx(wc, widx) \
static_assert(widx == wc ## __ ## widx, "Global WIDX of " #widx " doesn't match actual value.")
#define WC_TOP_TOOLBAR__WIDX_PAUSE 0
#define WC_TOP_TOOLBAR__WIDX_LAND 8
#define WC_TOP_TOOLBAR__WIDX_WATER 9
#define WC_TOP_TOOLBAR__WIDX_SCENERY 10
#define WC_TOP_TOOLBAR__WIDX_PATH 11
#define WC_RIDE_CONSTRUCTION__WIDX_CONSTRUCT 23
#define WC_RIDE_CONSTRUCTION__WIDX_ENTRANCE 29
#define WC_RIDE_CONSTRUCTION__WIDX_EXIT 30
#define WC_RIDE_CONSTRUCTION__WIDX_ROTATE 32
#define WC_SCENERY__WIDX_SCENERY_TAB_1 4
#define WC_SCENERY__WIDX_SCENERY_ROTATE_OBJECTS_BUTTON 25
#define WC_LAND__WIDX_PREVIEW 5
#define WC_WATER__WIDX_PREVIEW 3
#define WC_PEEP__WIDX_PATROL 11
#define WC_PEEP__WIDX_ACTION_LBL 12
#define WC_TRACK_DESIGN_LIST__WIDX_ROTATE 5
#define WC_TRACK_DESIGN_PLACE__WIDX_ROTATE 3
#define WC_MAP__WIDX_LAND_TOOL 13
#define WC_MAP__WIDX_ROTATE_90 20
#define WC_EDITOR_OBJECT_SELECTION__WIDX_TAB_1 4
#define WC_CLEAR_SCENERY__WIDX_PREVIEW 3
#define WC_LAND_RIGHTS__WIDX_PREVIEW 3
enum PROMPT_MODE {
PM_SAVE_BEFORE_LOAD = 0,
PM_SAVE_BEFORE_QUIT,

View File

@ -355,7 +355,7 @@ void news_item_open_subject(sint32 type, sint32 subject)
window = window_find_by_class(WC_TOP_TOOLBAR);
if (window != NULL) {
window_invalidate(window);
if (!tool_set(window, 9, 0)) {
if (!tool_set(window, WC_TOP_TOOLBAR__WIDX_WATER, 0)) {
input_set_flag(INPUT_FLAG_6, true);
window_scenery_open();
}
@ -365,7 +365,7 @@ void news_item_open_subject(sint32 type, sint32 subject)
// Switch to new scenery tab
window = window_find_by_class(WC_SCENERY);
if (window != NULL)
window_event_mouse_down_call(window, 4 + subject);
window_event_mouse_down_call(window, WC_SCENERY__WIDX_SCENERY_TAB_1 + subject);
break;
case NEWS_ITEM_PEEPS:
window_guest_list_open_with_filter(GLFT_GUESTS_THINKING_X, subject);;

View File

@ -10852,7 +10852,7 @@ static void peep_on_exit_ride(rct_peep *peep, sint32 rideIndex)
rct_window *w = window_find_by_number(WC_PEEP, peep->sprite_index);
if (w != NULL) {
window_event_invalidate_call(w);
widget_invalidate(w, 12);
widget_invalidate(w, WC_PEEP__WIDX_ACTION_LBL);
}
}
@ -11623,7 +11623,7 @@ static void peep_reset_ride_heading(rct_peep *peep)
w = window_find_by_number(WC_PEEP, peep->sprite_index);
if (w != NULL) {
window_event_invalidate_call(w);
widget_invalidate(w, 12);
widget_invalidate(w, WC_PEEP__WIDX_ACTION_LBL);
}
}
@ -12084,7 +12084,7 @@ static void peep_pick_ride_to_go_on(rct_peep *peep)
rct_window *w = window_find_by_number(WC_PEEP, peep->sprite_index);
if (w != NULL) {
window_event_invalidate_call(w);
widget_invalidate(w, 12);
widget_invalidate(w, WC_PEEP__WIDX_ACTION_LBL);
}
// Make peep look at their map if they have one
@ -12190,7 +12190,7 @@ static void peep_head_for_nearest_ride_type(rct_peep *peep, sint32 rideType)
rct_window *w = window_find_by_number(WC_PEEP, peep->sprite_index);
if (w != NULL) {
window_event_invalidate_call(w);
widget_invalidate(w, 12);
widget_invalidate(w, WC_PEEP__WIDX_ACTION_LBL);
}
peep->var_F4 = 0;

View File

@ -1741,7 +1741,7 @@ static sint32 ride_modify_entrance_or_exit(rct_map_element *mapElement, sint32 x
gCurrentToolWidget.window_classification != WC_RIDE_CONSTRUCTION
) {
// Replace entrance / exit
tool_set(constructionWindow, entranceType == 0 ? 29 : 30, 12);
tool_set(constructionWindow, entranceType == 0 ? WC_RIDE_CONSTRUCTION__WIDX_ENTRANCE : WC_RIDE_CONSTRUCTION__WIDX_EXIT, 12);
gRideEntranceExitPlaceType = entranceType;
gRideEntranceExitPlaceRideIndex = rideIndex;
gRideEntranceExitPlaceStationIndex = bl;
@ -1756,7 +1756,7 @@ static sint32 ride_modify_entrance_or_exit(rct_map_element *mapElement, sint32 x
} else {
// Remove entrance / exit
game_do_command(x, (GAME_COMMAND_FLAG_ALLOW_DURING_PAUSED | GAME_COMMAND_FLAG_APPLY), y, rideIndex, GAME_COMMAND_REMOVE_RIDE_ENTRANCE_OR_EXIT, bl, 0);
gCurrentToolWidget.widget_index = entranceType == ENTRANCE_TYPE_RIDE_ENTRANCE ? 29 : 30;
gCurrentToolWidget.widget_index = entranceType == ENTRANCE_TYPE_RIDE_ENTRANCE ? WC_RIDE_CONSTRUCTION__WIDX_ENTRANCE : WC_RIDE_CONSTRUCTION__WIDX_EXIT;
gRideEntranceExitPlaceType = entranceType;
}
@ -1903,7 +1903,7 @@ sint32 sub_6CC3FB(sint32 rideIndex)
w = ride_create_or_find_construction_window(rideIndex);
tool_set(w, 23, 12);
tool_set(w, WC_RIDE_CONSTRUCTION__WIDX_CONSTRUCT, 12);
input_set_flag(INPUT_FLAG_6, true);
ride = get_ride(_currentRideIndex);
@ -5111,7 +5111,7 @@ static void loc_6B51C0(sint32 rideIndex)
w = window_find_by_class(WC_RIDE_CONSTRUCTION);
if (w != NULL)
window_event_mouse_up_call(w, 29 + entranceOrExit);
window_event_mouse_up_call(w, WC_RIDE_CONSTRUCTION__WIDX_ENTRANCE + entranceOrExit);
}
}

View File

@ -39,6 +39,8 @@ enum WINDOW_CLEAR_SCENERY_WIDGET_IDX {
WIDX_FOOTPATH
};
validate_global_widx(WC_CLEAR_SCENERY, WIDX_PREVIEW);
rct_widget window_clear_scenery_widgets[] = {
{ WWT_FRAME, 0, 0, 97, 0, 93, 0xFFFFFFFF, STR_NONE }, // panel / background
{ WWT_CAPTION, 0, 1, 96, 1, 14, STR_CLEAR_SCENERY, STR_WINDOW_TITLE_TIP }, // title bar

View File

@ -238,7 +238,7 @@ static bool window_editor_bottom_toolbar_check_object_selection()
w = window_find_by_class(WC_EDITOR_OBJECT_SELECTION);
if (w != NULL) {
// Click tab with missing object
window_event_mouse_up_call(w, 4 + missingObjectType);
window_event_mouse_up_call(w, WC_EDITOR_OBJECT_SELECTION__WIDX_TAB_1 + missingObjectType);
}
return false;
}

View File

@ -143,6 +143,8 @@ enum WINDOW_STAFF_LIST_WIDGET_IDX {
WIDX_LIST_SORT_RIDE,
};
validate_global_widx(WC_EDITOR_OBJECT_SELECTION, WIDX_TAB_1);
static rct_widget window_editor_object_selection_widgets[] = {
{ WWT_FRAME, 0, 0, 599, 0, 399, 0xFFFFFFFF, STR_NONE },
{ WWT_CAPTION, 0, 1, 598, 1, 14, STR_OBJECT_SELECTION, STR_WINDOW_TITLE_TIP },

View File

@ -69,6 +69,8 @@ enum WINDOW_GUEST_WIDGET_IDX {
WIDX_RIDE_SCROLL = 10
};
validate_global_widx(WC_PEEP, WIDX_ACTION_LBL);
rct_widget window_guest_overview_widgets[] = {
{WWT_FRAME, 0, 0, 191, 0, 156, 0xFFFFFFFF, STR_NONE}, // Panel / Background
{WWT_CAPTION, 0, 1, 190, 1, 14, STR_STRINGID, STR_WINDOW_TITLE_TIP}, // Title

View File

@ -40,6 +40,8 @@ enum WINDOW_LAND_WIDGET_IDX {
WIDX_WALL,
};
validate_global_widx(WC_LAND, WIDX_PREVIEW);
static rct_widget window_land_widgets[] = {
{ WWT_FRAME, 0, 0, 97, 0, 159, 0xFFFFFFFF, STR_NONE }, // panel / background
{ WWT_CAPTION, 0, 1, 96, 1, 14, STR_LAND, STR_WINDOW_TITLE_TIP }, // title bar

View File

@ -39,6 +39,8 @@ enum WINDOW_WATER_WIDGET_IDX {
WIDX_BUY_CONSTRUCTION_RIGHTS
};
validate_global_widx(WC_LAND_RIGHTS, WIDX_PREVIEW);
static rct_widget window_land_rights_widgets[] = {
{ WWT_FRAME, 0, 0, 97, 0, 93, 0xFFFFFFFF, STR_NONE }, // panel / background
{ WWT_CAPTION, 0, 1, 96, 1, 14, STR_LAND_RIGHTS, STR_WINDOW_TITLE_TIP }, // title bar

View File

@ -68,6 +68,9 @@ enum WINDOW_MAP_WIDGET_IDX {
WIDX_MAP_GENERATOR = 21
};
validate_global_widx(WC_MAP, WIDX_LAND_TOOL);
validate_global_widx(WC_MAP, WIDX_ROTATE_90);
static rct_widget window_map_widgets[] = {
{ WWT_FRAME, 0, 0, 244, 0, 258, STR_NONE, STR_NONE },
{ WWT_CAPTION, 0, 1, 243, 1, 14, STR_MAP_LABEL, STR_WINDOW_TITLE_TIP },

View File

@ -4966,7 +4966,7 @@ static void setup_scenery_selection(rct_window* w)
cancel_scenery_selection();
}
while (tool_set(w, 0, 12));
while (tool_set(w, WIDX_BACKGROUND, 12));
gTrackDesignSaveRideIndex = (uint8)w->number;

View File

@ -87,6 +87,11 @@ enum {
WIDX_SEAT_ROTATION_ANGLE_SPINNER_DOWN,
};
validate_global_widx(WC_RIDE_CONSTRUCTION, WIDX_CONSTRUCT);
validate_global_widx(WC_RIDE_CONSTRUCTION, WIDX_ENTRANCE);
validate_global_widx(WC_RIDE_CONSTRUCTION, WIDX_EXIT);
validate_global_widx(WC_RIDE_CONSTRUCTION, WIDX_ROTATE);
static rct_widget window_ride_construction_widgets[] = {
{ WWT_FRAME, 0, 0, 165, 0, 393, 0xFFFFFFFF, STR_NONE },
{ WWT_CAPTION, 0, 1, 164, 1, 14, STR_RIDE_CONSTRUCTION_WINDOW_TITLE, STR_WINDOW_TITLE_TIP },
@ -3924,7 +3929,7 @@ void ride_construction_tooldown_construct(sint32 screenX, sint32 screenY)
audio_play_sound_panned(SOUND_ERROR, gCursorState.x, x, y, z);
w = window_find_by_class(WC_RIDE_CONSTRUCTION);
if (w != NULL){
tool_set(w, 23, 12);
tool_set(w, WIDX_CONSTRUCT, 12);
input_set_flag(INPUT_FLAG_6, true);
_trackPlaceCtrlState = false;
_trackPlaceShiftState = false;

View File

@ -143,6 +143,9 @@ enum WINDOW_SCENERY_LIST_WIDGET_IDX {
WIDX_SCENERY_BUILD_CLUSTER_BUTTON, // 80000000
};
validate_global_widx(WC_SCENERY, WIDX_SCENERY_TAB_1);
validate_global_widx(WC_SCENERY, WIDX_SCENERY_ROTATE_OBJECTS_BUTTON);
static rct_widget window_scenery_widgets[] = {
{ WWT_FRAME, 0, 0, 633, 0, 141, 0xFFFFFFFF, STR_NONE }, // 1 0x009DE298
{ WWT_CAPTION, 0, 1, 632, 1, 14, 0xFFFFFFFF, STR_WINDOW_TITLE_TIP }, // 2 0x009DE2A8

View File

@ -65,6 +65,8 @@ enum WINDOW_STAFF_WIDGET_IDX {
WIDX_COSTUME_BTN,
};
validate_global_widx(WC_PEEP, WIDX_PATROL);
rct_widget window_staff_overview_widgets[] = {
{ WWT_FRAME, 0, 0, WW - 1, 0, WH - 1, 0xFFFFFFFF, STR_NONE }, // Panel / Background
{ WWT_CAPTION, 0, 1, WW - 2, 1, 14, STR_STRINGID, STR_WINDOW_TITLE_TIP }, // Title

View File

@ -383,7 +383,7 @@ static void window_staff_list_tooldown(rct_window *w, sint32 widgetIndex, sint32
if (closestPeep != NULL) {
tool_cancel();
rct_window *staffWindow = window_staff_open(closestPeep);
window_event_dropdown_call(staffWindow, 11, 0);
window_event_dropdown_call(staffWindow, WC_PEEP__WIDX_PATROL, 0);
} else {
set_format_arg(0, rct_string_id, StaffNamingConvention[selectedPeepType].plural);
window_error_open(STR_NO_THING_IN_PARK_YET, STR_NONE);

View File

@ -71,6 +71,12 @@ enum {
WIDX_SEPARATOR,
};
validate_global_widx(WC_TOP_TOOLBAR, WIDX_PAUSE);
validate_global_widx(WC_TOP_TOOLBAR, WIDX_LAND);
validate_global_widx(WC_TOP_TOOLBAR, WIDX_WATER);
validate_global_widx(WC_TOP_TOOLBAR, WIDX_SCENERY);
validate_global_widx(WC_TOP_TOOLBAR, WIDX_PATH);
typedef enum {
DDIDX_NEW_GAME = 0,
DDIDX_LOAD_GAME = 1,

View File

@ -41,6 +41,8 @@ enum {
WIDX_BACK,
};
validate_global_widx(WC_TRACK_DESIGN_LIST, WIDX_ROTATE);
static rct_widget window_track_list_widgets[] = {
{ WWT_FRAME, 0, 0, 599, 0, 399, 0xFFFFFFFF, STR_NONE },
{ WWT_CAPTION, 0, 1, 598, 1, 14, STR_SELECT_DESIGN, STR_WINDOW_TITLE_TIP },

View File

@ -48,6 +48,8 @@ enum {
WIDX_PRICE
};
validate_global_widx(WC_TRACK_DESIGN_PLACE, WIDX_ROTATE);
static rct_widget window_track_place_widgets[] = {
{ WWT_FRAME, 0, 0, 199, 0, 123, 0xFFFFFFFF, STR_NONE },
{ WWT_CAPTION, 0, 1, 198, 1, 14, STR_STRING, STR_WINDOW_TITLE_TIP },
@ -166,7 +168,7 @@ void window_track_place_open(const track_design_file_ref *tdFileRef)
| 1 << WIDX_MIRROR
| 1 << WIDX_SELECT_DIFFERENT_DESIGN;
window_init_scroll_widgets(w);
tool_set(w, 6, 12);
tool_set(w, WIDX_PRICE, 12);
input_set_flag(INPUT_FLAG_6, true);
window_push_others_right(w);
show_gridlines();
@ -337,7 +339,7 @@ static void window_track_place_tooldown(rct_window* w, sint32 widgetIndex, sint3
} else {
sub_6CC3FB(rideIndex);
w = window_find_by_class(WC_RIDE_CONSTRUCTION);
window_event_mouse_up_call(w, 29);
window_event_mouse_up_call(w, WC_RIDE_CONSTRUCTION__WIDX_ENTRANCE);
}
return;
}

View File

@ -35,6 +35,8 @@ enum WINDOW_WATER_WIDGET_IDX {
WIDX_INCREMENT
};
validate_global_widx(WC_WATER, WIDX_PREVIEW);
static rct_widget window_water_widgets[] = {
{ WWT_FRAME, 0, 0, 75, 0, 76, 0xFFFFFFFF, STR_NONE }, // panel / background
{ WWT_CAPTION, 0, 1, 74, 1, 14, STR_WATER, STR_WINDOW_TITLE_TIP }, // title bar