diff --git a/src/windows/options.c b/src/windows/options.c index 3491a2816e..7354337362 100644 --- a/src/windows/options.c +++ b/src/windows/options.c @@ -41,16 +41,18 @@ #include "error.h" #include "../interface/themes.h" -enum { +enum WINDOW_OPTIONS_PAGE { WINDOW_OPTIONS_PAGE_DISPLAY, WINDOW_OPTIONS_PAGE_CULTURE, WINDOW_OPTIONS_PAGE_AUDIO, - WINDOW_OPTIONS_PAGE_INPUT, + WINDOW_OPTIONS_PAGE_CONTROLS, WINDOW_OPTIONS_PAGE_MISC, WINDOW_OPTIONS_PAGE_TWITCH, WINDOW_OPTIONS_PAGE_COUNT }; +#pragma region Widgets + enum WINDOW_OPTIONS_WIDGET_IDX { WIDX_BACKGROUND, WIDX_TITLE, @@ -63,20 +65,24 @@ enum WINDOW_OPTIONS_WIDGET_IDX { WIDX_TAB_5, WIDX_TAB_6, - WIDX_RESOLUTION, + WIDX_PAGE_START, + + // Display + WIDX_RESOLUTION = WIDX_PAGE_START, WIDX_RESOLUTION_DROPDOWN, WIDX_FULLSCREEN, WIDX_FULLSCREEN_DROPDOWN, WIDX_TILE_SMOOTHING_CHECKBOX, WIDX_GRIDLINES_CHECKBOX, + WIDX_HARDWARE_DISPLAY_CHECKBOX, WIDX_CONSTRUCTION_MARKER, WIDX_CONSTRUCTION_MARKER_DROPDOWN, - WIDX_HARDWARE_DISPLAY_CHECKBOX, WIDX_THEMES, WIDX_THEMES_DROPDOWN, WIDX_THEMES_BUTTON, - WIDX_LANGUAGE, + // Culture / Units + WIDX_LANGUAGE = WIDX_PAGE_START, WIDX_LANGUAGE_DROPDOWN, WIDX_CURRENCY, WIDX_CURRENCY_DROPDOWN, @@ -89,20 +95,23 @@ enum WINDOW_OPTIONS_WIDGET_IDX { WIDX_DATE_FORMAT, WIDX_DATE_FORMAT_DROPDOWN, - WIDX_SOUND, + // Audio + WIDX_SOUND = WIDX_PAGE_START, WIDX_SOUND_DROPDOWN, WIDX_SOUND_CHECKBOX, WIDX_MUSIC_CHECKBOX, WIDX_TITLE_MUSIC, WIDX_TITLE_MUSIC_DROPDOWN, - WIDX_SCREEN_EDGE_SCROLLING, + // Controls + WIDX_SCREEN_EDGE_SCROLLING = WIDX_PAGE_START, WIDX_HOTKEY_DROPDOWN, WIDX_TOOLBAR_SHOW_FINANCES, WIDX_TOOLBAR_SHOW_RESEARCH, WIDX_TOOLBAR_SHOW_CHEATS, - WIDX_REAL_NAME_CHECKBOX, + // Misc + WIDX_REAL_NAME_CHECKBOX = WIDX_PAGE_START, WIDX_SAVE_PLUGIN_DATA_CHECKBOX, WIDX_AUTOSAVE, WIDX_AUTOSAVE_DROPDOWN, @@ -110,45 +119,49 @@ enum WINDOW_OPTIONS_WIDGET_IDX { WIDX_DEBUGGING_TOOLS, WIDX_TEST_UNFINISHED_TRACKS, - WIDX_CHANNEL_BUTTON, + // Twitch + WIDX_CHANNEL_BUTTON = WIDX_PAGE_START, WIDX_FOLLOWER_PEEP_NAMES_CHECKBOX, WIDX_FOLLOWER_PEEP_TRACKING_CHECKBOX, WIDX_CHAT_PEEP_NAMES_CHECKBOX, WIDX_CHAT_PEEP_TRACKING_CHECKBOX, - WIDX_NEWS_CHECKBOX, - WINDOW_OPTIONS_WIDGETS_SIZE // Marks the end of the widget list, leave as last item + WIDX_NEWS_CHECKBOX }; #define WW 310 #define WH 183 -static rct_widget window_options_widgets[] = { - { WWT_FRAME, 0, 0, WW - 1, 0, WH - 1, STR_NONE, STR_NONE }, - { WWT_CAPTION, 0, 1, WW - 2, 1, 14, STR_OPTIONS_TITLE, STR_WINDOW_TITLE_TIP }, - { WWT_CLOSEBOX, 0, WW-13, WW - 3, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, - { WWT_RESIZE, 1, 0, WW - 1, 43, WH - 1, 0xFFFFFFFF, STR_NONE }, - { WWT_TAB, 1, 3, 33, 17, 43, 0x2000144E, STR_NONE }, - { WWT_TAB, 1, 34, 64, 17, 43, 0x2000144E, STR_NONE }, - { WWT_TAB, 1, 65, 95, 17, 43, 0x2000144E, STR_NONE }, - { WWT_TAB, 1, 96, 126, 17, 43, 0x2000144E, STR_NONE }, - { WWT_TAB, 1, 127, 157, 17, 43, 0x2000144E, STR_NONE }, - { WWT_TAB, 1, 158, 188, 17, 43, 0x2000144E, STR_NONE }, +#define MAIN_OPTIONS_WIDGETS \ + { WWT_FRAME, 0, 0, WW-1, 0, WH-1, STR_NONE, STR_NONE }, \ + { WWT_CAPTION, 0, 1, WW-2, 1, 14, STR_OPTIONS_TITLE, STR_WINDOW_TITLE_TIP }, \ + { WWT_CLOSEBOX, 0, WW-13, WW-3, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, \ + { WWT_RESIZE, 1, 0, WW-1, 43, WH-1, 0xFFFFFFFF, STR_NONE }, \ + { WWT_TAB, 1, 3, 33, 17, 43, 0x2000144E, 5266 }, \ + { WWT_TAB, 1, 34, 64, 17, 43, 0x2000144E, 5267 }, \ + { WWT_TAB, 1, 65, 95, 17, 43, 0x2000144E, 5268 }, \ + { WWT_TAB, 1, 96, 126, 17, 43, 0x2000144E, 5269 }, \ + { WWT_TAB, 1, 127, 157, 17, 43, 0x2000144E, 5270 }, \ + { WWT_TAB, 1, 158, 188, 17, 43, 0x2000144E, 5271 } - // Display tab - { WWT_DROPDOWN, 1, 155, 299, 53, 64, 840, STR_NONE }, // resolution - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 54, 63, 876, STR_NONE }, - { WWT_DROPDOWN, 1, 155, 299, 68, 79, 871, STR_NONE }, // fullscreen - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 69, 78, 876, STR_NONE }, - { WWT_CHECKBOX, 1, 10, 299, 84, 95, STR_TILE_SMOOTHING, STR_TILE_SMOOTHING_TIP }, - { WWT_CHECKBOX, 1, 10, 299, 99, 110, STR_GRIDLINES, STR_GRIDLINES_TIP }, - { WWT_DROPDOWN, 1, 155, 299, 113, 124, STR_NONE, STR_NONE }, // construction marker - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 114, 123, 876, STR_NONE }, - { WWT_CHECKBOX, 1, 10, 290, 129, 140, 5154, STR_NONE }, - { WWT_DROPDOWN, 1, 155, 299, 143, 154, STR_NONE, STR_NONE }, // colour schemes - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 144, 153, 876, STR_NONE }, - { WWT_DROPDOWN_BUTTON, 1, 26, 185, 159, 170, 5153, STR_NONE }, // colour schemes button +static rct_widget window_options_display_widgets[] = { + MAIN_OPTIONS_WIDGETS, + { WWT_DROPDOWN, 1, 155, 299, 53, 64, 840, STR_NONE }, // resolution + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 54, 63, 876, STR_NONE }, + { WWT_DROPDOWN, 1, 155, 299, 68, 79, 871, STR_NONE }, // fullscreen + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 69, 78, 876, STR_NONE }, + { WWT_CHECKBOX, 1, 10, 290, 84, 95, STR_TILE_SMOOTHING, STR_TILE_SMOOTHING_TIP }, // landscape smoothing + { WWT_CHECKBOX, 1, 10, 290, 99, 110, STR_GRIDLINES, STR_GRIDLINES_TIP }, // gridlines + { WWT_CHECKBOX, 1, 10, 290, 114, 125, 5154, STR_NONE }, // hardware display + { WWT_DROPDOWN, 1, 155, 299, 128, 139, STR_NONE, STR_NONE }, // construction marker + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 129, 138, 876, STR_NONE }, + { WWT_DROPDOWN, 1, 155, 299, 143, 154, STR_NONE, STR_NONE }, // colour schemes + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 144, 153, 876, STR_NONE }, + { WWT_DROPDOWN_BUTTON, 1, 26, 185, 159, 170, 5153, STR_NONE }, // colour schemes button + { WIDGETS_END }, +}; - // Culture / units tab +static rct_widget window_options_culture_widgets[] = { + MAIN_OPTIONS_WIDGETS, { WWT_DROPDOWN, 1, 155, 299, 53, 64, STR_NONE, STR_NONE }, // language { WWT_DROPDOWN_BUTTON, 1, 288, 298, 54, 63, 876, STR_NONE }, { WWT_DROPDOWN, 1, 155, 299, 68, 79, 871, STR_NONE }, // currency @@ -156,47 +169,69 @@ static rct_widget window_options_widgets[] = { { WWT_DROPDOWN, 1, 155, 299, 83, 94, 872, STR_NONE }, // distance { WWT_DROPDOWN_BUTTON, 1, 288, 298, 84, 93, 876, STR_NONE }, { WWT_DROPDOWN, 1, 155, 299, 98, 110, 875, STR_NONE }, // temperature - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 99, 108, 876, STR_NONE }, //jjj + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 99, 108, 876, STR_NONE }, { WWT_DROPDOWN, 1, 155, 299, 113, 124, 868, STR_NONE }, // height labels { WWT_DROPDOWN_BUTTON, 1, 288, 298, 114, 123, 876, STR_NONE }, { WWT_DROPDOWN, 1, 155, 299, 128, 139, STR_NONE, STR_NONE }, // date format { WWT_DROPDOWN_BUTTON, 1, 288, 298, 129, 138, 876, STR_NONE }, - - // Audio tab - { WWT_DROPDOWN, 1, 10, 299, 53, 64, 865, STR_NONE }, // sound - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 54, 63, 876, STR_NONE }, - { WWT_CHECKBOX, 1, 10, 229, 68, 79, STR_SOUND, STR_NONE }, // enable / disable sound - { WWT_CHECKBOX, 1, 10, 229, 83, 94, STR_MUSIC, STR_NONE }, // enable / disable music - { WWT_DROPDOWN, 1, 155, 299, 98, 109, STR_NONE, STR_NONE }, // title music - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 99, 108, 876, STR_NONE }, - - // Controls tab - { WWT_CHECKBOX, 2, 10, 299, 53, 64, STR_SCREEN_EDGE_SCROLLING, STR_SCREEN_EDGE_SCROLLING_TIP }, - { WWT_DROPDOWN_BUTTON, 1, 26, 185, 68, 78, STR_HOTKEY, STR_HOTKEY_TIP }, - { WWT_CHECKBOX, 2, 10, 299, 82, 93, 5120, STR_NONE }, - { WWT_CHECKBOX, 2, 10, 299, 97, 108, 5121, STR_NONE }, - { WWT_CHECKBOX, 2, 10, 299, 112, 123, 5147, STR_NONE }, - - // Misc - { WWT_CHECKBOX, 2, 10, 299, 53, 64, STR_REAL_NAME, STR_REAL_NAME_TIP }, - { WWT_CHECKBOX, 2, 10, 299, 68, 79, STR_SAVE_PLUGIN_DATA, STR_SAVE_PLUGIN_DATA_TIP }, - { WWT_DROPDOWN, 1, 155, 299, 83, 94, STR_NONE, STR_NONE }, - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 84, 93, 876, STR_NONE }, - { WWT_CHECKBOX, 2, 10, 299, 98, 109, 5122, STR_NONE }, // allow subtype - { WWT_CHECKBOX, 2, 10, 299, 113, 124, 5150, STR_NONE }, // enabled debugging tools - { WWT_CHECKBOX, 2, 10, 299, 128, 139, 5155, 5156 }, // test unfinished tracks - - //Twitch tab - { WWT_DROPDOWN_BUTTON, 2, 10, 299, 53, 64, STR_TWITCH_NAME, STR_NONE }, // Twitch channel name - { WWT_CHECKBOX, 2, 10, 299, 68, 79, STR_TWITCH_PEEP_FOLLOWERS, STR_TWITCH_PEEP_FOLLOWERS_TIP }, // Twitch name peeps by follows - { WWT_CHECKBOX, 2, 10, 299, 83, 94, STR_TWITCH_FOLLOWERS_TRACK, STR_TWITCH_FOLLOWERS_TRACK_TIP}, // Twitch information on for follows - { WWT_CHECKBOX, 2, 10, 299, 98, 109, STR_TWITCH_PEEP_CHAT, STR_TWITCH_PEEP_CHAT_TIP }, // Twitch name peeps by chat - { WWT_CHECKBOX, 2, 10, 299, 113, 124, STR_TWITCH_CHAT_TRACK, STR_TWITCH_CHAT_TRACK_TIP }, // Twitch information on for chat - { WWT_CHECKBOX, 2, 10, 299, 128, 139, STR_TWITCH_CHAT_NEWS, STR_TWITCH_CHAT_NEWS_TIP }, // Twitch chat !news as notifications in game - { WIDGETS_END }, }; +static rct_widget window_options_audio_widgets[] = { + MAIN_OPTIONS_WIDGETS, + { WWT_DROPDOWN, 1, 10, 299, 53, 64, 865, STR_NONE }, // audio device + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 54, 63, 876, STR_NONE }, + { WWT_CHECKBOX, 1, 10, 229, 69, 80, STR_SOUND, STR_NONE }, // enable / disable sound + { WWT_CHECKBOX, 1, 10, 229, 84, 95, STR_MUSIC, STR_NONE }, // enable / disable music + { WWT_DROPDOWN, 1, 155, 299, 98, 109, STR_NONE, STR_NONE }, // title music + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 99, 108, 876, STR_NONE }, + { WIDGETS_END }, +}; + +static rct_widget window_options_controls_widgets[] = { + MAIN_OPTIONS_WIDGETS, + { WWT_CHECKBOX, 2, 10, 299, 54, 65, STR_SCREEN_EDGE_SCROLLING, STR_SCREEN_EDGE_SCROLLING_TIP }, + { WWT_DROPDOWN_BUTTON, 1, 26, 185, 69, 80, STR_HOTKEY, STR_HOTKEY_TIP }, + { WWT_CHECKBOX, 2, 10, 299, 84, 95, 5120, STR_NONE }, + { WWT_CHECKBOX, 2, 10, 299, 99, 110, 5121, STR_NONE }, + { WWT_CHECKBOX, 2, 10, 299, 114, 125, 5147, STR_NONE }, + { WIDGETS_END }, +}; + +static rct_widget window_options_misc_widgets[] = { + MAIN_OPTIONS_WIDGETS, + { WWT_CHECKBOX, 2, 10, 299, 54, 65, STR_REAL_NAME, STR_REAL_NAME_TIP }, + { WWT_CHECKBOX, 2, 10, 299, 69, 80, STR_SAVE_PLUGIN_DATA, STR_SAVE_PLUGIN_DATA_TIP }, + { WWT_DROPDOWN, 1, 155, 299, 83, 94, STR_NONE, STR_NONE }, + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 84, 93, 876, STR_NONE }, + { WWT_CHECKBOX, 2, 10, 299, 99, 110, 5122, STR_NONE }, // allow subtype + { WWT_CHECKBOX, 2, 10, 299, 114, 125, 5155, 5156 }, // test unfinished tracks + { WWT_CHECKBOX, 2, 10, 299, 129, 140, 5150, STR_NONE }, // enabled debugging tools + { WIDGETS_END }, +}; + +static rct_widget window_options_twitch_widgets[] = { + MAIN_OPTIONS_WIDGETS, + { WWT_DROPDOWN_BUTTON, 2, 10, 299, 54, 65, STR_TWITCH_NAME, STR_NONE }, // Twitch channel name + { WWT_CHECKBOX, 2, 10, 299, 69, 80, STR_TWITCH_PEEP_FOLLOWERS, STR_TWITCH_PEEP_FOLLOWERS_TIP }, // Twitch name peeps by follows + { WWT_CHECKBOX, 2, 10, 299, 84, 95, STR_TWITCH_FOLLOWERS_TRACK, STR_TWITCH_FOLLOWERS_TRACK_TIP }, // Twitch information on for follows + { WWT_CHECKBOX, 2, 10, 299, 99, 110, STR_TWITCH_PEEP_CHAT, STR_TWITCH_PEEP_CHAT_TIP }, // Twitch name peeps by chat + { WWT_CHECKBOX, 2, 10, 299, 114, 125, STR_TWITCH_CHAT_TRACK, STR_TWITCH_CHAT_TRACK_TIP }, // Twitch information on for chat + { WWT_CHECKBOX, 2, 10, 299, 129, 140, STR_TWITCH_CHAT_NEWS, STR_TWITCH_CHAT_NEWS_TIP }, // Twitch chat !news as notifications in game + { WIDGETS_END }, +}; + +rct_widget *window_options_page_widgets[] = { + window_options_display_widgets, + window_options_culture_widgets, + window_options_audio_widgets, + window_options_controls_widgets, + window_options_misc_widgets, + window_options_twitch_widgets +}; + +#pragma endregion + const int window_options_tab_animation_divisor[] = { 4, 8, 2, 2, 2, 1 }; const int window_options_tab_animation_frames[] = { 16, 8, 16, 4, 16, 1 }; @@ -204,8 +239,13 @@ static void window_options_set_page(rct_window *w, int page); static void window_options_set_pressed_tab(rct_window *w); static void window_options_draw_tab_image(rct_drawpixelinfo *dpi, rct_window *w, int page, int spriteIndex); static void window_options_draw_tab_images(rct_drawpixelinfo *dpi, rct_window *w); +static void window_options_show_dropdown(rct_window *w, rct_widget *widget, int num_items); +static void window_options_update_height_markers(); + +#pragma region Events static void window_options_emptysub() { } + static void window_options_mouseup(); static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget* widget); static void window_options_dropdown(); @@ -213,8 +253,6 @@ static void window_options_update(rct_window *w); static void window_options_invalidate(); static void window_options_paint(); static void window_options_text_input(); -static void window_options_show_dropdown(rct_window *w, rct_widget *widget, int num_items); -static void window_options_update_height_markers(); static void* window_options_events[] = { window_options_emptysub, @@ -247,6 +285,83 @@ static void* window_options_events[] = { window_options_emptysub }; +#pragma endregion + +#pragma region Enabled Widgets + +#define MAIN_OPTIONS_ENABLED_WIDGETS \ + (1 << WIDX_CLOSE) | \ + (1 << WIDX_TAB_1) | \ + (1 << WIDX_TAB_2) | \ + (1 << WIDX_TAB_3) | \ + (1 << WIDX_TAB_4) | \ + (1 << WIDX_TAB_5) | \ + (1 << WIDX_TAB_6) + +static uint32 window_options_page_enabled_widgets[] = { + MAIN_OPTIONS_ENABLED_WIDGETS | + (1 << WIDX_RESOLUTION) | + (1 << WIDX_RESOLUTION_DROPDOWN) | + (1 << WIDX_FULLSCREEN) | + (1 << WIDX_FULLSCREEN_DROPDOWN) | + (1 << WIDX_TILE_SMOOTHING_CHECKBOX) | + (1 << WIDX_GRIDLINES_CHECKBOX) | + (1 << WIDX_HARDWARE_DISPLAY_CHECKBOX) | + (1 << WIDX_CONSTRUCTION_MARKER) | + (1 << WIDX_CONSTRUCTION_MARKER_DROPDOWN) | + (1 << WIDX_THEMES) | + (1 << WIDX_THEMES_DROPDOWN) | + (1 << WIDX_THEMES_BUTTON), + + MAIN_OPTIONS_ENABLED_WIDGETS | + (1 << WIDX_LANGUAGE) | + (1 << WIDX_LANGUAGE_DROPDOWN) | + (1 << WIDX_CURRENCY) | + (1 << WIDX_CURRENCY_DROPDOWN) | + (1 << WIDX_DISTANCE) | + (1 << WIDX_DISTANCE_DROPDOWN) | + (1 << WIDX_TEMPERATURE) | + (1 << WIDX_TEMPERATURE_DROPDOWN) | + (1 << WIDX_HEIGHT_LABELS) | + (1 << WIDX_HEIGHT_LABELS_DROPDOWN) | + (1 << WIDX_DATE_FORMAT) | + (1 << WIDX_DATE_FORMAT_DROPDOWN), + + MAIN_OPTIONS_ENABLED_WIDGETS | + (1 << WIDX_SOUND) | + (1 << WIDX_SOUND_DROPDOWN) | + (1 << WIDX_SOUND_CHECKBOX) | + (1 << WIDX_MUSIC_CHECKBOX) | + (1 << WIDX_TITLE_MUSIC) | + (1 << WIDX_TITLE_MUSIC_DROPDOWN), + + MAIN_OPTIONS_ENABLED_WIDGETS | + (1 << WIDX_SCREEN_EDGE_SCROLLING) | + (1 << WIDX_HOTKEY_DROPDOWN) | + (1 << WIDX_TOOLBAR_SHOW_FINANCES) | + (1 << WIDX_TOOLBAR_SHOW_RESEARCH) | + (1 << WIDX_TOOLBAR_SHOW_CHEATS), + + MAIN_OPTIONS_ENABLED_WIDGETS | + (1 << WIDX_REAL_NAME_CHECKBOX) | + (1 << WIDX_SAVE_PLUGIN_DATA_CHECKBOX) | + (1 << WIDX_AUTOSAVE) | + (1 << WIDX_AUTOSAVE_DROPDOWN) | + (1 << WIDX_ALLOW_SUBTYPE_SWITCHING) | + (1 << WIDX_TEST_UNFINISHED_TRACKS) | + (1 << WIDX_DEBUGGING_TOOLS), + + MAIN_OPTIONS_ENABLED_WIDGETS | + (1 << WIDX_CHANNEL_BUTTON) | + (1 << WIDX_FOLLOWER_PEEP_NAMES_CHECKBOX) | + (1 << WIDX_FOLLOWER_PEEP_TRACKING_CHECKBOX) | + (1 << WIDX_CHAT_PEEP_NAMES_CHECKBOX) | + (1 << WIDX_CHAT_PEEP_TRACKING_CHECKBOX) | + (1 << WIDX_NEWS_CHECKBOX) +}; + +#pragma endregion + /** * * rct2: 0x006BAC5B @@ -261,68 +376,18 @@ void window_options_open() return; w = window_create_centred(WW, WH, (uint32*)window_options_events, WC_OPTIONS, 0); - w->widgets = window_options_widgets; - w->enabled_widgets = - (1ULL << WIDX_CLOSE) | - (1ULL << WIDX_TAB_1) | - (1ULL << WIDX_TAB_2) | - (1ULL << WIDX_TAB_3) | - (1ULL << WIDX_TAB_4) | - (1ULL << WIDX_TAB_5) | - (1ULL << WIDX_TAB_6) | - (1ULL << WIDX_SOUND) | - (1ULL << WIDX_SOUND_DROPDOWN) | - (1ULL << WIDX_SOUND_CHECKBOX) | - (1ULL << WIDX_MUSIC_CHECKBOX) | - (1ULL << WIDX_TITLE_MUSIC) | - (1ULL << WIDX_TITLE_MUSIC_DROPDOWN) | - (1ULL << WIDX_LANGUAGE) | - (1ULL << WIDX_LANGUAGE_DROPDOWN) | - (1ULL << WIDX_CURRENCY) | - (1ULL << WIDX_CURRENCY_DROPDOWN) | - (1ULL << WIDX_DISTANCE) | - (1ULL << WIDX_DISTANCE_DROPDOWN) | - (1ULL << WIDX_RESOLUTION) | - (1ULL << WIDX_RESOLUTION_DROPDOWN) | - (1ULL << WIDX_FULLSCREEN) | - (1ULL << WIDX_FULLSCREEN_DROPDOWN) | - (1ULL << WIDX_TEMPERATURE) | - (1ULL << WIDX_TEMPERATURE_DROPDOWN) | - (1ULL << WIDX_HOTKEY_DROPDOWN) | - (1ULL << WIDX_SCREEN_EDGE_SCROLLING) | - (1ULL << WIDX_TOOLBAR_SHOW_FINANCES) | - (1ULL << WIDX_TOOLBAR_SHOW_RESEARCH) | - (1ULL << WIDX_TOOLBAR_SHOW_CHEATS) | - (1ULL << WIDX_REAL_NAME_CHECKBOX) | - (1ULL << WIDX_CONSTRUCTION_MARKER) | - (1ULL << WIDX_CONSTRUCTION_MARKER_DROPDOWN) | - (1ULL << WIDX_HEIGHT_LABELS) | - (1ULL << WIDX_HEIGHT_LABELS_DROPDOWN) | - (1ULL << WIDX_TILE_SMOOTHING_CHECKBOX) | - (1ULL << WIDX_GRIDLINES_CHECKBOX) | - (1ULL << WIDX_HARDWARE_DISPLAY_CHECKBOX) | - (1ULL << WIDX_THEMES) | - (1ULL << WIDX_THEMES_DROPDOWN) | - (1ULL << WIDX_THEMES_BUTTON) | - (1ULL << WIDX_SAVE_PLUGIN_DATA_CHECKBOX) | - (1ULL << WIDX_AUTOSAVE) | - (1ULL << WIDX_AUTOSAVE_DROPDOWN) | - (1ULL << WIDX_ALLOW_SUBTYPE_SWITCHING) | - (1ULL << WIDX_DEBUGGING_TOOLS) | - (1ULL << WIDX_TEST_UNFINISHED_TRACKS) | - (1ULL << WIDX_DATE_FORMAT) | - (1ULL << WIDX_DATE_FORMAT_DROPDOWN) | - (1ULL << WIDX_CHANNEL_BUTTON) | - (1ULL << WIDX_FOLLOWER_PEEP_NAMES_CHECKBOX) | - (1ULL << WIDX_FOLLOWER_PEEP_TRACKING_CHECKBOX) | - (1ULL << WIDX_CHAT_PEEP_NAMES_CHECKBOX) | - (1ULL << WIDX_CHAT_PEEP_TRACKING_CHECKBOX) | - (1ULL << WIDX_NEWS_CHECKBOX); - + w->widgets = window_options_display_widgets; + w->enabled_widgets = window_options_page_enabled_widgets[WINDOW_OPTIONS_PAGE_DISPLAY]; w->page = WINDOW_OPTIONS_PAGE_DISPLAY; + w->frame_no = 0; + w->flags = WF_RESIZABLE; window_init_scroll_widgets(w); + //window_invalidate(w); + + colour_scheme_update(w); } + /** * * rct2: 0x006BAFCA @@ -346,124 +411,154 @@ static void window_options_mouseup() case WIDX_TAB_6: window_options_set_page(w, widgetIndex - WIDX_TAB_1); break; - case WIDX_HOTKEY_DROPDOWN: - window_shortcut_keys_open(); - break; - case WIDX_CHANNEL_BUTTON: - window_text_input_raw_open(w, widgetIndex, STR_TWITCH_NAME, STR_TWITCH_NAME_DESC, gConfigTwitch.channel, 32); - break; - case WIDX_SCREEN_EDGE_SCROLLING: - gConfigGeneral.edge_scrolling ^= 1; - config_save_default(); - window_invalidate(w); - break; - case WIDX_TOOLBAR_SHOW_FINANCES: - gConfigInterface.toolbar_show_finances ^= 1; - config_save_default(); - window_invalidate(w); - window_invalidate_by_class(WC_TOP_TOOLBAR); - break; - case WIDX_TOOLBAR_SHOW_RESEARCH: - gConfigInterface.toolbar_show_research ^= 1; - config_save_default(); - window_invalidate(w); - window_invalidate_by_class(WC_TOP_TOOLBAR); - break; - case WIDX_TOOLBAR_SHOW_CHEATS: - gConfigInterface.toolbar_show_cheats ^= 1; - config_save_default(); - window_invalidate(w); - window_invalidate_by_class(WC_TOP_TOOLBAR); - break; - case WIDX_ALLOW_SUBTYPE_SWITCHING: - gConfigInterface.allow_subtype_switching ^= 1; - config_save_default(); - window_invalidate(w); - window_invalidate_by_class(WC_RIDE); - break; - case WIDX_DEBUGGING_TOOLS: - gConfigGeneral.debugging_tools ^= 1; - config_save_default(); - window_invalidate(w); - break; - case WIDX_TEST_UNFINISHED_TRACKS: - gConfigGeneral.test_unfinished_tracks ^= 1; - config_save_default(); - window_invalidate(w); - break; - case WIDX_REAL_NAME_CHECKBOX: - RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) ^= PARK_FLAGS_SHOW_REAL_GUEST_NAMES; - RCT2_CALLPROC_X(0x0069C52F, RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_SHOW_REAL_GUEST_NAMES ? 0 : 1, 0, 0, 0, 0, 0, 0); - break; - case WIDX_TILE_SMOOTHING_CHECKBOX: - gConfigGeneral.landscape_smoothing ^= 1; - config_save_default(); - gfx_invalidate_screen(); - break; - case WIDX_GRIDLINES_CHECKBOX: - gConfigGeneral.always_show_gridlines ^= 1; - config_save_default(); - gfx_invalidate_screen(); - if ((w = window_get_main()) != NULL) { - if (gConfigGeneral.always_show_gridlines) - w->viewport->flags |= VIEWPORT_FLAG_GRIDLINES; - else - w->viewport->flags &= ~VIEWPORT_FLAG_GRIDLINES; + } + + switch (w->page) { + case WINDOW_OPTIONS_PAGE_DISPLAY: + switch (widgetIndex) { + case WIDX_TILE_SMOOTHING_CHECKBOX: + gConfigGeneral.landscape_smoothing ^= 1; + config_save_default(); + gfx_invalidate_screen(); + break; + case WIDX_GRIDLINES_CHECKBOX: + gConfigGeneral.always_show_gridlines ^= 1; + config_save_default(); + gfx_invalidate_screen(); + if ((w = window_get_main()) != NULL) { + if (gConfigGeneral.always_show_gridlines) + w->viewport->flags |= VIEWPORT_FLAG_GRIDLINES; + else + w->viewport->flags &= ~VIEWPORT_FLAG_GRIDLINES; + } + break; + case WIDX_HARDWARE_DISPLAY_CHECKBOX: + gConfigGeneral.hardware_display ^= 1; + platform_refresh_video(); + config_save_default(); + window_invalidate(w); + break; + case WIDX_THEMES_BUTTON: + window_themes_open(); + window_invalidate(w); + break; } break; - case WIDX_HARDWARE_DISPLAY_CHECKBOX: - gConfigGeneral.hardware_display ^= 1; - platform_refresh_video(); - config_save_default(); - window_invalidate(w); - break; - case WIDX_THEMES_BUTTON: - window_themes_open(); - window_invalidate(w); - break; - case WIDX_FOLLOWER_PEEP_NAMES_CHECKBOX: - gConfigTwitch.enable_follower_peep_names ^= 1; - config_save_default(); - window_invalidate(w); - break; - case WIDX_FOLLOWER_PEEP_TRACKING_CHECKBOX: - gConfigTwitch.enable_follower_peep_tracking ^= 1; - config_save_default(); - window_invalidate(w); - break; - case WIDX_CHAT_PEEP_NAMES_CHECKBOX: - gConfigTwitch.enable_chat_peep_names ^= 1; - config_save_default(); - window_invalidate(w); - break; - case WIDX_CHAT_PEEP_TRACKING_CHECKBOX: - gConfigTwitch.enable_chat_peep_tracking ^= 1; - config_save_default(); - window_invalidate(w); - break; - case WIDX_NEWS_CHECKBOX: - gConfigTwitch.enable_news ^= 1; - config_save_default(); - window_invalidate(w); - break; - case WIDX_SAVE_PLUGIN_DATA_CHECKBOX: - gConfigGeneral.save_plugin_data ^= 1; - config_save_default(); - window_invalidate(w); - break; - case WIDX_SOUND_CHECKBOX: - toggle_all_sounds(); - config_save_default(); - window_invalidate(w); - break; - case WIDX_MUSIC_CHECKBOX: - RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_MUSIC, uint8) ^= 1; - if (RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_MUSIC, uint8) == 0) - stop_ride_music(); - gConfigSound.ride_music ^= 1; - config_save_default(); - window_invalidate(w); + case WINDOW_OPTIONS_PAGE_CULTURE: + break; + + case WINDOW_OPTIONS_PAGE_AUDIO: + switch (widgetIndex) { + case WIDX_SOUND_CHECKBOX: + toggle_all_sounds(); + config_save_default(); + window_invalidate(w); + break; + case WIDX_MUSIC_CHECKBOX: + RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_MUSIC, uint8) ^= 1; + if (RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_MUSIC, uint8) == 0) + stop_ride_music(); + + gConfigSound.ride_music ^= 1; + config_save_default(); + window_invalidate(w); + break; + } + break; + + case WINDOW_OPTIONS_PAGE_CONTROLS: + switch (widgetIndex) { + case WIDX_HOTKEY_DROPDOWN: + window_shortcut_keys_open(); + break; + case WIDX_SCREEN_EDGE_SCROLLING: + gConfigGeneral.edge_scrolling ^= 1; + config_save_default(); + window_invalidate(w); + break; + case WIDX_TOOLBAR_SHOW_FINANCES: + gConfigInterface.toolbar_show_finances ^= 1; + config_save_default(); + window_invalidate(w); + window_invalidate_by_class(WC_TOP_TOOLBAR); + break; + case WIDX_TOOLBAR_SHOW_RESEARCH: + gConfigInterface.toolbar_show_research ^= 1; + config_save_default(); + window_invalidate(w); + window_invalidate_by_class(WC_TOP_TOOLBAR); + break; + case WIDX_TOOLBAR_SHOW_CHEATS: + gConfigInterface.toolbar_show_cheats ^= 1; + config_save_default(); + window_invalidate(w); + window_invalidate_by_class(WC_TOP_TOOLBAR); + break; + } + break; + + case WINDOW_OPTIONS_PAGE_MISC: + switch (widgetIndex) { + case WIDX_ALLOW_SUBTYPE_SWITCHING: + gConfigInterface.allow_subtype_switching ^= 1; + config_save_default(); + window_invalidate(w); + window_invalidate_by_class(WC_RIDE); + break; + case WIDX_DEBUGGING_TOOLS: + gConfigGeneral.debugging_tools ^= 1; + config_save_default(); + window_invalidate(w); + break; + case WIDX_TEST_UNFINISHED_TRACKS: + gConfigGeneral.test_unfinished_tracks ^= 1; + config_save_default(); + window_invalidate(w); + break; + case WIDX_REAL_NAME_CHECKBOX: + RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) ^= PARK_FLAGS_SHOW_REAL_GUEST_NAMES; + RCT2_CALLPROC_X(0x0069C52F, RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_SHOW_REAL_GUEST_NAMES ? 0 : 1, 0, 0, 0, 0, 0, 0); + break; + case WIDX_SAVE_PLUGIN_DATA_CHECKBOX: + gConfigGeneral.save_plugin_data ^= 1; + config_save_default(); + window_invalidate(w); + break; + } + break; + + case WINDOW_OPTIONS_PAGE_TWITCH: + switch (widgetIndex) { + case WIDX_CHANNEL_BUTTON: + window_text_input_raw_open(w, widgetIndex, STR_TWITCH_NAME, STR_TWITCH_NAME_DESC, gConfigTwitch.channel, 32); + break; + case WIDX_FOLLOWER_PEEP_NAMES_CHECKBOX: + gConfigTwitch.enable_follower_peep_names ^= 1; + config_save_default(); + window_invalidate(w); + break; + case WIDX_FOLLOWER_PEEP_TRACKING_CHECKBOX: + gConfigTwitch.enable_follower_peep_tracking ^= 1; + config_save_default(); + window_invalidate(w); + break; + case WIDX_CHAT_PEEP_NAMES_CHECKBOX: + gConfigTwitch.enable_chat_peep_names ^= 1; + config_save_default(); + window_invalidate(w); + break; + case WIDX_CHAT_PEEP_TRACKING_CHECKBOX: + gConfigTwitch.enable_chat_peep_tracking ^= 1; + config_save_default(); + window_invalidate(w); + break; + case WIDX_NEWS_CHECKBOX: + gConfigTwitch.enable_news ^= 1; + config_save_default(); + window_invalidate(w); + break; + } break; } } @@ -478,160 +573,185 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget* widget = &w->widgets[widgetIndex - 1]; - switch (widgetIndex) { - case WIDX_SOUND_DROPDOWN: - audio_get_devices(); + switch (w->page) { + case WINDOW_OPTIONS_PAGE_DISPLAY: + switch (widgetIndex) { + case WIDX_RESOLUTION_DROPDOWN: + { + platform_update_fullscreen_resolutions(); - // populate the list with the sound devices - for (i = 0; i < gAudioDeviceCount; i++) { - gDropdownItemsFormat[i] = 1142; - gDropdownItemsArgs[i] = 1170 | ((uint64)(intptr_t)gAudioDevices[i].name << 16); + int selectedResolution = -1; + for (i = 0; i < gNumResolutions; i++) { + resolution *resolution = &gResolutions[i]; + + gDropdownItemsFormat[i] = 1142; + + uint16 *args = (uint16*)&gDropdownItemsArgs[i]; + args[0] = 839; + args[1] = resolution->width; + args[2] = resolution->height; + + if (resolution->width == gConfigGeneral.fullscreen_width && resolution->height == gConfigGeneral.fullscreen_height) + selectedResolution = i; + } + + window_options_show_dropdown(w, widget, gNumResolutions); + + if (selectedResolution != -1 && selectedResolution < 32) + gDropdownItemsChecked = 1 << selectedResolution; } - window_options_show_dropdown(w, widget, gAudioDeviceCount); - - gDropdownItemsChecked |= (1 << RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_SOUND_DEVICE, uint32)); break; - case WIDX_HEIGHT_LABELS_DROPDOWN: - gDropdownItemsFormat[0] = 1142; - gDropdownItemsFormat[1] = 1142; - gDropdownItemsArgs[0] = STR_UNITS; - gDropdownItemsArgs[1] = STR_REAL_VALUES; + case WIDX_FULLSCREEN_DROPDOWN: + gDropdownItemsFormat[0] = 1142; + gDropdownItemsFormat[1] = 1142; + gDropdownItemsFormat[2] = 1142; + gDropdownItemsArgs[0] = 2773; + gDropdownItemsArgs[1] = 2774; + gDropdownItemsArgs[2] = 2775; - window_options_show_dropdown(w, widget, 2); + window_options_show_dropdown(w, widget, 3); - gDropdownItemsChecked = gConfigGeneral.show_height_as_units ? 1 : 2; - break; - case WIDX_TITLE_MUSIC_DROPDOWN: - num_items = 4; + gDropdownItemsChecked = 1 << gConfigGeneral.fullscreen_mode; + break; + case WIDX_CONSTRUCTION_MARKER_DROPDOWN: + gDropdownItemsFormat[0] = 1142; + gDropdownItemsFormat[1] = 1142; + gDropdownItemsArgs[0] = STR_WHITE; + gDropdownItemsArgs[1] = STR_TRANSLUCENT; - for (i = 0; i < num_items - 1; i++) { - gDropdownItemsFormat[i] = 1142; - gDropdownItemsArgs[i] = 2739 + i; + window_options_show_dropdown(w, widget, 2); + + gDropdownItemsChecked = 1 << gConfigGeneral.construction_marker_colour; + break; + case WIDX_THEMES_DROPDOWN: + num_items = gConfigThemes.num_presets; + + for (i = 0; i < num_items; i++) { + gDropdownItemsFormat[i] = 2777; + gDropdownItemsArgs[i] = (uint64)&gConfigThemes.presets[i].name; + } + + window_options_show_dropdown(w, widget, num_items); + + gDropdownItemsChecked = 1 << gCurrentTheme; + break; } - // Random title music - gDropdownItemsFormat[3] = 1142; - gDropdownItemsArgs[3] = 5126; - - window_options_show_dropdown(w, widget, num_items); - - gDropdownItemsChecked = 1 << gConfigSound.title_music; break; - case WIDX_CURRENCY_DROPDOWN: - num_items = 10; - for (i = 0; i < num_items; i++) { - gDropdownItemsFormat[i] = 1142; - gDropdownItemsArgs[i] = STR_POUNDS + i; + case WINDOW_OPTIONS_PAGE_CULTURE: + switch (widgetIndex) { + case WIDX_HEIGHT_LABELS_DROPDOWN: + gDropdownItemsFormat[0] = 1142; + gDropdownItemsFormat[1] = 1142; + gDropdownItemsArgs[0] = STR_UNITS; + gDropdownItemsArgs[1] = STR_REAL_VALUES; + + window_options_show_dropdown(w, widget, 2); + + gDropdownItemsChecked = gConfigGeneral.show_height_as_units ? 1 : 2; + break; + case WIDX_CURRENCY_DROPDOWN: + num_items = 10; + + for (i = 0; i < num_items; i++) { + gDropdownItemsFormat[i] = 1142; + gDropdownItemsArgs[i] = STR_POUNDS + i; + } + + window_options_show_dropdown(w, widget, num_items); + + gDropdownItemsChecked = 1 << gConfigGeneral.currency_format; + break; + case WIDX_DISTANCE_DROPDOWN: + gDropdownItemsFormat[0] = 1142; + gDropdownItemsFormat[1] = 1142; + gDropdownItemsArgs[0] = STR_IMPERIAL; + gDropdownItemsArgs[1] = STR_METRIC; + + window_options_show_dropdown(w, widget, 2); + + gDropdownItemsChecked = 1 << gConfigGeneral.measurement_format; + break; + case WIDX_TEMPERATURE_DROPDOWN: + gDropdownItemsFormat[0] = 1142; + gDropdownItemsFormat[1] = 1142; + gDropdownItemsArgs[0] = STR_CELSIUS; + gDropdownItemsArgs[1] = STR_FAHRENHEIT; + + window_options_show_dropdown(w, widget, 2); + + gDropdownItemsChecked = 1 << gConfigGeneral.temperature_format; + break; + case WIDX_LANGUAGE_DROPDOWN: + for (i = 1; i < LANGUAGE_COUNT; i++) { + gDropdownItemsFormat[i - 1] = 2777; + gDropdownItemsArgs[i - 1] = (sint64)language_names[i]; + } + window_options_show_dropdown(w, widget, LANGUAGE_COUNT - 1); + gDropdownItemsChecked = 1 << (gCurrentLanguage - 1); + break; + case WIDX_DATE_FORMAT_DROPDOWN: + for (i = 0; i < 2; i++) { + gDropdownItemsFormat[i] = 1142; + gDropdownItemsArgs[i] = 5162 + i; + } + window_options_show_dropdown(w, widget, 2); + gDropdownItemsChecked = 1 << (gConfigGeneral.date_format); + break; } - - window_options_show_dropdown(w, widget, num_items); - - gDropdownItemsChecked = 1 << gConfigGeneral.currency_format; break; - case WIDX_DISTANCE_DROPDOWN: - gDropdownItemsFormat[0] = 1142; - gDropdownItemsFormat[1] = 1142; - gDropdownItemsArgs[0] = STR_IMPERIAL; - gDropdownItemsArgs[1] = STR_METRIC; - window_options_show_dropdown(w, widget, 2); + case WINDOW_OPTIONS_PAGE_AUDIO: + switch (widgetIndex) { + case WIDX_SOUND_DROPDOWN: + audio_get_devices(); - gDropdownItemsChecked = 1 << gConfigGeneral.measurement_format; - break; - case WIDX_RESOLUTION_DROPDOWN: - { - platform_update_fullscreen_resolutions(); + // populate the list with the sound devices + for (i = 0; i < gAudioDeviceCount; i++) { + gDropdownItemsFormat[i] = 1142; + gDropdownItemsArgs[i] = 1170 | ((uint64)(intptr_t)gAudioDevices[i].name << 16); + } - int selectedResolution = -1; - for (i = 0; i < gNumResolutions; i++) { - resolution *resolution = &gResolutions[i]; + window_options_show_dropdown(w, widget, gAudioDeviceCount); - gDropdownItemsFormat[i] = 1142; + gDropdownItemsChecked |= (1 << RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_SOUND_DEVICE, uint32)); + break; + case WIDX_TITLE_MUSIC_DROPDOWN: + num_items = 4; - uint16 *args = (uint16*)&gDropdownItemsArgs[i]; - args[0] = 839; - args[1] = resolution->width; - args[2] = resolution->height; + for (i = 0; i < num_items - 1; i++) { + gDropdownItemsFormat[i] = 1142; + gDropdownItemsArgs[i] = 2739 + i; + } + // Random title music + gDropdownItemsFormat[3] = 1142; + gDropdownItemsArgs[3] = 5126; - if (resolution->width == gConfigGeneral.fullscreen_width && resolution->height == gConfigGeneral.fullscreen_height) - selectedResolution = i; + window_options_show_dropdown(w, widget, num_items); + + gDropdownItemsChecked = 1 << gConfigSound.title_music; + break; } - - window_options_show_dropdown(w, widget, gNumResolutions); - - if (selectedResolution != -1 && selectedResolution < 32) - gDropdownItemsChecked = 1 << selectedResolution; - } - break; - case WIDX_FULLSCREEN_DROPDOWN: - gDropdownItemsFormat[0] = 1142; - gDropdownItemsFormat[1] = 1142; - gDropdownItemsFormat[2] = 1142; - gDropdownItemsArgs[0] = 2773; - gDropdownItemsArgs[1] = 2774; - gDropdownItemsArgs[2] = 2775; - window_options_show_dropdown(w, widget, 3); - - gDropdownItemsChecked = 1 << gConfigGeneral.fullscreen_mode; + case WINDOW_OPTIONS_PAGE_CONTROLS: break; - case WIDX_TEMPERATURE_DROPDOWN: - gDropdownItemsFormat[0] = 1142; - gDropdownItemsFormat[1] = 1142; - gDropdownItemsArgs[0] = STR_CELSIUS; - gDropdownItemsArgs[1] = STR_FAHRENHEIT; - window_options_show_dropdown(w, widget, 2); - - gDropdownItemsChecked = 1 << gConfigGeneral.temperature_format; - break; - case WIDX_CONSTRUCTION_MARKER_DROPDOWN: - gDropdownItemsFormat[0] = 1142; - gDropdownItemsFormat[1] = 1142; - gDropdownItemsArgs[0] = STR_WHITE; - gDropdownItemsArgs[1] = STR_TRANSLUCENT; - - window_options_show_dropdown(w, widget, 2); - - gDropdownItemsChecked = 1 << gConfigGeneral.construction_marker_colour; - break; - case WIDX_THEMES_DROPDOWN: - num_items = gConfigThemes.num_presets; - - for (i = 0; i < num_items; i++) { - gDropdownItemsFormat[i] = 2777; - gDropdownItemsArgs[i] = (uint64)&gConfigThemes.presets[i].name; + case WINDOW_OPTIONS_PAGE_MISC: + switch (widgetIndex) { + case WIDX_AUTOSAVE_DROPDOWN: + for (i = AUTOSAVE_EVERY_WEEK; i <= AUTOSAVE_NEVER; i++) { + gDropdownItemsFormat[i] = 1142; + gDropdownItemsArgs[i] = 2701 + i; + } + window_options_show_dropdown(w, widget, AUTOSAVE_NEVER + 1); + gDropdownItemsChecked = 1 << gConfigGeneral.autosave_frequency; + break; } + break; - window_options_show_dropdown(w, widget, num_items); - - gDropdownItemsChecked = 1 << gCurrentTheme; - break; - case WIDX_LANGUAGE_DROPDOWN: - for (i = 1; i < LANGUAGE_COUNT; i++) { - gDropdownItemsFormat[i - 1] = 2777; - gDropdownItemsArgs[i - 1] = (sint64)language_names[i]; - } - window_options_show_dropdown(w, widget, LANGUAGE_COUNT - 1); - gDropdownItemsChecked = 1 << (gCurrentLanguage - 1); - break; - case WIDX_AUTOSAVE_DROPDOWN: - for (i = AUTOSAVE_EVERY_WEEK; i <= AUTOSAVE_NEVER; i++) { - gDropdownItemsFormat[i] = 1142; - gDropdownItemsArgs[i] = 2701 + i; - } - window_options_show_dropdown(w, widget, AUTOSAVE_NEVER + 1); - gDropdownItemsChecked = 1 << gConfigGeneral.autosave_frequency; - break; - case WIDX_DATE_FORMAT_DROPDOWN: - for (i = 0; i < 2; i++) { - gDropdownItemsFormat[i] = 1142; - gDropdownItemsArgs[i] = 5162 + i; - } - window_options_show_dropdown(w, widget, 2); - gDropdownItemsChecked = 1 << (gConfigGeneral.date_format); + case WINDOW_OPTIONS_PAGE_TWITCH: break; } } @@ -651,153 +771,179 @@ static void window_options_dropdown() if (dropdownIndex == -1) return; - switch (widgetIndex) { - case WIDX_SOUND_DROPDOWN: - audio_init2(dropdownIndex); - if (dropdownIndex < gAudioDeviceCount) { -#ifdef USE_MIXER - if (dropdownIndex == 0) { - Mixer_Init(NULL); - } else { - Mixer_Init(gAudioDevices[dropdownIndex].name); + switch (w->page) { + case WINDOW_OPTIONS_PAGE_DISPLAY: + switch (widgetIndex) { + case WIDX_RESOLUTION_DROPDOWN: + { + resolution *resolution = &gResolutions[dropdownIndex]; + if (resolution->width != gConfigGeneral.fullscreen_width || resolution->height != gConfigGeneral.fullscreen_height) { + gConfigGeneral.fullscreen_width = resolution->width; + gConfigGeneral.fullscreen_height = resolution->height; + + if (gConfigGeneral.fullscreen_mode == SDL_WINDOW_FULLSCREEN) + platform_set_fullscreen_mode(SDL_WINDOW_FULLSCREEN); + + config_save_default(); + gfx_invalidate_screen(); + } } -#endif - } - /*#ifdef _MSC_VER - __asm movzx ax, dropdownIndex - #else - __asm__ ( "movzx ax, %[dropdownIndex] " : : [dropdownIndex] "g" ((char)dropdownIndex) ); - #endif - // the switch replaces ax value - RCT2_CALLPROC_EBPSAFE(0x006BA9B5); // part of init audio*/ - - window_invalidate(w); - break; - case WIDX_HEIGHT_LABELS_DROPDOWN: - // reset flag and set it to 1 if height as units is selected - RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FLAGS, uint8) &= ~CONFIG_FLAG_SHOW_HEIGHT_AS_UNITS; - gConfigGeneral.show_height_as_units = 0; - - if (dropdownIndex == 0) { - RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FLAGS, uint8) |= CONFIG_FLAG_SHOW_HEIGHT_AS_UNITS; - gConfigGeneral.show_height_as_units = 1; - } - - window_options_update_height_markers(); - break; - case WIDX_TITLE_MUSIC_DROPDOWN: - if ((dropdownIndex == 1 || dropdownIndex == 3) && !platform_file_exists(get_file_path(PATH_ID_CSS50))) { - window_error_open(2742, 2743); - } else { - gConfigSound.title_music = (sint8)dropdownIndex; - config_save_default(); - window_invalidate(w); - } - - stop_title_music(); - if (dropdownIndex != 0) - start_title_music(); - break; - case WIDX_CURRENCY_DROPDOWN: - gConfigGeneral.currency_format = (sint8)dropdownIndex; - config_save_default(); - gfx_invalidate_screen(); - break; - case WIDX_DISTANCE_DROPDOWN: - gConfigGeneral.measurement_format = (sint8)dropdownIndex; - config_save_default(); - window_options_update_height_markers(); - break; - case WIDX_RESOLUTION_DROPDOWN: - { - resolution *resolution = &gResolutions[dropdownIndex]; - if (resolution->width != gConfigGeneral.fullscreen_width || resolution->height != gConfigGeneral.fullscreen_height) { - gConfigGeneral.fullscreen_width = resolution->width; - gConfigGeneral.fullscreen_height = resolution->height; - - if (gConfigGeneral.fullscreen_mode == SDL_WINDOW_FULLSCREEN) - platform_set_fullscreen_mode(SDL_WINDOW_FULLSCREEN); + break; + case WIDX_FULLSCREEN_DROPDOWN: + if (dropdownIndex != gConfigGeneral.fullscreen_mode){ + platform_set_fullscreen_mode(dropdownIndex); + gConfigGeneral.fullscreen_mode = (uint8)dropdownIndex; config_save_default(); gfx_invalidate_screen(); } + break; + case WIDX_CONSTRUCTION_MARKER_DROPDOWN: + if (dropdownIndex != gConfigGeneral.construction_marker_colour) { + gConfigGeneral.construction_marker_colour = (uint8)dropdownIndex; + config_save_default(); + gfx_invalidate_screen(); + } + break; + case WIDX_THEMES_DROPDOWN: + if (dropdownIndex != -1) { + theme_change_preset(dropdownIndex); + } + config_save_default(); + break; } break; - case WIDX_FULLSCREEN_DROPDOWN: - if (dropdownIndex != gConfigGeneral.fullscreen_mode){ - platform_set_fullscreen_mode(dropdownIndex); - - gConfigGeneral.fullscreen_mode = (uint8)dropdownIndex; + + case WINDOW_OPTIONS_PAGE_CULTURE: + switch (widgetIndex) { + case WIDX_HEIGHT_LABELS_DROPDOWN: + // reset flag and set it to 1 if height as units is selected + RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FLAGS, uint8) &= ~CONFIG_FLAG_SHOW_HEIGHT_AS_UNITS; + gConfigGeneral.show_height_as_units = 0; + + if (dropdownIndex == 0) { + RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FLAGS, uint8) |= CONFIG_FLAG_SHOW_HEIGHT_AS_UNITS; + gConfigGeneral.show_height_as_units = 1; + } + + window_options_update_height_markers(); + break; + case WIDX_CURRENCY_DROPDOWN: + gConfigGeneral.currency_format = (sint8)dropdownIndex; config_save_default(); gfx_invalidate_screen(); + break; + case WIDX_DISTANCE_DROPDOWN: + gConfigGeneral.measurement_format = (sint8)dropdownIndex; + config_save_default(); + window_options_update_height_markers(); + break; + case WIDX_TEMPERATURE_DROPDOWN: + if (dropdownIndex != gConfigGeneral.temperature_format) { + gConfigGeneral.temperature_format = (sint8)dropdownIndex; + config_save_default(); + gfx_invalidate_screen(); + } + break; + case WIDX_LANGUAGE_DROPDOWN: + if (dropdownIndex != gCurrentLanguage - 1) { + language_open(dropdownIndex + 1); + gConfigGeneral.language = dropdownIndex + 1; + config_save_default(); + gfx_invalidate_screen(); + } + break; + case WIDX_DATE_FORMAT_DROPDOWN: + if (dropdownIndex != gConfigGeneral.date_format) { + gConfigGeneral.date_format = (uint8)dropdownIndex; + config_save_default(); + gfx_invalidate_screen(); + } + break; } break; - case WIDX_TEMPERATURE_DROPDOWN: - if (dropdownIndex != gConfigGeneral.temperature_format) { - gConfigGeneral.temperature_format = (sint8)dropdownIndex; - config_save_default(); - gfx_invalidate_screen(); - } - break; - case WIDX_CONSTRUCTION_MARKER_DROPDOWN: - if (dropdownIndex != gConfigGeneral.construction_marker_colour) { - gConfigGeneral.construction_marker_colour = (uint8)dropdownIndex; - config_save_default(); - gfx_invalidate_screen(); - } - break; - case WIDX_LANGUAGE_DROPDOWN: - if (dropdownIndex != gCurrentLanguage - 1) { - language_open(dropdownIndex + 1); - gConfigGeneral.language = dropdownIndex + 1; - config_save_default(); - gfx_invalidate_screen(); - } - break; - case WIDX_AUTOSAVE_DROPDOWN: - if (dropdownIndex != gConfigGeneral.autosave_frequency) { - gConfigGeneral.autosave_frequency = (uint8)dropdownIndex; - config_save_default(); + + case WINDOW_OPTIONS_PAGE_AUDIO: + switch (widgetIndex) { + case WIDX_SOUND_DROPDOWN: + audio_init2(dropdownIndex); + if (dropdownIndex < gAudioDeviceCount) { +#ifdef USE_MIXER + if (dropdownIndex == 0) { + Mixer_Init(NULL); + } + else { + Mixer_Init(gAudioDevices[dropdownIndex].name); + } +#endif + } + /*#ifdef _MSC_VER + __asm movzx ax, dropdownIndex + #else + __asm__ ( "movzx ax, %[dropdownIndex] " : : [dropdownIndex] "g" ((char)dropdownIndex) ); + #endif + // the switch replaces ax value + RCT2_CALLPROC_EBPSAFE(0x006BA9B5); // part of init audio*/ + window_invalidate(w); + break; + case WIDX_TITLE_MUSIC_DROPDOWN: + if ((dropdownIndex == 1 || dropdownIndex == 3) && !platform_file_exists(get_file_path(PATH_ID_CSS50))) { + window_error_open(2742, 2743); + } + else { + gConfigSound.title_music = (sint8)dropdownIndex; + config_save_default(); + window_invalidate(w); + } + + stop_title_music(); + if (dropdownIndex != 0) + start_title_music(); + break; } break; - case WIDX_DATE_FORMAT_DROPDOWN: - if (dropdownIndex != gConfigGeneral.date_format) { - gConfigGeneral.date_format = (uint8)dropdownIndex; - config_save_default(); - gfx_invalidate_screen(); + + case WINDOW_OPTIONS_PAGE_CONTROLS: + break; + + case WINDOW_OPTIONS_PAGE_MISC: + switch (widgetIndex) { + case WIDX_AUTOSAVE_DROPDOWN: + if (dropdownIndex != gConfigGeneral.autosave_frequency) { + gConfigGeneral.autosave_frequency = (uint8)dropdownIndex; + config_save_default(); + window_invalidate(w); + } + break; } break; - case WIDX_THEMES_DROPDOWN: - if (dropdownIndex != -1) { - theme_change_preset(dropdownIndex); - } - config_save_default(); + + case WINDOW_OPTIONS_PAGE_TWITCH: break; } } /** -* +* * rct2: 0x006BAD48 */ static void window_options_invalidate() { rct_window *w; - int i; sint32 currentSoundDevice; window_get_register(w); colour_scheme_update(w); - window_options_set_pressed_tab(w); - for (i = WIDX_RESOLUTION; i < WINDOW_OPTIONS_WIDGETS_SIZE; i++) { - window_options_widgets[i].type = WWT_EMPTY; + if (window_options_page_widgets[w->page] != w->widgets) { + w->widgets = window_options_page_widgets[w->page]; + window_init_scroll_widgets(w); } + window_options_set_pressed_tab(w); switch (w->page) { case WINDOW_OPTIONS_PAGE_DISPLAY: - // resolution RCT2_GLOBAL(0x013CE952 + 16, uint16) = (uint16)gConfigGeneral.fullscreen_width; RCT2_GLOBAL(0x013CE952 + 18, uint16) = (uint16)gConfigGeneral.fullscreen_height; RCT2_GLOBAL(0x013CE952 + 12, uint16) = 2773 + gConfigGeneral.fullscreen_mode; @@ -812,40 +958,27 @@ static void window_options_invalidate() w->disabled_widgets &= ~(1 << WIDX_RESOLUTION); } - // landscape tile smoothing checkbox - if ((RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FLAGS, uint8) & CONFIG_FLAG_DISABLE_SMOOTH_LANDSCAPE)) - w->pressed_widgets &= ~(1ULL << WIDX_TILE_SMOOTHING_CHECKBOX); - else - w->pressed_widgets |= (1ULL << WIDX_TILE_SMOOTHING_CHECKBOX); - - // show gridlines checkbox - if ((RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FLAGS, uint8) & CONFIG_FLAG_ALWAYS_SHOW_GRIDLINES)) - w->pressed_widgets |= (1ULL << WIDX_GRIDLINES_CHECKBOX); - else - w->pressed_widgets &= ~(1ULL << WIDX_GRIDLINES_CHECKBOX); - - // show hardware display - if (gConfigGeneral.hardware_display) - w->pressed_widgets |= (1ULL << WIDX_HARDWARE_DISPLAY_CHECKBOX); - else - w->pressed_widgets &= ~(1ULL << WIDX_HARDWARE_DISPLAY_CHECKBOX); + widget_set_checkbox_value(w, WIDX_TILE_SMOOTHING_CHECKBOX, (RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FLAGS, uint8) & CONFIG_FLAG_DISABLE_SMOOTH_LANDSCAPE) == 0); + widget_set_checkbox_value(w, WIDX_GRIDLINES_CHECKBOX, RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FLAGS, uint8) & CONFIG_FLAG_ALWAYS_SHOW_GRIDLINES); + widget_set_checkbox_value(w, WIDX_HARDWARE_DISPLAY_CHECKBOX, gConfigGeneral.hardware_display); // construction marker: celsius/fahrenheit - window_options_widgets[WIDX_CONSTRUCTION_MARKER].image = STR_WHITE + RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_CONSTRUCTION_MARKER, uint8); + window_options_display_widgets[WIDX_CONSTRUCTION_MARKER].image = STR_WHITE + RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_CONSTRUCTION_MARKER, uint8); - window_options_widgets[WIDX_RESOLUTION].type = WWT_DROPDOWN; - window_options_widgets[WIDX_RESOLUTION_DROPDOWN].type = WWT_DROPDOWN_BUTTON; - window_options_widgets[WIDX_FULLSCREEN].type = WWT_DROPDOWN; - window_options_widgets[WIDX_FULLSCREEN_DROPDOWN].type = WWT_DROPDOWN_BUTTON; - window_options_widgets[WIDX_TILE_SMOOTHING_CHECKBOX].type = WWT_CHECKBOX; - window_options_widgets[WIDX_GRIDLINES_CHECKBOX].type = WWT_CHECKBOX; - window_options_widgets[WIDX_CONSTRUCTION_MARKER].type = WWT_DROPDOWN; - window_options_widgets[WIDX_CONSTRUCTION_MARKER_DROPDOWN].type = WWT_DROPDOWN_BUTTON; - window_options_widgets[WIDX_HARDWARE_DISPLAY_CHECKBOX].type = WWT_CHECKBOX; - window_options_widgets[WIDX_THEMES].type = WWT_DROPDOWN; - window_options_widgets[WIDX_THEMES_DROPDOWN].type = WWT_DROPDOWN_BUTTON; - window_options_widgets[WIDX_THEMES_BUTTON].type = WWT_DROPDOWN_BUTTON; + window_options_display_widgets[WIDX_RESOLUTION].type = WWT_DROPDOWN; + window_options_display_widgets[WIDX_RESOLUTION_DROPDOWN].type = WWT_DROPDOWN_BUTTON; + window_options_display_widgets[WIDX_FULLSCREEN].type = WWT_DROPDOWN; + window_options_display_widgets[WIDX_FULLSCREEN_DROPDOWN].type = WWT_DROPDOWN_BUTTON; + window_options_display_widgets[WIDX_TILE_SMOOTHING_CHECKBOX].type = WWT_CHECKBOX; + window_options_display_widgets[WIDX_GRIDLINES_CHECKBOX].type = WWT_CHECKBOX; + window_options_display_widgets[WIDX_CONSTRUCTION_MARKER].type = WWT_DROPDOWN; + window_options_display_widgets[WIDX_CONSTRUCTION_MARKER_DROPDOWN].type = WWT_DROPDOWN_BUTTON; + window_options_display_widgets[WIDX_HARDWARE_DISPLAY_CHECKBOX].type = WWT_CHECKBOX; + window_options_display_widgets[WIDX_THEMES].type = WWT_DROPDOWN; + window_options_display_widgets[WIDX_THEMES_DROPDOWN].type = WWT_DROPDOWN_BUTTON; + window_options_display_widgets[WIDX_THEMES_BUTTON].type = WWT_DROPDOWN_BUTTON; break; + case WINDOW_OPTIONS_PAGE_CULTURE: // currency: pounds, dollars, etc. (10 total) RCT2_GLOBAL(0x013CE952 + 12, uint16) = STR_POUNDS + gConfigGeneral.currency_format; @@ -859,26 +992,28 @@ static void window_options_invalidate() // height: units/real values RCT2_GLOBAL(0x013CE952 + 6, uint16) = gConfigGeneral.show_height_as_units ? STR_UNITS : STR_REAL_VALUES; - window_options_widgets[WIDX_LANGUAGE].type = WWT_DROPDOWN; - window_options_widgets[WIDX_LANGUAGE_DROPDOWN].type = WWT_DROPDOWN_BUTTON; - window_options_widgets[WIDX_CURRENCY].type = WWT_DROPDOWN; - window_options_widgets[WIDX_CURRENCY_DROPDOWN].type = WWT_DROPDOWN_BUTTON; - window_options_widgets[WIDX_DISTANCE].type = WWT_DROPDOWN; - window_options_widgets[WIDX_DISTANCE_DROPDOWN].type = WWT_DROPDOWN_BUTTON; - window_options_widgets[WIDX_TEMPERATURE].type = WWT_DROPDOWN; - window_options_widgets[WIDX_TEMPERATURE_DROPDOWN].type = WWT_DROPDOWN_BUTTON; - window_options_widgets[WIDX_HEIGHT_LABELS].type = WWT_DROPDOWN; - window_options_widgets[WIDX_HEIGHT_LABELS_DROPDOWN].type = WWT_DROPDOWN_BUTTON; - window_options_widgets[WIDX_DATE_FORMAT].type = WWT_DROPDOWN; - window_options_widgets[WIDX_DATE_FORMAT_DROPDOWN].type = WWT_DROPDOWN_BUTTON; + window_options_culture_widgets[WIDX_LANGUAGE].type = WWT_DROPDOWN; + window_options_culture_widgets[WIDX_LANGUAGE_DROPDOWN].type = WWT_DROPDOWN_BUTTON; + window_options_culture_widgets[WIDX_CURRENCY].type = WWT_DROPDOWN; + window_options_culture_widgets[WIDX_CURRENCY_DROPDOWN].type = WWT_DROPDOWN_BUTTON; + window_options_culture_widgets[WIDX_DISTANCE].type = WWT_DROPDOWN; + window_options_culture_widgets[WIDX_DISTANCE_DROPDOWN].type = WWT_DROPDOWN_BUTTON; + window_options_culture_widgets[WIDX_TEMPERATURE].type = WWT_DROPDOWN; + window_options_culture_widgets[WIDX_TEMPERATURE_DROPDOWN].type = WWT_DROPDOWN_BUTTON; + window_options_culture_widgets[WIDX_HEIGHT_LABELS].type = WWT_DROPDOWN; + window_options_culture_widgets[WIDX_HEIGHT_LABELS_DROPDOWN].type = WWT_DROPDOWN_BUTTON; + window_options_culture_widgets[WIDX_DATE_FORMAT].type = WWT_DROPDOWN; + window_options_culture_widgets[WIDX_DATE_FORMAT_DROPDOWN].type = WWT_DROPDOWN_BUTTON; break; + case WINDOW_OPTIONS_PAGE_AUDIO: currentSoundDevice = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_SOUND_DEVICE, sint32); // sound devices if (currentSoundDevice == -1 || gAudioDeviceCount == 0) { RCT2_GLOBAL(0x013CE952, uint16) = STR_SOUND_NONE; - } else { + } + else { RCT2_GLOBAL(0x013CE952, uint16) = 1170; RCT2_GLOBAL(0x013CE952 + 2, uint32) = (uint32)gAudioDevices[currentSoundDevice].name; } @@ -892,61 +1027,53 @@ static void window_options_invalidate() widget_set_checkbox_value(w, WIDX_SOUND_CHECKBOX, gConfigSound.sound); widget_set_checkbox_value(w, WIDX_MUSIC_CHECKBOX, RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_MUSIC, uint8)); - window_options_widgets[WIDX_SOUND].type = WWT_DROPDOWN; - window_options_widgets[WIDX_SOUND_DROPDOWN].type = WWT_DROPDOWN_BUTTON; - window_options_widgets[WIDX_SOUND_CHECKBOX].type = WWT_CHECKBOX; - window_options_widgets[WIDX_MUSIC_CHECKBOX].type = WWT_CHECKBOX; - window_options_widgets[WIDX_TITLE_MUSIC].type = WWT_DROPDOWN; - window_options_widgets[WIDX_TITLE_MUSIC_DROPDOWN].type = WWT_DROPDOWN_BUTTON; + window_options_audio_widgets[WIDX_SOUND].type = WWT_DROPDOWN; + window_options_audio_widgets[WIDX_SOUND_DROPDOWN].type = WWT_DROPDOWN_BUTTON; + window_options_audio_widgets[WIDX_SOUND_CHECKBOX].type = WWT_CHECKBOX; + window_options_audio_widgets[WIDX_MUSIC_CHECKBOX].type = WWT_CHECKBOX; + window_options_audio_widgets[WIDX_TITLE_MUSIC].type = WWT_DROPDOWN; + window_options_audio_widgets[WIDX_TITLE_MUSIC_DROPDOWN].type = WWT_DROPDOWN_BUTTON; break; - case WINDOW_OPTIONS_PAGE_INPUT: + + case WINDOW_OPTIONS_PAGE_CONTROLS: widget_set_checkbox_value(w, WIDX_SCREEN_EDGE_SCROLLING, gConfigGeneral.edge_scrolling); widget_set_checkbox_value(w, WIDX_TOOLBAR_SHOW_FINANCES, gConfigInterface.toolbar_show_finances); widget_set_checkbox_value(w, WIDX_TOOLBAR_SHOW_RESEARCH, gConfigInterface.toolbar_show_research); widget_set_checkbox_value(w, WIDX_TOOLBAR_SHOW_CHEATS, gConfigInterface.toolbar_show_cheats); - window_options_widgets[WIDX_SCREEN_EDGE_SCROLLING].type = WWT_CHECKBOX; - window_options_widgets[WIDX_HOTKEY_DROPDOWN].type = WWT_DROPDOWN_BUTTON; - window_options_widgets[WIDX_TOOLBAR_SHOW_FINANCES].type = WWT_CHECKBOX; - window_options_widgets[WIDX_TOOLBAR_SHOW_RESEARCH].type = WWT_CHECKBOX; - window_options_widgets[WIDX_TOOLBAR_SHOW_CHEATS].type = WWT_CHECKBOX; + window_options_controls_widgets[WIDX_SCREEN_EDGE_SCROLLING].type = WWT_CHECKBOX; + window_options_controls_widgets[WIDX_HOTKEY_DROPDOWN].type = WWT_DROPDOWN_BUTTON; + window_options_controls_widgets[WIDX_TOOLBAR_SHOW_FINANCES].type = WWT_CHECKBOX; + window_options_controls_widgets[WIDX_TOOLBAR_SHOW_RESEARCH].type = WWT_CHECKBOX; + window_options_controls_widgets[WIDX_TOOLBAR_SHOW_CHEATS].type = WWT_CHECKBOX; break; + case WINDOW_OPTIONS_PAGE_MISC: - widget_set_checkbox_value(w, WIDX_ALLOW_SUBTYPE_SWITCHING, gConfigInterface.allow_subtype_switching); - - // real name checkbox - if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_SHOW_REAL_GUEST_NAMES) - w->pressed_widgets |= (1ULL << WIDX_REAL_NAME_CHECKBOX); - else - w->pressed_widgets &= ~(1ULL << WIDX_REAL_NAME_CHECKBOX); - - // save plugin data checkbox - if (gConfigGeneral.save_plugin_data) - w->pressed_widgets |= (1ULL << WIDX_SAVE_PLUGIN_DATA_CHECKBOX); - else - w->pressed_widgets &= ~(1ULL << WIDX_SAVE_PLUGIN_DATA_CHECKBOX); - // unknown park flag can disable real name checkbox if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & 0x8000) w->disabled_widgets |= (1ULL << WIDX_REAL_NAME_CHECKBOX); // save plugin data checkbox: visible or not if (RCT2_GLOBAL(RCT2_ADDRESS_CUSTOM_OBJECTS_INSTALLED, uint8) == 1) - window_options_widgets[WIDX_SAVE_PLUGIN_DATA_CHECKBOX].type = WWT_EMPTY; + window_options_misc_widgets[WIDX_SAVE_PLUGIN_DATA_CHECKBOX].type = WWT_EMPTY; else - window_options_widgets[WIDX_SAVE_PLUGIN_DATA_CHECKBOX].type = WWT_CHECKBOX; + window_options_misc_widgets[WIDX_SAVE_PLUGIN_DATA_CHECKBOX].type = WWT_CHECKBOX; + widget_set_checkbox_value(w, WIDX_ALLOW_SUBTYPE_SWITCHING, gConfigInterface.allow_subtype_switching); + widget_set_checkbox_value(w, WIDX_REAL_NAME_CHECKBOX, RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_SHOW_REAL_GUEST_NAMES); + widget_set_checkbox_value(w, WIDX_SAVE_PLUGIN_DATA_CHECKBOX, gConfigGeneral.save_plugin_data); widget_set_checkbox_value(w, WIDX_DEBUGGING_TOOLS, gConfigGeneral.debugging_tools); widget_set_checkbox_value(w, WIDX_TEST_UNFINISHED_TRACKS, gConfigGeneral.test_unfinished_tracks); - window_options_widgets[WIDX_REAL_NAME_CHECKBOX].type = WWT_CHECKBOX; - window_options_widgets[WIDX_SAVE_PLUGIN_DATA_CHECKBOX].type = WWT_CHECKBOX; - window_options_widgets[WIDX_AUTOSAVE].type = WWT_DROPDOWN; - window_options_widgets[WIDX_AUTOSAVE_DROPDOWN].type = WWT_DROPDOWN_BUTTON; - window_options_widgets[WIDX_ALLOW_SUBTYPE_SWITCHING].type = WWT_CHECKBOX; - window_options_widgets[WIDX_DEBUGGING_TOOLS].type = WWT_CHECKBOX; - window_options_widgets[WIDX_TEST_UNFINISHED_TRACKS].type = WWT_CHECKBOX; + window_options_misc_widgets[WIDX_REAL_NAME_CHECKBOX].type = WWT_CHECKBOX; + window_options_misc_widgets[WIDX_SAVE_PLUGIN_DATA_CHECKBOX].type = WWT_CHECKBOX; + window_options_misc_widgets[WIDX_AUTOSAVE].type = WWT_DROPDOWN; + window_options_misc_widgets[WIDX_AUTOSAVE_DROPDOWN].type = WWT_DROPDOWN_BUTTON; + window_options_misc_widgets[WIDX_ALLOW_SUBTYPE_SWITCHING].type = WWT_CHECKBOX; + window_options_misc_widgets[WIDX_DEBUGGING_TOOLS].type = WWT_CHECKBOX; + window_options_misc_widgets[WIDX_TEST_UNFINISHED_TRACKS].type = WWT_CHECKBOX; break; + case WINDOW_OPTIONS_PAGE_TWITCH: widget_set_checkbox_value(w, WIDX_FOLLOWER_PEEP_NAMES_CHECKBOX, gConfigTwitch.enable_follower_peep_names); widget_set_checkbox_value(w, WIDX_FOLLOWER_PEEP_TRACKING_CHECKBOX, gConfigTwitch.enable_follower_peep_tracking); @@ -954,13 +1081,12 @@ static void window_options_invalidate() widget_set_checkbox_value(w, WIDX_CHAT_PEEP_TRACKING_CHECKBOX, gConfigTwitch.enable_chat_peep_tracking); widget_set_checkbox_value(w, WIDX_NEWS_CHECKBOX, gConfigTwitch.enable_news); - window_options_widgets[WIDX_CHANNEL_BUTTON].type = WWT_DROPDOWN_BUTTON; - window_options_widgets[WIDX_FOLLOWER_PEEP_NAMES_CHECKBOX].type = WWT_CHECKBOX; - window_options_widgets[WIDX_FOLLOWER_PEEP_TRACKING_CHECKBOX].type = WWT_CHECKBOX; - window_options_widgets[WIDX_CHAT_PEEP_NAMES_CHECKBOX].type = WWT_CHECKBOX; - window_options_widgets[WIDX_CHAT_PEEP_TRACKING_CHECKBOX].type = WWT_CHECKBOX; - window_options_widgets[WIDX_NEWS_CHECKBOX].type = WWT_CHECKBOX; - + window_options_twitch_widgets[WIDX_CHANNEL_BUTTON].type = WWT_DROPDOWN_BUTTON; + window_options_twitch_widgets[WIDX_FOLLOWER_PEEP_NAMES_CHECKBOX].type = WWT_CHECKBOX; + window_options_twitch_widgets[WIDX_FOLLOWER_PEEP_TRACKING_CHECKBOX].type = WWT_CHECKBOX; + window_options_twitch_widgets[WIDX_CHAT_PEEP_NAMES_CHECKBOX].type = WWT_CHECKBOX; + window_options_twitch_widgets[WIDX_CHAT_PEEP_TRACKING_CHECKBOX].type = WWT_CHECKBOX; + window_options_twitch_widgets[WIDX_NEWS_CHECKBOX].type = WWT_CHECKBOX; break; } } @@ -988,66 +1114,66 @@ static void window_options_paint() switch (w->page) { case WINDOW_OPTIONS_PAGE_DISPLAY: - gfx_draw_string_left(dpi, STR_DISPLAY_RESOLUTION, w, 0, w->x + 10, w->y + window_options_widgets[WIDX_RESOLUTION].top + 1); - gfx_draw_string_left(dpi, STR_FULLSCREEN_MODE, w, 12, w->x + 10, w->y + window_options_widgets[WIDX_FULLSCREEN].top + 1); - gfx_draw_string_left(dpi, STR_CONSTRUCTION_MARKER, w, 0, w->x + 10, w->y + window_options_widgets[WIDX_CONSTRUCTION_MARKER].top + 1); + gfx_draw_string_left(dpi, STR_DISPLAY_RESOLUTION, w, w->colours[1], w->x + 10, w->y + window_options_display_widgets[WIDX_RESOLUTION].top + 1); + gfx_draw_string_left(dpi, STR_FULLSCREEN_MODE, w, w->colours[1], w->x + 10, w->y + window_options_display_widgets[WIDX_FULLSCREEN].top + 1); + gfx_draw_string_left(dpi, STR_CONSTRUCTION_MARKER, w, w->colours[1], w->x + 10, w->y + window_options_display_widgets[WIDX_CONSTRUCTION_MARKER].top + 1); RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint32) = (uint32)&gConfigThemes.presets[gCurrentTheme].name; - gfx_draw_string_left(dpi, 5238, NULL, w->colours[1], w->x + 10, w->y + window_options_widgets[WIDX_THEMES].top + 1); + gfx_draw_string_left(dpi, 5238, NULL, w->colours[1], w->x + 10, w->y + window_options_display_widgets[WIDX_THEMES].top + 1); gfx_draw_string_left_clipped( dpi, 1170, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, w->colours[1], - w->x + window_options_widgets[WIDX_THEMES].left + 1, - w->y + window_options_widgets[WIDX_THEMES].top, - window_options_widgets[WIDX_THEMES_DROPDOWN].left - window_options_widgets[WIDX_THEMES].left - 4 + w->x + window_options_display_widgets[WIDX_THEMES].left + 1, + w->y + window_options_display_widgets[WIDX_THEMES].top, + window_options_display_widgets[WIDX_THEMES_DROPDOWN].left - window_options_display_widgets[WIDX_THEMES].left - 4 ); break; case WINDOW_OPTIONS_PAGE_CULTURE: - gfx_draw_string_left(dpi, 2776, w, 12, w->x + 10, w->y + window_options_widgets[WIDX_LANGUAGE].top + 1); + gfx_draw_string_left(dpi, 2776, w, w->colours[1], w->x + 10, w->y + window_options_culture_widgets[WIDX_LANGUAGE].top + 1); gfx_draw_string( dpi, (char*)language_names[gCurrentLanguage], - 12, - w->x + window_options_widgets[WIDX_LANGUAGE].left + 1, - w->y + window_options_widgets[WIDX_LANGUAGE].top + w->colours[1], + w->x + window_options_culture_widgets[WIDX_LANGUAGE].left + 1, + w->y + window_options_culture_widgets[WIDX_LANGUAGE].top ); - gfx_draw_string_left(dpi, STR_CURRENCY, w, 0, w->x + 10, w->y + window_options_widgets[WIDX_CURRENCY].top + 1); - gfx_draw_string_left(dpi, STR_DISTANCE_AND_SPEED, w, 0, w->x + 10, w->y + window_options_widgets[WIDX_DISTANCE].top + 1); - gfx_draw_string_left(dpi, STR_TEMPERATURE, w, 0, w->x + 10, w->y + window_options_widgets[WIDX_TEMPERATURE].top + 1); - gfx_draw_string_left(dpi, STR_HEIGHT_LABELS, w, 0, w->x + 10, w->y + window_options_widgets[WIDX_HEIGHT_LABELS].top + 1); - gfx_draw_string_left(dpi, 5161, w, 0, w->x + 10, w->y + window_options_widgets[WIDX_DATE_FORMAT].top + 1); + gfx_draw_string_left(dpi, STR_CURRENCY, w, w->colours[1], w->x + 10, w->y + window_options_culture_widgets[WIDX_CURRENCY].top + 1); + gfx_draw_string_left(dpi, STR_DISTANCE_AND_SPEED, w, w->colours[1], w->x + 10, w->y + window_options_culture_widgets[WIDX_DISTANCE].top + 1); + gfx_draw_string_left(dpi, STR_TEMPERATURE, w, w->colours[1], w->x + 10, w->y + window_options_culture_widgets[WIDX_TEMPERATURE].top + 1); + gfx_draw_string_left(dpi, STR_HEIGHT_LABELS, w, w->colours[1], w->x + 10, w->y + window_options_culture_widgets[WIDX_HEIGHT_LABELS].top + 1); + gfx_draw_string_left(dpi, 5161, w, w->colours[1], w->x + 10, w->y + window_options_culture_widgets[WIDX_DATE_FORMAT].top + 1); gfx_draw_string_left( dpi, 5162 + gConfigGeneral.date_format, NULL, - 12, - w->x + window_options_widgets[WIDX_DATE_FORMAT].left + 1, - w->y + window_options_widgets[WIDX_DATE_FORMAT].top + w->colours[1], + w->x + window_options_culture_widgets[WIDX_DATE_FORMAT].left + 1, + w->y + window_options_culture_widgets[WIDX_DATE_FORMAT].top ); break; case WINDOW_OPTIONS_PAGE_AUDIO: - gfx_draw_string_left(dpi, 2738, w, 12, w->x + 10, w->y + window_options_widgets[WIDX_TITLE_MUSIC].top + 1); + gfx_draw_string_left(dpi, 2738, w, w->colours[1], w->x + 10, w->y + window_options_audio_widgets[WIDX_TITLE_MUSIC].top + 1); gfx_draw_string_left( dpi, (gConfigSound.title_music == 3 ? 5126 : 2739 + gConfigSound.title_music), NULL, - 12, - w->x + window_options_widgets[WIDX_TITLE_MUSIC].left + 1, - w->y + window_options_widgets[WIDX_TITLE_MUSIC].top + w->colours[1], + w->x + window_options_audio_widgets[WIDX_TITLE_MUSIC].left + 1, + w->y + window_options_audio_widgets[WIDX_TITLE_MUSIC].top ); break; case WINDOW_OPTIONS_PAGE_MISC: - gfx_draw_string_left(dpi, 2700, w, 12, w->x + 10, w->y + window_options_widgets[WIDX_AUTOSAVE].top + 1); + gfx_draw_string_left(dpi, 2700, w, w->colours[1], w->x + 10, w->y + window_options_misc_widgets[WIDX_AUTOSAVE].top + 1); gfx_draw_string_left( dpi, 2701 + gConfigGeneral.autosave_frequency, NULL, - 12, - w->x + window_options_widgets[WIDX_AUTOSAVE].left + 1, - w->y + window_options_widgets[WIDX_AUTOSAVE].top + w->colours[1], + w->x + window_options_misc_widgets[WIDX_AUTOSAVE].left + 1, + w->y + window_options_misc_widgets[WIDX_AUTOSAVE].top ); break; } @@ -1101,6 +1227,9 @@ static void window_options_set_page(rct_window *w, int page) { w->page = page; w->frame_no = 0; + w->enabled_widgets = window_options_page_enabled_widgets[page]; + w->pressed_widgets = 0; + w->widgets = window_options_page_widgets[page]; window_invalidate(w); window_event_resize_call(w); @@ -1136,7 +1265,7 @@ static void window_options_draw_tab_images(rct_drawpixelinfo *dpi, rct_window *w window_options_draw_tab_image(dpi, w, WINDOW_OPTIONS_PAGE_DISPLAY, 5442); window_options_draw_tab_image(dpi, w, WINDOW_OPTIONS_PAGE_CULTURE, 5229); window_options_draw_tab_image(dpi, w, WINDOW_OPTIONS_PAGE_AUDIO, 5335); - window_options_draw_tab_image(dpi, w, WINDOW_OPTIONS_PAGE_INPUT, 5201); + window_options_draw_tab_image(dpi, w, WINDOW_OPTIONS_PAGE_CONTROLS, 5201); window_options_draw_tab_image(dpi, w, WINDOW_OPTIONS_PAGE_MISC, 5205); window_options_draw_tab_image(dpi, w, WINDOW_OPTIONS_PAGE_TWITCH, SPR_G2_TAB_TWITCH); }