diff options
author | frosch <frosch@openttd.org> | 2015-02-22 15:26:27 +0000 |
---|---|---|
committer | frosch <frosch@openttd.org> | 2015-02-22 15:26:27 +0000 |
commit | c639fb0d8eb0371a95c39027a986636f1ca8f764 (patch) | |
tree | 65de5e1182f4e5f05a6bd7394e4b71a57a783a32 | |
parent | f26e9bf59dd953ab76bf816ba7aad87638c22c21 (diff) | |
download | openttd-c639fb0d8eb0371a95c39027a986636f1ca8f764.tar.xz |
(svn r27163) -Fix [FS#6204]: Toolbars were not invalidated when changing max-vehicles settings. (adf88)
-rw-r--r-- | src/airport_gui.cpp | 12 | ||||
-rw-r--r-- | src/dock_gui.cpp | 8 | ||||
-rw-r--r-- | src/rail_gui.cpp | 12 | ||||
-rw-r--r-- | src/road_gui.cpp | 9 | ||||
-rw-r--r-- | src/settings.cpp | 7 | ||||
-rw-r--r-- | src/table/settings.ini | 9 |
6 files changed, 51 insertions, 6 deletions
diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index 29a0d83ad..6437f236c 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -82,6 +82,18 @@ struct BuildAirToolbarWindow : Window { if (_settings_client.gui.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0, false); } + /** + * Some data on this window has become invalid. + * @param data Information about the changed data. + * @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; + + if (!CanBuildVehicleInfrastructure(VEH_AIRCRAFT)) delete this; + } + virtual void OnClick(Point pt, int widget, int click_count) { switch (widget) { diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp index 95145945c..f6699daef 100644 --- a/src/dock_gui.cpp +++ b/src/dock_gui.cpp @@ -116,11 +116,17 @@ struct BuildDocksToolbarWindow : Window { virtual void OnInvalidateData(int data = 0, bool gui_scope = true) { if (!gui_scope) return; - this->SetWidgetsDisabledState(!CanBuildVehicleInfrastructure(VEH_SHIP), + + bool can_build = CanBuildVehicleInfrastructure(VEH_SHIP); + this->SetWidgetsDisabledState(!can_build, WID_DT_DEPOT, WID_DT_STATION, WID_DT_BUOY, WIDGET_LIST_END); + if (!can_build) { + DeleteWindowById(WC_BUILD_STATION, TRANSPORT_WATER); + DeleteWindowById(WC_BUILD_DEPOT, TRANSPORT_WATER); + } } virtual void OnClick(Point pt, int widget, int click_count) diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 17c6cec9b..a8c2fc6b3 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -435,6 +435,18 @@ struct BuildRailToolbarWindow : Window { } /** + * Some data on this window has become invalid. + * @param data Information about the changed data. + * @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; + + if (!CanBuildVehicleInfrastructure(VEH_TRAIN)) delete this; + } + + /** * Configures the rail toolbar for railtype given * @param railtype the railtype to display */ diff --git a/src/road_gui.cpp b/src/road_gui.cpp index 09b76a533..c058c020f 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -338,11 +338,18 @@ struct BuildRoadToolbarWindow : Window { virtual void OnInvalidateData(int data = 0, bool gui_scope = true) { if (!gui_scope) return; - this->SetWidgetsDisabledState(!CanBuildVehicleInfrastructure(VEH_ROAD), + + bool can_build = CanBuildVehicleInfrastructure(VEH_ROAD); + this->SetWidgetsDisabledState(!can_build, WID_ROT_DEPOT, WID_ROT_BUS_STATION, WID_ROT_TRUCK_STATION, WIDGET_LIST_END); + if (!can_build) { + DeleteWindowById(WC_BUILD_DEPOT, TRANSPORT_ROAD); + DeleteWindowById(WC_BUS_STATION, TRANSPORT_ROAD); + DeleteWindowById(WC_TRUCK_STATION, TRANSPORT_ROAD); + } } /** diff --git a/src/settings.cpp b/src/settings.cpp index 9dc08ecc1..ecad0239c 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1304,6 +1304,13 @@ static bool StationCatchmentChanged(int32 p1) return true; } +static bool MaxVehiclesChanged(int32 p1) +{ + InvalidateWindowClassesData(WC_BUILD_TOOLBAR); + MarkWholeScreenDirty(); + return true; +} + #ifdef ENABLE_NETWORK diff --git a/src/table/settings.ini b/src/table/settings.ini index f6134deca..24ad48632 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -41,6 +41,7 @@ static bool RedrawTownAuthority(int32 p1); static bool InvalidateCompanyInfrastructureWindow(int32 p1); static bool InvalidateCompanyWindow(int32 p1); static bool ZoomMinMaxChanged(int32 p1); +static bool MaxVehiclesChanged(int32 p1); #ifdef ENABLE_NETWORK static bool UpdateClientName(int32 p1); @@ -961,7 +962,7 @@ max = 5000 str = STR_CONFIG_SETTING_MAX_TRAINS strhelp = STR_CONFIG_SETTING_MAX_TRAINS_HELPTEXT strval = STR_JUST_COMMA -proc = RedrawScreen +proc = MaxVehiclesChanged cat = SC_BASIC [SDT_VAR] @@ -974,7 +975,7 @@ max = 5000 str = STR_CONFIG_SETTING_MAX_ROAD_VEHICLES strhelp = STR_CONFIG_SETTING_MAX_ROAD_VEHICLES_HELPTEXT strval = STR_JUST_COMMA -proc = RedrawScreen +proc = MaxVehiclesChanged cat = SC_BASIC [SDT_VAR] @@ -987,7 +988,7 @@ max = 5000 str = STR_CONFIG_SETTING_MAX_AIRCRAFT strhelp = STR_CONFIG_SETTING_MAX_AIRCRAFT_HELPTEXT strval = STR_JUST_COMMA -proc = RedrawScreen +proc = MaxVehiclesChanged cat = SC_BASIC [SDT_VAR] @@ -1000,7 +1001,7 @@ max = 5000 str = STR_CONFIG_SETTING_MAX_SHIPS strhelp = STR_CONFIG_SETTING_MAX_SHIPS_HELPTEXT strval = STR_JUST_COMMA -proc = RedrawScreen +proc = MaxVehiclesChanged cat = SC_BASIC [SDTG_BOOL] |