From b66129db7b1f513c0446605dc598269d38d3496a Mon Sep 17 00:00:00 2001 From: wolfreak99 Date: Fri, 17 Jun 2016 04:46:30 -0400 Subject: [PATCH 1/8] Filter Object Selection by "Selected only" and "Non-selected only" --- data/language/en-GB.txt | 2 + src/editor.c | 2 +- src/localisation/string_ids.h | 2 + src/windows/editor_object_selection.c | 63 ++++++++++++++++++++++++--- 4 files changed, 61 insertions(+), 8 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index 84408554fc..f3f3a43373 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -4188,6 +4188,8 @@ STR_5876 :{SMALLFONT}{BLACK}The engine to use for drawing the game. STR_5877 :Software STR_5878 :Software (hardware display) STR_5879 :OpenGL +STR_5880 :Selected Only +STR_5881 :Non-Selected Only ############# # Scenarios # diff --git a/src/editor.c b/src/editor.c index fca5a6fb70..e27861d91b 100644 --- a/src/editor.c +++ b/src/editor.c @@ -565,7 +565,7 @@ static bool editor_check_object_group_at_least_one_selected(int objectType) rct_object_entry *entry = gInstalledObjects; uint8 *objectFlag = RCT2_GLOBAL(RCT2_ADDRESS_EDITOR_OBJECT_FLAGS_LIST, uint8*); for (uint32 i = 0; i < numObjects; i++) { - if ((entry->flags & 0x0F) == objectType && (*objectFlag & 1)) { + if ((entry->flags & 0x0F) == objectType && (*objectFlag & OBJECT_SELECTION_FLAG_SELECTED)) { return true; } entry = object_get_next(entry); diff --git a/src/localisation/string_ids.h b/src/localisation/string_ids.h index c6f5076c8d..625cd286ce 100644 --- a/src/localisation/string_ids.h +++ b/src/localisation/string_ids.h @@ -2656,6 +2656,8 @@ enum { STR_DRAWING_ENGINE_SOFTWARE_WITH_HARDWARE_DISPLAY = 5878, STR_DRAWING_ENGINE_OPENGL = 5879, + STR_SELECTED_ONLY = 5880, + STR_NON_SELECTED_ONLY = 5881, // 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/windows/editor_object_selection.c b/src/windows/editor_object_selection.c index 53d294ba5a..1d18960ebd 100644 --- a/src/windows/editor_object_selection.c +++ b/src/windows/editor_object_selection.c @@ -56,6 +56,9 @@ enum { FILTER_ALL = 0x7EF, } FILTER_FLAGS; +bool _filter_selected = false; +bool _filter_nonselected = false; + uint32 _filter_flags; uint16 _filter_object_counts[11]; uint8 _filter_ride_tab; @@ -219,6 +222,7 @@ static int window_editor_object_selection_select_object(uint8 bh, int flags, rct static int get_object_from_object_selection(uint8 object_type, int y, uint8 *object_selection_flags, rct_object_entry **installed_entry); static void window_editor_object_selection_manage_tracks(); static void editor_load_selected_objects(); +static bool filter_selected(uint8* objectFlags); static bool filter_string(rct_object_entry *entry, rct_object_filters *filter); static bool filter_source(rct_object_entry *entry); static bool filter_chunks(rct_object_entry *entry, rct_object_filters *filter); @@ -333,7 +337,7 @@ static void visible_list_refresh(rct_window *w) for (int i = 0; i < numObjects; i++) { rct_object_filters *filter = get_object_filter(i); int type = entry->flags & 0x0F; - if (type == w->selected_tab && !(*itemFlags & OBJECT_SELECTION_FLAG_6) && filter_source(entry) && filter_string(entry, filter) && filter_chunks(entry, filter)) { + if (type == w->selected_tab && !(*itemFlags & OBJECT_SELECTION_FLAG_6) && filter_source(entry) && filter_string(entry, filter) && filter_chunks(entry, filter) && filter_selected(itemFlags)) { currentListItem->entry = entry; currentListItem->filter = filter; currentListItem->flags = itemFlags; @@ -912,15 +916,19 @@ void window_editor_object_selection_mousedown(int widgetIndex, rct_window*w, rct switch (widgetIndex) { case WIDX_FILTER_DROPDOWN: - num_items = 4; + num_items = 6; gDropdownItemsFormat[0] = 1156; gDropdownItemsFormat[1] = 1156; gDropdownItemsFormat[2] = 1156; gDropdownItemsFormat[3] = 1156; + gDropdownItemsFormat[4] = 1156; + gDropdownItemsFormat[5] = 1156; gDropdownItemsArgs[0] = STR_ROLLERCOASTER_TYCOON_2_DROPDOWN; gDropdownItemsArgs[1] = STR_OBJECT_FILTER_WW; gDropdownItemsArgs[2] = STR_OBJECT_FILTER_TT; gDropdownItemsArgs[3] = STR_OBJECT_FILTER_CUSTOM; + gDropdownItemsArgs[4] = STR_SELECTED_ONLY; + gDropdownItemsArgs[5] = STR_NON_SELECTED_ONLY; window_dropdown_show_text( w->x + widget->left, @@ -932,6 +940,9 @@ void window_editor_object_selection_mousedown(int widgetIndex, rct_window*w, rct ); gDropdownItemsChecked = _filter_flags & 0xF; + dropdown_set_checked(4, _filter_selected); + dropdown_set_checked(5, _filter_nonselected); + break; } @@ -944,8 +955,22 @@ static void window_editor_object_selection_dropdown(rct_window *w, int widgetInd switch (widgetIndex) { case WIDX_FILTER_DROPDOWN: - _filter_flags ^= (1 << dropdownIndex); - gConfigInterface.object_selection_filter_flags = _filter_flags; + if (dropdownIndex == 4) { + _filter_selected = !_filter_selected; + if (_filter_selected && _filter_nonselected) { + _filter_nonselected = false; + } + } + else if (dropdownIndex == 5) { + _filter_nonselected = !_filter_nonselected; + if (_filter_nonselected && _filter_selected) { + _filter_selected = false; + } + } + else { + _filter_flags ^= (1 << dropdownIndex); + gConfigInterface.object_selection_filter_flags = _filter_flags; + } config_save_default(); filter_update_counts(); @@ -1015,6 +1040,12 @@ static void window_editor_object_selection_scroll_mousedown(rct_window *w, int s return; } + if (_filter_selected != _filter_nonselected) { + filter_update_counts(); + visible_list_refresh(w); + window_invalidate(w); + } + if (!RCT2_GLOBAL(0xF43411, uint8) & 1) return; @@ -2052,6 +2083,21 @@ static void window_editor_object_selection_textinput(rct_window *w, int widgetIn window_invalidate(w); } +static bool filter_selected(uint8* objectFlag) { + if (_filter_selected == _filter_nonselected) { + return true; + } + if (_filter_selected && *objectFlag & OBJECT_SELECTION_FLAG_SELECTED) { + return true; + } + else if (_filter_nonselected && !(*objectFlag & OBJECT_SELECTION_FLAG_SELECTED)) { + return true; + } + else { + return false; + } +} + static bool filter_string(rct_object_entry *entry, rct_object_filters *filter) { // Nothing to search for @@ -2116,19 +2162,22 @@ static bool filter_chunks(rct_object_entry *entry, rct_object_filters *filter) static void filter_update_counts() { if (!_FILTER_ALL || strlen(_filter_string) > 0) { + int numObjects = gInstalledObjectsCount; rct_object_entry *installed_entry = gInstalledObjects; rct_object_filters *filter; + uint8 *objectFlag = RCT2_GLOBAL(RCT2_ADDRESS_EDITOR_OBJECT_FLAGS_LIST, uint8*); uint8 type; for (int i = 0; i < 11; i++) { _filter_object_counts[i] = 0; } - for (int i = gInstalledObjectsCount; i > 0; --i) { - filter = get_object_filter(gInstalledObjectsCount - i); + for (int i = 0; i < numObjects; i++) { + filter = get_object_filter(i); type = installed_entry->flags & 0xF; - if (filter_source(installed_entry) && filter_string(installed_entry, filter) && filter_chunks(installed_entry, filter)) { + if (filter_source(installed_entry) && filter_string(installed_entry, filter) && filter_chunks(installed_entry, filter) && filter_selected(objectFlag)) { _filter_object_counts[type]++; } installed_entry = object_get_next(installed_entry); + objectFlag++; } } } From 332e62b296496ecb560f7fb776c368c6e596fa14 Mon Sep 17 00:00:00 2001 From: wolfreak99 Date: Fri, 17 Jun 2016 07:57:04 -0400 Subject: [PATCH 2/8] Add seperator to filter dropdown --- src/windows/editor_object_selection.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/windows/editor_object_selection.c b/src/windows/editor_object_selection.c index 1d18960ebd..de9c1ee009 100644 --- a/src/windows/editor_object_selection.c +++ b/src/windows/editor_object_selection.c @@ -916,20 +916,22 @@ void window_editor_object_selection_mousedown(int widgetIndex, rct_window*w, rct switch (widgetIndex) { case WIDX_FILTER_DROPDOWN: - num_items = 6; + num_items = 7; gDropdownItemsFormat[0] = 1156; gDropdownItemsFormat[1] = 1156; gDropdownItemsFormat[2] = 1156; gDropdownItemsFormat[3] = 1156; - gDropdownItemsFormat[4] = 1156; + gDropdownItemsFormat[4] = 0; gDropdownItemsFormat[5] = 1156; + gDropdownItemsFormat[6] = 1156; gDropdownItemsArgs[0] = STR_ROLLERCOASTER_TYCOON_2_DROPDOWN; gDropdownItemsArgs[1] = STR_OBJECT_FILTER_WW; gDropdownItemsArgs[2] = STR_OBJECT_FILTER_TT; gDropdownItemsArgs[3] = STR_OBJECT_FILTER_CUSTOM; - gDropdownItemsArgs[4] = STR_SELECTED_ONLY; - gDropdownItemsArgs[5] = STR_NON_SELECTED_ONLY; - + gDropdownItemsArgs[4] = STR_NONE; + gDropdownItemsArgs[5] = STR_SELECTED_ONLY; + gDropdownItemsArgs[6] = STR_NON_SELECTED_ONLY; + window_dropdown_show_text( w->x + widget->left, w->y + widget->top, @@ -940,8 +942,8 @@ void window_editor_object_selection_mousedown(int widgetIndex, rct_window*w, rct ); gDropdownItemsChecked = _filter_flags & 0xF; - dropdown_set_checked(4, _filter_selected); - dropdown_set_checked(5, _filter_nonselected); + dropdown_set_checked(5, _filter_selected); + dropdown_set_checked(6, _filter_nonselected); break; @@ -955,13 +957,13 @@ static void window_editor_object_selection_dropdown(rct_window *w, int widgetInd switch (widgetIndex) { case WIDX_FILTER_DROPDOWN: - if (dropdownIndex == 4) { + if (dropdownIndex == 5) { _filter_selected = !_filter_selected; if (_filter_selected && _filter_nonselected) { _filter_nonselected = false; } } - else if (dropdownIndex == 5) { + else if (dropdownIndex == 6) { _filter_nonselected = !_filter_nonselected; if (_filter_nonselected && _filter_selected) { _filter_selected = false; From e2ba6aa6ed0b172b244fbcaeebf2e2c1ea2dbc6e Mon Sep 17 00:00:00 2001 From: wolfreak99 Date: Sat, 18 Jun 2016 20:52:38 -0400 Subject: [PATCH 3/8] Text capitalization adjustments for consistancy --- data/language/en-GB.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index f3f3a43373..ccd37d383a 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -4188,8 +4188,8 @@ STR_5876 :{SMALLFONT}{BLACK}The engine to use for drawing the game. STR_5877 :Software STR_5878 :Software (hardware display) STR_5879 :OpenGL -STR_5880 :Selected Only -STR_5881 :Non-Selected Only +STR_5880 :Selected only +STR_5881 :Non-selected only ############# # Scenarios # From 4afdf20f14919d0e2233cd5e0eaedc03230ef316 Mon Sep 17 00:00:00 2001 From: wolfreak99 Date: Tue, 21 Jun 2016 10:16:51 -0400 Subject: [PATCH 4/8] Do not show selected and non-selected in track manager mode (as track manager is a single-select interface) --- src/windows/editor_object_selection.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/windows/editor_object_selection.c b/src/windows/editor_object_selection.c index de9c1ee009..934370968a 100644 --- a/src/windows/editor_object_selection.c +++ b/src/windows/editor_object_selection.c @@ -916,22 +916,26 @@ void window_editor_object_selection_mousedown(int widgetIndex, rct_window*w, rct switch (widgetIndex) { case WIDX_FILTER_DROPDOWN: - num_items = 7; + num_items = 4; gDropdownItemsFormat[0] = 1156; gDropdownItemsFormat[1] = 1156; gDropdownItemsFormat[2] = 1156; gDropdownItemsFormat[3] = 1156; - gDropdownItemsFormat[4] = 0; - gDropdownItemsFormat[5] = 1156; - gDropdownItemsFormat[6] = 1156; gDropdownItemsArgs[0] = STR_ROLLERCOASTER_TYCOON_2_DROPDOWN; gDropdownItemsArgs[1] = STR_OBJECT_FILTER_WW; gDropdownItemsArgs[2] = STR_OBJECT_FILTER_TT; gDropdownItemsArgs[3] = STR_OBJECT_FILTER_CUSTOM; - gDropdownItemsArgs[4] = STR_NONE; - gDropdownItemsArgs[5] = STR_SELECTED_ONLY; - gDropdownItemsArgs[6] = STR_NON_SELECTED_ONLY; - + //Track manager cannot select multiple, show show selection filters if not in track manager + if (!(gScreenFlags & SCREEN_FLAGS_TRACK_MANAGER)) { + num_items = 7; + gDropdownItemsFormat[4] = 0; + gDropdownItemsFormat[5] = 1156; + gDropdownItemsFormat[6] = 1156; + gDropdownItemsArgs[4] = STR_NONE; + gDropdownItemsArgs[5] = STR_SELECTED_ONLY; + gDropdownItemsArgs[6] = STR_NON_SELECTED_ONLY; + } + window_dropdown_show_text( w->x + widget->left, w->y + widget->top, @@ -942,9 +946,10 @@ void window_editor_object_selection_mousedown(int widgetIndex, rct_window*w, rct ); gDropdownItemsChecked = _filter_flags & 0xF; - dropdown_set_checked(5, _filter_selected); - dropdown_set_checked(6, _filter_nonselected); - + if (!(gScreenFlags & SCREEN_FLAGS_TRACK_MANAGER)) { + dropdown_set_checked(5, _filter_selected); + dropdown_set_checked(6, _filter_nonselected); + } break; } From b587b15ddde69fae2785d07c9f5930de5a6d8ea4 Mon Sep 17 00:00:00 2001 From: wolfreak99 Date: Tue, 21 Jun 2016 14:30:07 -0400 Subject: [PATCH 5/8] Formatting improvements (pt 1) --- src/windows/editor_object_selection.c | 57 ++++++++++++++------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/src/windows/editor_object_selection.c b/src/windows/editor_object_selection.c index 934370968a..ce7d4bd5a8 100644 --- a/src/windows/editor_object_selection.c +++ b/src/windows/editor_object_selection.c @@ -337,12 +337,16 @@ static void visible_list_refresh(rct_window *w) for (int i = 0; i < numObjects; i++) { rct_object_filters *filter = get_object_filter(i); int type = entry->flags & 0x0F; - if (type == w->selected_tab && !(*itemFlags & OBJECT_SELECTION_FLAG_6) && filter_source(entry) && filter_string(entry, filter) && filter_chunks(entry, filter) && filter_selected(itemFlags)) { - currentListItem->entry = entry; - currentListItem->filter = filter; - currentListItem->flags = itemFlags; - currentListItem++; - _numListItems++; + if (type == w->selected_tab && !(*itemFlags & OBJECT_SELECTION_FLAG_6) + && filter_source(entry) + && filter_string(entry, filter) + && filter_chunks(entry, filter) + && filter_selected(itemFlags)) { + currentListItem->entry = entry; + currentListItem->filter = filter; + currentListItem->flags = itemFlags; + currentListItem++; + _numListItems++; } entry = object_get_next(entry); @@ -906,7 +910,8 @@ static void window_editor_object_selection_resize(rct_window *w) { window_set_resize(w, 600, 400, 1200, 1000); } - +#define FILTER_DROPDOWN_POSITION_SELECTED 5 +#define FILTER_DROPDOWN_POSITION_NONSELECTED 6 void window_editor_object_selection_mousedown(int widgetIndex, rct_window*w, rct_widget* widget) { int num_items; @@ -925,15 +930,15 @@ void window_editor_object_selection_mousedown(int widgetIndex, rct_window*w, rct gDropdownItemsArgs[1] = STR_OBJECT_FILTER_WW; gDropdownItemsArgs[2] = STR_OBJECT_FILTER_TT; gDropdownItemsArgs[3] = STR_OBJECT_FILTER_CUSTOM; - //Track manager cannot select multiple, show show selection filters if not in track manager + //Track manager cannot select multiple, so only show selection filters if not in track manager if (!(gScreenFlags & SCREEN_FLAGS_TRACK_MANAGER)) { num_items = 7; gDropdownItemsFormat[4] = 0; - gDropdownItemsFormat[5] = 1156; - gDropdownItemsFormat[6] = 1156; + gDropdownItemsFormat[FILTER_DROPDOWN_POSITION_SELECTED] = 1156; + gDropdownItemsFormat[FILTER_DROPDOWN_POSITION_NONSELECTED] = 1156; gDropdownItemsArgs[4] = STR_NONE; - gDropdownItemsArgs[5] = STR_SELECTED_ONLY; - gDropdownItemsArgs[6] = STR_NON_SELECTED_ONLY; + gDropdownItemsArgs[FILTER_DROPDOWN_POSITION_SELECTED] = STR_SELECTED_ONLY; + gDropdownItemsArgs[FILTER_DROPDOWN_POSITION_NONSELECTED] = STR_NON_SELECTED_ONLY; } window_dropdown_show_text( @@ -947,8 +952,8 @@ void window_editor_object_selection_mousedown(int widgetIndex, rct_window*w, rct gDropdownItemsChecked = _filter_flags & 0xF; if (!(gScreenFlags & SCREEN_FLAGS_TRACK_MANAGER)) { - dropdown_set_checked(5, _filter_selected); - dropdown_set_checked(6, _filter_nonselected); + dropdown_set_checked(FILTER_DROPDOWN_POSITION_SELECTED, _filter_selected); + dropdown_set_checked(FILTER_DROPDOWN_POSITION_NONSELECTED, _filter_nonselected); } break; @@ -962,22 +967,18 @@ static void window_editor_object_selection_dropdown(rct_window *w, int widgetInd switch (widgetIndex) { case WIDX_FILTER_DROPDOWN: - if (dropdownIndex == 5) { + if (dropdownIndex == FILTER_DROPDOWN_POSITION_SELECTED) { _filter_selected = !_filter_selected; - if (_filter_selected && _filter_nonselected) { - _filter_nonselected = false; - } + _filter_nonselected = false; } - else if (dropdownIndex == 6) { + else if (dropdownIndex == FILTER_DROPDOWN_POSITION_NONSELECTED) { _filter_nonselected = !_filter_nonselected; - if (_filter_nonselected && _filter_selected) { - _filter_selected = false; - } + _filter_selected = false; } else { _filter_flags ^= (1 << dropdownIndex); - gConfigInterface.object_selection_filter_flags = _filter_flags; } + gConfigInterface.object_selection_filter_flags = _filter_flags; config_save_default(); filter_update_counts(); @@ -2169,7 +2170,6 @@ static bool filter_chunks(rct_object_entry *entry, rct_object_filters *filter) static void filter_update_counts() { if (!_FILTER_ALL || strlen(_filter_string) > 0) { - int numObjects = gInstalledObjectsCount; rct_object_entry *installed_entry = gInstalledObjects; rct_object_filters *filter; uint8 *objectFlag = RCT2_GLOBAL(RCT2_ADDRESS_EDITOR_OBJECT_FLAGS_LIST, uint8*); @@ -2177,11 +2177,14 @@ static void filter_update_counts() for (int i = 0; i < 11; i++) { _filter_object_counts[i] = 0; } - for (int i = 0; i < numObjects; i++) { + for (int i = 0; i < gInstalledObjectsCount; i++) { filter = get_object_filter(i); type = installed_entry->flags & 0xF; - if (filter_source(installed_entry) && filter_string(installed_entry, filter) && filter_chunks(installed_entry, filter) && filter_selected(objectFlag)) { - _filter_object_counts[type]++; + if (filter_source(installed_entry) + && filter_string(installed_entry, filter) + && filter_chunks(installed_entry, filter) + && filter_selected(objectFlag)) { + _filter_object_counts[type]++; } installed_entry = object_get_next(installed_entry); objectFlag++; From 08b5a1dc222f6455056acd355ba36937dc48a219 Mon Sep 17 00:00:00 2001 From: wolfreak99 Date: Tue, 21 Jun 2016 14:41:07 -0400 Subject: [PATCH 6/8] Switch from bools to filter_flags --- src/windows/editor_object_selection.c | 31 +++++++++++++++------------ 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/windows/editor_object_selection.c b/src/windows/editor_object_selection.c index ce7d4bd5a8..ff3f44b287 100644 --- a/src/windows/editor_object_selection.c +++ b/src/windows/editor_object_selection.c @@ -52,13 +52,12 @@ enum { FILTER_RIDE_WATER = (1 << 9), FILTER_RIDE_STALL = (1 << 10), + FILTER_SELECTED = (1 << 12), + FILTER_NONSELECTED = (1 << 13), FILTER_ALL = 0x7EF, } FILTER_FLAGS; -bool _filter_selected = false; -bool _filter_nonselected = false; - uint32 _filter_flags; uint16 _filter_object_counts[11]; uint8 _filter_ride_tab; @@ -70,6 +69,8 @@ char _filter_string[41]; #define _FILTER_WW (_filter_flags & FILTER_WW) #define _FILTER_TT (_filter_flags & FILTER_TT) #define _FILTER_CUSTOM (_filter_flags & FILTER_CUSTOM) +#define _FILTER_SELECTED (_filter_flags & FILTER_SELECTED) +#define _FILTER_NONSELECTED (_filter_flags & FILTER_NONSELECTED) enum { WINDOW_OBJECT_SELECTION_PAGE_RIDE_VEHICLES_ATTRACTIONS, @@ -910,6 +911,7 @@ static void window_editor_object_selection_resize(rct_window *w) { window_set_resize(w, 600, 400, 1200, 1000); } + #define FILTER_DROPDOWN_POSITION_SELECTED 5 #define FILTER_DROPDOWN_POSITION_NONSELECTED 6 void window_editor_object_selection_mousedown(int widgetIndex, rct_window*w, rct_widget* widget) @@ -952,8 +954,8 @@ void window_editor_object_selection_mousedown(int widgetIndex, rct_window*w, rct gDropdownItemsChecked = _filter_flags & 0xF; if (!(gScreenFlags & SCREEN_FLAGS_TRACK_MANAGER)) { - dropdown_set_checked(FILTER_DROPDOWN_POSITION_SELECTED, _filter_selected); - dropdown_set_checked(FILTER_DROPDOWN_POSITION_NONSELECTED, _filter_nonselected); + dropdown_set_checked(FILTER_DROPDOWN_POSITION_SELECTED, _FILTER_SELECTED); + dropdown_set_checked(FILTER_DROPDOWN_POSITION_NONSELECTED, _FILTER_NONSELECTED); } break; @@ -968,12 +970,12 @@ static void window_editor_object_selection_dropdown(rct_window *w, int widgetInd switch (widgetIndex) { case WIDX_FILTER_DROPDOWN: if (dropdownIndex == FILTER_DROPDOWN_POSITION_SELECTED) { - _filter_selected = !_filter_selected; - _filter_nonselected = false; + _filter_flags ^= FILTER_SELECTED; + _filter_flags &= ~FILTER_NONSELECTED; } else if (dropdownIndex == FILTER_DROPDOWN_POSITION_NONSELECTED) { - _filter_nonselected = !_filter_nonselected; - _filter_selected = false; + _filter_flags ^= FILTER_NONSELECTED; + _filter_flags &= ~FILTER_SELECTED; } else { _filter_flags ^= (1 << dropdownIndex); @@ -1048,7 +1050,7 @@ static void window_editor_object_selection_scroll_mousedown(rct_window *w, int s return; } - if (_filter_selected != _filter_nonselected) { + if (_FILTER_SELECTED || _FILTER_NONSELECTED) { filter_update_counts(); visible_list_refresh(w); window_invalidate(w); @@ -2092,13 +2094,13 @@ static void window_editor_object_selection_textinput(rct_window *w, int widgetIn } static bool filter_selected(uint8* objectFlag) { - if (_filter_selected == _filter_nonselected) { + if (_FILTER_SELECTED == _FILTER_NONSELECTED) { return true; } - if (_filter_selected && *objectFlag & OBJECT_SELECTION_FLAG_SELECTED) { + if (_FILTER_SELECTED && *objectFlag & OBJECT_SELECTION_FLAG_SELECTED) { return true; } - else if (_filter_nonselected && !(*objectFlag & OBJECT_SELECTION_FLAG_SELECTED)) { + else if (_FILTER_NONSELECTED && !(*objectFlag & OBJECT_SELECTION_FLAG_SELECTED)) { return true; } else { @@ -2170,6 +2172,7 @@ static bool filter_chunks(rct_object_entry *entry, rct_object_filters *filter) static void filter_update_counts() { if (!_FILTER_ALL || strlen(_filter_string) > 0) { + int numObjects = gInstalledObjectsCount; rct_object_entry *installed_entry = gInstalledObjects; rct_object_filters *filter; uint8 *objectFlag = RCT2_GLOBAL(RCT2_ADDRESS_EDITOR_OBJECT_FLAGS_LIST, uint8*); @@ -2177,7 +2180,7 @@ static void filter_update_counts() for (int i = 0; i < 11; i++) { _filter_object_counts[i] = 0; } - for (int i = 0; i < gInstalledObjectsCount; i++) { + for (int i = 0; i < numObjects; i++) { filter = get_object_filter(i); type = installed_entry->flags & 0xF; if (filter_source(installed_entry) From 296033826850b6013820ad534a398654d144ec19 Mon Sep 17 00:00:00 2001 From: wolfreak99 Date: Tue, 21 Jun 2016 15:15:01 -0400 Subject: [PATCH 7/8] numObjects to gInstalledObjectsCount --- src/windows/editor_object_selection.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/windows/editor_object_selection.c b/src/windows/editor_object_selection.c index ff3f44b287..00888b384f 100644 --- a/src/windows/editor_object_selection.c +++ b/src/windows/editor_object_selection.c @@ -2172,7 +2172,6 @@ static bool filter_chunks(rct_object_entry *entry, rct_object_filters *filter) static void filter_update_counts() { if (!_FILTER_ALL || strlen(_filter_string) > 0) { - int numObjects = gInstalledObjectsCount; rct_object_entry *installed_entry = gInstalledObjects; rct_object_filters *filter; uint8 *objectFlag = RCT2_GLOBAL(RCT2_ADDRESS_EDITOR_OBJECT_FLAGS_LIST, uint8*); @@ -2180,7 +2179,7 @@ static void filter_update_counts() for (int i = 0; i < 11; i++) { _filter_object_counts[i] = 0; } - for (int i = 0; i < numObjects; i++) { + for (uint32 i = 0; i < gInstalledObjectsCount; i++) { filter = get_object_filter(i); type = installed_entry->flags & 0xF; if (filter_source(installed_entry) From f9f0df82e5ef2e2b63f8ca13b40ccc8a62b6e1d9 Mon Sep 17 00:00:00 2001 From: wolfreak99 Date: Mon, 27 Jun 2016 13:32:43 -0400 Subject: [PATCH 8/8] refactor dropdown index to enum --- src/windows/editor_object_selection.c | 49 +++++++++++++++------------ 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/src/windows/editor_object_selection.c b/src/windows/editor_object_selection.c index 00888b384f..36b9a6dd4a 100644 --- a/src/windows/editor_object_selection.c +++ b/src/windows/editor_object_selection.c @@ -911,9 +911,16 @@ static void window_editor_object_selection_resize(rct_window *w) { window_set_resize(w, 600, 400, 1200, 1000); } - -#define FILTER_DROPDOWN_POSITION_SELECTED 5 -#define FILTER_DROPDOWN_POSITION_NONSELECTED 6 +enum +{ + DDIX_FILTER_RCT2, + DDIX_FILTER_WW, + DDIX_FILTER_TT, + DDIX_FILTER_CUSTOM, + DDIX_FILTER_SEPERATOR, + DDIX_FILTER_SELECTED, + DDIX_FILTER_NONSELECTED, +}; void window_editor_object_selection_mousedown(int widgetIndex, rct_window*w, rct_widget* widget) { int num_items; @@ -924,23 +931,23 @@ void window_editor_object_selection_mousedown(int widgetIndex, rct_window*w, rct case WIDX_FILTER_DROPDOWN: num_items = 4; - gDropdownItemsFormat[0] = 1156; - gDropdownItemsFormat[1] = 1156; - gDropdownItemsFormat[2] = 1156; - gDropdownItemsFormat[3] = 1156; - gDropdownItemsArgs[0] = STR_ROLLERCOASTER_TYCOON_2_DROPDOWN; - gDropdownItemsArgs[1] = STR_OBJECT_FILTER_WW; - gDropdownItemsArgs[2] = STR_OBJECT_FILTER_TT; - gDropdownItemsArgs[3] = STR_OBJECT_FILTER_CUSTOM; + gDropdownItemsFormat[DDIX_FILTER_RCT2] = 1156; + gDropdownItemsFormat[DDIX_FILTER_WW] = 1156; + gDropdownItemsFormat[DDIX_FILTER_TT] = 1156; + gDropdownItemsFormat[DDIX_FILTER_CUSTOM] = 1156; + gDropdownItemsArgs[DDIX_FILTER_RCT2] = STR_ROLLERCOASTER_TYCOON_2_DROPDOWN; + gDropdownItemsArgs[DDIX_FILTER_WW] = STR_OBJECT_FILTER_WW; + gDropdownItemsArgs[DDIX_FILTER_TT] = STR_OBJECT_FILTER_TT; + gDropdownItemsArgs[DDIX_FILTER_CUSTOM] = STR_OBJECT_FILTER_CUSTOM; //Track manager cannot select multiple, so only show selection filters if not in track manager if (!(gScreenFlags & SCREEN_FLAGS_TRACK_MANAGER)) { num_items = 7; - gDropdownItemsFormat[4] = 0; - gDropdownItemsFormat[FILTER_DROPDOWN_POSITION_SELECTED] = 1156; - gDropdownItemsFormat[FILTER_DROPDOWN_POSITION_NONSELECTED] = 1156; - gDropdownItemsArgs[4] = STR_NONE; - gDropdownItemsArgs[FILTER_DROPDOWN_POSITION_SELECTED] = STR_SELECTED_ONLY; - gDropdownItemsArgs[FILTER_DROPDOWN_POSITION_NONSELECTED] = STR_NON_SELECTED_ONLY; + gDropdownItemsFormat[DDIX_FILTER_SEPERATOR] = 0; + gDropdownItemsFormat[DDIX_FILTER_SELECTED] = 1156; + gDropdownItemsFormat[DDIX_FILTER_NONSELECTED] = 1156; + gDropdownItemsArgs[DDIX_FILTER_SEPERATOR] = STR_NONE; + gDropdownItemsArgs[DDIX_FILTER_SELECTED] = STR_SELECTED_ONLY; + gDropdownItemsArgs[DDIX_FILTER_NONSELECTED] = STR_NON_SELECTED_ONLY; } window_dropdown_show_text( @@ -954,8 +961,8 @@ void window_editor_object_selection_mousedown(int widgetIndex, rct_window*w, rct gDropdownItemsChecked = _filter_flags & 0xF; if (!(gScreenFlags & SCREEN_FLAGS_TRACK_MANAGER)) { - dropdown_set_checked(FILTER_DROPDOWN_POSITION_SELECTED, _FILTER_SELECTED); - dropdown_set_checked(FILTER_DROPDOWN_POSITION_NONSELECTED, _FILTER_NONSELECTED); + dropdown_set_checked(DDIX_FILTER_SELECTED, _FILTER_SELECTED); + dropdown_set_checked(DDIX_FILTER_NONSELECTED, _FILTER_NONSELECTED); } break; @@ -969,11 +976,11 @@ static void window_editor_object_selection_dropdown(rct_window *w, int widgetInd switch (widgetIndex) { case WIDX_FILTER_DROPDOWN: - if (dropdownIndex == FILTER_DROPDOWN_POSITION_SELECTED) { + if (dropdownIndex == DDIX_FILTER_SELECTED) { _filter_flags ^= FILTER_SELECTED; _filter_flags &= ~FILTER_NONSELECTED; } - else if (dropdownIndex == FILTER_DROPDOWN_POSITION_NONSELECTED) { + else if (dropdownIndex == DDIX_FILTER_NONSELECTED) { _filter_flags ^= FILTER_NONSELECTED; _filter_flags &= ~FILTER_SELECTED; }