From 40203b090f700247b6a41f270711fb7ea4e7564c Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 10 Apr 2021 21:33:22 +0100 Subject: [PATCH] Settings window: Add mechanism for conditionally hidden settings --- src/settings_gui.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 0fb33b736b..107b1f7d94 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -801,7 +801,7 @@ private: bool IsVisibleByRestrictionMode(RestrictionMode mode) const; }; -/** Standard setting */ +/** Cargodist per-cargo setting */ struct CargoDestPerCargoSettingEntry : SettingEntry { CargoID cargo; @@ -813,6 +813,16 @@ protected: virtual void DrawSettingString(uint left, uint right, int y, bool highlight, int32 value) const; }; +/** Conditionally hidden standard setting */ +struct ConditionallyHiddenSettingEntry : SettingEntry { + std::function hide_callback; + + ConditionallyHiddenSettingEntry(const char *name, std::function hide_callback) + : SettingEntry(name), hide_callback(hide_callback) {} + + virtual bool UpdateFilterState(SettingFilter &filter, bool force_visible); +}; + /** Containers for BaseSettingEntry */ struct SettingsContainer { typedef std::vector EntryVector; @@ -1238,6 +1248,16 @@ bool CargoDestPerCargoSettingEntry::UpdateFilterState(SettingFilter &filter, boo } } +bool ConditionallyHiddenSettingEntry::UpdateFilterState(SettingFilter &filter, bool force_visible) +{ + if (this->hide_callback && this->hide_callback()) { + SETBITS(this->flags, SEF_FILTERED); + return false; + } else { + return SettingEntry::UpdateFilterState(filter, force_visible); + } +} + /* == SettingsContainer methods == */ /**