From e5c99b3601425b4ba848b3f3af25c87c8c06ce9c Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 31 Jan 2022 00:43:25 +0000 Subject: [PATCH] Settings GUI: Add flag to mark a setting as should be left at default --- src/lang/english.txt | 2 ++ src/settings_gui.cpp | 29 ++++++++++++++++++++++++++++- src/settings_internal.h | 1 + 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 1a33d59da7..19581aee80 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1243,6 +1243,8 @@ STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Game settings ( STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Company settings (stored in saves; affect only new games) STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Company settings (stored in save; affect only current company) +STR_CONFIG_SETTING_ADVISED_LEAVE_DEFAULT :You are advised to leave this setting at the default value + STR_CONFIG_SETTINGS_NONE :{WHITE}- None - ###length 3 STR_CONFIG_SETTING_CATEGORY_HIDES :{BLACK}Show all search results by setting{}{SILVER}Category {BLACK}to {WHITE}{STRING} diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 29242804b1..832f3e401c 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -1361,7 +1361,14 @@ void SettingEntry::DrawSettingString(uint left, uint right, int y, bool highligh { std::unique_ptr tempdata; this->SetValueDParams(1, value, tempdata); - DrawString(left, right, y, this->setting->str, highlight ? TC_WHITE : TC_LIGHT_BLUE); + int edge = DrawString(left, right, y, this->setting->str, highlight ? TC_WHITE : TC_LIGHT_BLUE); + if (this->setting->flags & SF_GUI_ADVISE_DEFAULT && value != this->setting->def && edge != 0) { + const Dimension warning_dimensions = GetSpriteSize(SPR_WARNING_SIGN); + if ((int)warning_dimensions.height <= SETTING_HEIGHT) { + DrawSprite(SPR_WARNING_SIGN, 0, (_current_text_dir == TD_RTL) ? edge - warning_dimensions.width - 5 : edge + 5, + y + (((int)FONT_HEIGHT_NORMAL - (int)warning_dimensions.height) / 2)); + } + } } /* == CargoDestPerCargoSettingEntry methods == */ @@ -2515,6 +2522,26 @@ struct GameSettingsWindow : Window { DrawString(r.left, r.right, y, STR_CONFIG_SETTING_DEFAULT_VALUE); y += FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL; + if (sd->flags & SF_GUI_ADVISE_DEFAULT) { + const Dimension warning_dimensions = GetSpriteSize(SPR_WARNING_SIGN); + const int step_height = std::max(warning_dimensions.height, FONT_HEIGHT_NORMAL); + const int text_offset_y = (step_height - FONT_HEIGHT_NORMAL) / 2; + const int warning_offset_y = (step_height - warning_dimensions.height) / 2; + const bool rtl = _current_text_dir == TD_RTL; + + int left = r.left; + int right = r.right; + DrawSprite(SPR_WARNING_SIGN, 0, rtl ? right - warning_dimensions.width - 5 : left + 5, y + warning_offset_y); + if (rtl) { + right -= (warning_dimensions.width + 10); + } else { + left += (warning_dimensions.width + 10); + } + DrawString(left, right, y + text_offset_y, STR_CONFIG_SETTING_ADVISED_LEAVE_DEFAULT, TC_RED); + + y += step_height + WD_PAR_VSEP_NORMAL; + } + DrawStringMultiLine(r.left, r.right, y, r.bottom, this->last_clicked->GetHelpText(), TC_WHITE); } break; diff --git a/src/settings_internal.h b/src/settings_internal.h index 26edeb914a..7c6d268c00 100644 --- a/src/settings_internal.h +++ b/src/settings_internal.h @@ -33,6 +33,7 @@ enum SettingFlag : uint32 { SF_DEC1SCALE = 1 << 16, ///< also display a float representation of the scale of a decimal1 scale parameter SF_RUN_CALLBACKS_ON_PARSE = 1 << 17, ///< run callbacks when parsing from config file SF_GUI_VELOCITY = 1 << 18, ///< setting value is a velocity + SF_GUI_ADVISE_DEFAULT = 1 << 19, ///< Advise the user to leave this setting at its default value }; DECLARE_ENUM_AS_BIT_SET(SettingFlag)