summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/airport_gui.cpp12
-rw-r--r--src/dock_gui.cpp8
-rw-r--r--src/rail_gui.cpp12
-rw-r--r--src/road_gui.cpp9
-rw-r--r--src/settings.cpp7
-rw-r--r--src/table/settings.ini9
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]