Allow pre_cb to transform incoming enum value in ValidateEnumSetting

pull/390/head
Jonathan G Rennison 2 years ago
parent e9f6559d36
commit 03bdb28c02

@ -461,8 +461,9 @@ size_t BoolSettingDesc::ParseValue(const char *str) const
return this->def;
}
static bool ValidateEnumSetting(const IntSettingDesc *sdb, int32 val)
static bool ValidateEnumSetting(const IntSettingDesc *sdb, int32 &val)
{
if (sdb->pre_check != nullptr && !sdb->pre_check(val)) return false;
for (const SettingDescEnumEntry *enumlist = sdb->enumlist; enumlist != nullptr && enumlist->str != STR_NULL; enumlist++) {
if (enumlist->val == val) {
return true;
@ -526,7 +527,11 @@ void IntSettingDesc::MakeValueValid(int32 &val) const
uint32 uval = (uint32)val;
if (!(this->flags & SF_GUI_0_IS_SPECIAL) || uval != 0) {
if (this->flags & SF_ENUM) {
if (!ValidateEnumSetting(this, val)) uval = (uint32)(size_t)this->def;
if (!ValidateEnumSetting(this, val)) {
uval = (uint32)(size_t)this->def;
} else {
uval = (uint32)val;
}
} else if (!(this->flags & SF_GUI_DROPDOWN)) {
/* Clamp value-type setting to its valid range */
uval = ClampU(uval, this->min, this->max);

Loading…
Cancel
Save