diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 33ec4784ea..98871010d3 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -1269,7 +1269,7 @@ DEF_CONSOLE_CMD(ConRescanNewGRF) TarScanner::DoScan(); ScanNewGRFFiles(); - InvalidateWindowData(WC_GAME_OPTIONS, 0, 1); + InvalidateWindowData(WC_GAME_OPTIONS, 0, GOID_NEWGRF_RESCANNED); return true; } diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index b27f460839..50bb8cd143 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -117,7 +117,7 @@ public: ScanNewGRFFiles(); /* Yes... these are the NewGRF windows */ InvalidateWindowClassesData(WC_SAVELOAD); - InvalidateWindowData(WC_GAME_OPTIONS, 0, 1); + InvalidateWindowData(WC_GAME_OPTIONS, 0, GOID_NEWGRF_RESCANNED); break; case CONTENT_TYPE_SCENARIO: diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index f2ea18442f..8fcb1c0e4c 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -569,7 +569,7 @@ struct NewGRFWindow : public QueryStringBaseWindow { this->avails.SetFilterFuncs(this->filter_funcs); this->avails.ForceRebuild(); - this->OnInvalidateData(2); + this->OnInvalidateData(GOID_NEWGRF_LIST_EDITED); } ~NewGRFWindow() @@ -881,7 +881,7 @@ struct NewGRFWindow : public QueryStringBaseWindow { this->avail_pos = -1; this->avail_sel = NULL; this->avails.ForceRebuild(); - this->InvalidateData(2); + this->InvalidateData(GOID_NEWGRF_LIST_EDITED); break; } @@ -921,7 +921,7 @@ struct NewGRFWindow : public QueryStringBaseWindow { if (new_pos >= 0) this->avail_sel = this->avails[new_pos]; this->avails.ForceRebuild(); - this->InvalidateData(2); + this->InvalidateData(GOID_NEWGRF_LIST_EDITED); break; } @@ -989,7 +989,7 @@ struct NewGRFWindow : public QueryStringBaseWindow { this->avail_sel = NULL; this->avail_pos = -1; this->avails.ForceRebuild(); - this->InvalidateData(1); + this->InvalidateData(GOID_NEWGRF_RESCANNED); this->DeleteChildWindows(WC_QUERY_STRING); // Remove the parameter query window InvalidateWindowClassesData(WC_SAVELOAD); break; @@ -1010,7 +1010,7 @@ struct NewGRFWindow : public QueryStringBaseWindow { DeleteWindowByClass(WC_GRF_PARAMETERS); this->active_sel = NULL; - this->InvalidateData(3); + this->InvalidateData(GOID_NEWGRF_PRESET_LOADED); } virtual void OnQueryTextFinished(char *str) @@ -1033,24 +1033,18 @@ struct NewGRFWindow : public QueryStringBaseWindow { /** * Some data on this window has become invalid. - * @param data Information about the changed data. - * - 0: (optionally) build availables, update button status. - * - 1: build availables, Add newly found grfs, update button status. - * - 2: (optionally) build availables, Reset preset, + 3 - * - 3: (optionally) build availables, Update active scrollbar, update button status. - * - 4: Force a rebuild of the availables, + 2 + * @param data Information about the changed data. @see GameOptionsInvalidationData * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ virtual void OnInvalidateData(int data = 0, bool gui_scope = true) { if (!gui_scope) return; switch (data) { - default: NOT_REACHED(); - case 0: + default: /* Nothing important to do */ break; - case 1: + case GOID_NEWGRF_RESCANNED: /* Search the list for items that are now found and mark them as such. */ for (GRFConfig **l = &this->actives; *l != NULL; l = &(*l)->next) { GRFConfig *c = *l; @@ -1067,14 +1061,14 @@ struct NewGRFWindow : public QueryStringBaseWindow { delete c; } - /* FALL THROUGH */ - case 4: + this->avails.ForceRebuild(); /* FALL THROUGH */ - case 2: + case GOID_NEWGRF_LIST_EDITED: this->preset = -1; /* FALL THROUGH */ - case 3: { + case GOID_NEWGRF_PRESET_LOADED: { + /* Update scrollbars */ int i = 0; for (const GRFConfig *c = this->actives; c != NULL; c = c->next, i++) {} diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 9d0ce42b8c..55db5b1028 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -527,7 +527,7 @@ struct GameOptionsWindow : Window { /** * Some data on this window has become invalid. - * @param data Information about the changed data. + * @param data Information about the changed data. @see GameOptionsInvalidationData * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ virtual void OnInvalidateData(int data = 0, bool gui_scope = true) @@ -797,7 +797,7 @@ public: /** * Some data on this window has become invalid. - * @param data Information about the changed data. + * @param data Information about the changed data. @see GameOptionsInvalidationData * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ virtual void OnInvalidateData(int data = 0, bool gui_scope = true) diff --git a/src/window_type.h b/src/window_type.h index b456b9f4bc..fabcf2e628 100644 --- a/src/window_type.h +++ b/src/window_type.h @@ -115,6 +115,16 @@ enum WindowClass { WC_INVALID = 0xFFFF }; +/** + * Data value for #Window::OnInvalidateData() of windows with class #WC_GAME_OPTIONS. + */ +enum GameOptionsInvalidationData { + GOID_DEFAULT = 0, + GOID_NEWGRF_RESCANNED, ///< NewGRFs were just rescanned. + GOID_NEWGRF_LIST_EDITED, ///< List of active NewGRFs is being edited. + GOID_NEWGRF_PRESET_LOADED, ///< A NewGRF preset was picked. +}; + struct Window; /** Number to differentiate different windows of the same class */