Settings: Move advise default flag/functionality to guiproc
This commit is contained in:
@@ -1527,14 +1527,21 @@ void SettingEntry::DrawSettingString(uint left, uint right, int y, bool highligh
|
|||||||
{
|
{
|
||||||
this->SetValueDParams(1, value);
|
this->SetValueDParams(1, value);
|
||||||
int edge = 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 (this->setting->guiproc != nullptr && edge != 0) {
|
||||||
|
SettingOnGuiCtrlData data;
|
||||||
|
data.type = SOGCT_GUI_SPRITE;
|
||||||
|
data.val = value;
|
||||||
|
if (this->setting->guiproc(data)) {
|
||||||
|
SpriteID sprite = (SpriteID)data.output;
|
||||||
|
const Dimension warning_dimensions = GetSpriteSize(sprite);
|
||||||
if ((int)warning_dimensions.height <= SETTING_HEIGHT) {
|
if ((int)warning_dimensions.height <= SETTING_HEIGHT) {
|
||||||
DrawSprite(SPR_WARNING_SIGN, 0, (_current_text_dir == TD_RTL) ? edge - warning_dimensions.width - 5 : edge + 5,
|
DrawSprite(sprite, 0, (_current_text_dir == TD_RTL) ? edge - warning_dimensions.width - 5 : edge + 5,
|
||||||
y + (((int)GetCharacterHeight(FS_NORMAL) - (int)warning_dimensions.height) / 2));
|
y + (((int)GetCharacterHeight(FS_NORMAL) - (int)warning_dimensions.height) / 2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* == CargoDestPerCargoSettingEntry methods == */
|
/* == CargoDestPerCargoSettingEntry methods == */
|
||||||
|
|
||||||
@@ -2743,7 +2750,12 @@ struct GameSettingsWindow : Window {
|
|||||||
DrawString(tr, STR_CONFIG_SETTING_DEFAULT_VALUE);
|
DrawString(tr, STR_CONFIG_SETTING_DEFAULT_VALUE);
|
||||||
tr.top += GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal;
|
tr.top += GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal;
|
||||||
|
|
||||||
if (sd->flags & SF_GUI_ADVISE_DEFAULT) {
|
if (sd->guiproc != nullptr) {
|
||||||
|
SettingOnGuiCtrlData data;
|
||||||
|
data.type = SOGCT_GUI_WARNING_TEXT;
|
||||||
|
data.text = STR_NULL;
|
||||||
|
data.val = sd->Read(ResolveObject(settings_ptr, sd));
|
||||||
|
if (sd->guiproc(data)) {
|
||||||
const Dimension warning_dimensions = GetSpriteSize(SPR_WARNING_SIGN);
|
const Dimension warning_dimensions = GetSpriteSize(SPR_WARNING_SIGN);
|
||||||
const int step_height = std::max<int>(warning_dimensions.height, GetCharacterHeight(FS_NORMAL));
|
const int step_height = std::max<int>(warning_dimensions.height, GetCharacterHeight(FS_NORMAL));
|
||||||
const int text_offset_y = (step_height - GetCharacterHeight(FS_NORMAL)) / 2;
|
const int text_offset_y = (step_height - GetCharacterHeight(FS_NORMAL)) / 2;
|
||||||
@@ -2758,10 +2770,11 @@ struct GameSettingsWindow : Window {
|
|||||||
} else {
|
} else {
|
||||||
left += (warning_dimensions.width + 10);
|
left += (warning_dimensions.width + 10);
|
||||||
}
|
}
|
||||||
DrawString(left, right, tr.top + text_offset_y, STR_CONFIG_SETTING_ADVISED_LEAVE_DEFAULT, TC_RED);
|
DrawString(left, right, tr.top + text_offset_y, data.text, TC_RED);
|
||||||
|
|
||||||
tr.top += step_height + WidgetDimensions::scaled.vsep_normal;
|
tr.top += step_height + WidgetDimensions::scaled.vsep_normal;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
DrawStringMultiLine(tr, this->last_clicked->GetHelpText(), TC_WHITE);
|
DrawStringMultiLine(tr, this->last_clicked->GetHelpText(), TC_WHITE);
|
||||||
}
|
}
|
||||||
|
@@ -39,7 +39,6 @@ enum SettingFlag : uint32_t {
|
|||||||
SF_DEC1SCALE = 1 << 16, ///< also display a float representation of the scale of a decimal1 scale parameter
|
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_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_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
|
|
||||||
SF_ENUM_PRE_CB_VALIDATE = 1 << 20, ///< Call the pre_check callback for enum incoming value validation
|
SF_ENUM_PRE_CB_VALIDATE = 1 << 20, ///< Call the pre_check callback for enum incoming value validation
|
||||||
SF_CONVERT_BOOL_TO_INT = 1 << 21, ///< Accept a boolean value when loading an int-type setting from the config file
|
SF_CONVERT_BOOL_TO_INT = 1 << 21, ///< Accept a boolean value when loading an int-type setting from the config file
|
||||||
SF_PATCH = 1 << 22, ///< Do not load from upstream table-mode PATS, also for GUI filtering of "patch" settings
|
SF_PATCH = 1 << 22, ///< Do not load from upstream table-mode PATS, also for GUI filtering of "patch" settings
|
||||||
@@ -89,6 +88,8 @@ enum SettingOnGuiCtrlType {
|
|||||||
SOGCT_GUI_DROPDOWN_ORDER, ///< SF_GUI_DROPDOWN reordering callback
|
SOGCT_GUI_DROPDOWN_ORDER, ///< SF_GUI_DROPDOWN reordering callback
|
||||||
SOGCT_CFG_NAME, ///< Config file name override
|
SOGCT_CFG_NAME, ///< Config file name override
|
||||||
SOGCT_CFG_FALLBACK_NAME, ///< Config file name within group fallback
|
SOGCT_CFG_FALLBACK_NAME, ///< Config file name within group fallback
|
||||||
|
SOGCT_GUI_SPRITE, ///< Show sprite after setting value (i.e. warning)
|
||||||
|
SOGCT_GUI_WARNING_TEXT, ///< Show warning text
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SettingOnGuiCtrlData {
|
struct SettingOnGuiCtrlData {
|
||||||
@@ -96,6 +97,7 @@ struct SettingOnGuiCtrlData {
|
|||||||
StringID text;
|
StringID text;
|
||||||
int val;
|
int val;
|
||||||
const char *str = nullptr;
|
const char *str = nullptr;
|
||||||
|
int output = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IniItem;
|
struct IniItem;
|
||||||
|
Reference in New Issue
Block a user