summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan G Rennison <j.g.rennison@gmail.com>2020-01-06 20:31:57 +0000
committerCharles Pigott <charlespigott@googlemail.com>2020-01-12 19:37:43 +0000
commitf1734e7815653829d42ebd4def8c0d7d5aeae986 (patch)
treed87b30fd8f96bdb1fc9e5dfed8cfe7b854befbde
parent22ba048c89c4b594a1bf18b4d0ea9e09f38e6dbc (diff)
downloadopenttd-f1734e7815653829d42ebd4def8c0d7d5aeae986.tar.xz
Change: Only resort industry directory window on production change if necessary
-rw-r--r--src/industry.h8
-rw-r--r--src/industry_cmd.cpp8
-rw-r--r--src/industry_gui.cpp18
3 files changed, 25 insertions, 9 deletions
diff --git a/src/industry.h b/src/industry.h
index 932104ff4..f462cf482 100644
--- a/src/industry.h
+++ b/src/industry.h
@@ -197,4 +197,12 @@ struct IndustryBuildData {
extern IndustryBuildData _industry_builder;
+
+/** Special values for the industry list window for the data parameter of #InvalidateWindowData. */
+enum IndustryDirectoryInvalidateWindowData {
+ IDIWD_FORCE_REBUILD,
+ IDIWD_PRODUCTION_CHANGE,
+ IDIWD_FORCE_RESORT,
+};
+
#endif /* INDUSTRY_H */
diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp
index 628e33557..6dce3c0ce 100644
--- a/src/industry_cmd.cpp
+++ b/src/industry_cmd.cpp
@@ -204,7 +204,7 @@ Industry::~Industry()
*/
void Industry::PostDestructor(size_t index)
{
- InvalidateWindowData(WC_INDUSTRY_DIRECTORY, 0, 0);
+ InvalidateWindowData(WC_INDUSTRY_DIRECTORY, 0, IDIWD_FORCE_REBUILD);
}
@@ -1900,7 +1900,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type,
if (GetIndustrySpec(i->type)->behaviour & INDUSTRYBEH_PLANT_ON_BUILT) {
for (uint j = 0; j != 50; j++) PlantRandomFarmField(i);
}
- InvalidateWindowData(WC_INDUSTRY_DIRECTORY, 0, 0);
+ InvalidateWindowData(WC_INDUSTRY_DIRECTORY, 0, IDIWD_FORCE_REBUILD);
if (!_generating_world) PopulateStationsNearby(i);
}
@@ -2829,7 +2829,7 @@ void IndustryDailyLoop()
cur_company.Restore();
/* production-change */
- InvalidateWindowData(WC_INDUSTRY_DIRECTORY, 0, 1);
+ InvalidateWindowData(WC_INDUSTRY_DIRECTORY, 0, IDIWD_PRODUCTION_CHANGE);
}
void IndustryMonthlyLoop()
@@ -2851,7 +2851,7 @@ void IndustryMonthlyLoop()
cur_company.Restore();
/* production-change */
- InvalidateWindowData(WC_INDUSTRY_DIRECTORY, 0, 1);
+ InvalidateWindowData(WC_INDUSTRY_DIRECTORY, 0, IDIWD_PRODUCTION_CHANGE);
}
diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp
index 7a45c1192..7410cb3a3 100644
--- a/src/industry_gui.cpp
+++ b/src/industry_gui.cpp
@@ -1708,11 +1708,19 @@ public:
*/
void OnInvalidateData(int data = 0, bool gui_scope = true) override
{
- if (data == 0) {
- /* This needs to be done in command-scope to enforce rebuilding before resorting invalid data */
- this->industries.ForceRebuild();
- } else {
- this->industries.ForceResort();
+ switch (data) {
+ case IDIWD_FORCE_REBUILD:
+ /* This needs to be done in command-scope to enforce rebuilding before resorting invalid data */
+ this->industries.ForceRebuild();
+ break;
+
+ case IDIWD_PRODUCTION_CHANGE:
+ if (this->industries.SortType() == 2) this->industries.ForceResort();
+ break;
+
+ default:
+ this->industries.ForceResort();
+ break;
}
}
};