Use separate CharSetFilter types for signed and unsigned decimal

This commit is contained in:
Jonathan G Rennison
2023-05-10 19:56:26 +01:00
parent 4c18a193e7
commit d9eb839af9
3 changed files with 10 additions and 4 deletions

View File

@@ -2811,8 +2811,11 @@ struct GameSettingsWindow : Window {
this->valuewindow_entry = pe; this->valuewindow_entry = pe;
if (sd->flags & SF_DECIMAL1 || (sd->flags & SF_GUI_VELOCITY && _settings_game.locale.units_velocity == 3)) { if (sd->flags & SF_DECIMAL1 || (sd->flags & SF_GUI_VELOCITY && _settings_game.locale.units_velocity == 3)) {
CharSetFilter charset_filter = CS_NUMERAL_DECIMAL; //default, only numeric input and decimal point allowed
if (sd->min < 0) charset_filter = CS_NUMERAL_DECIMAL_SIGNED; // special case, also allow '-' sign for negative input
SetDParam(0, value64); SetDParam(0, value64);
ShowQueryString(STR_JUST_DECIMAL1, STR_CONFIG_SETTING_QUERY_CAPTION, 10, this, CS_NUMERAL_DECIMAL, QSF_ENABLE_DEFAULT); ShowQueryString(STR_JUST_DECIMAL1, STR_CONFIG_SETTING_QUERY_CAPTION, 10, this, charset_filter, QSF_ENABLE_DEFAULT);
} else { } else {
CharSetFilter charset_filter = CS_NUMERAL; //default, only numeric input allowed CharSetFilter charset_filter = CS_NUMERAL; //default, only numeric input allowed
if (sd->min < 0) charset_filter = CS_NUMERAL_SIGNED; // special case, also allow '-' sign for negative input if (sd->min < 0) charset_filter = CS_NUMERAL_SIGNED; // special case, also allow '-' sign for negative input

View File

@@ -602,9 +602,11 @@ bool IsValidChar(WChar key, CharSetFilter afilter)
case CS_NUMERAL: return (key >= '0' && key <= '9'); case CS_NUMERAL: return (key >= '0' && key <= '9');
case CS_NUMERAL_SIGNED: return (key >= '0' && key <= '9') || key == '-'; case CS_NUMERAL_SIGNED: return (key >= '0' && key <= '9') || key == '-';
#if !defined(STRGEN) && !defined(SETTINGSGEN) #if !defined(STRGEN) && !defined(SETTINGSGEN)
case CS_NUMERAL_DECIMAL: return (key >= '0' && key <= '9') || key == '.' || key == '-' || key == GetDecimalSeparatorChar(); case CS_NUMERAL_DECIMAL: return (key >= '0' && key <= '9') || key == '.' || key == GetDecimalSeparatorChar();
case CS_NUMERAL_DECIMAL_SIGNED: return (key >= '0' && key <= '9') || key == '.' || key == '-' || key == GetDecimalSeparatorChar();
#else #else
case CS_NUMERAL_DECIMAL: return (key >= '0' && key <= '9') || key == '.' || key == '-'; case CS_NUMERAL_DECIMAL: return (key >= '0' && key <= '9') || key == '.';
case CS_NUMERAL_DECIMAL_SIGNED: return (key >= '0' && key <= '9') || key == '.' || key == '-';
#endif #endif
case CS_NUMERAL_SPACE: return (key >= '0' && key <= '9') || key == ' '; case CS_NUMERAL_SPACE: return (key >= '0' && key <= '9') || key == ' ';
case CS_ALPHA: return IsPrintable(key) && !(key >= '0' && key <= '9'); case CS_ALPHA: return IsPrintable(key) && !(key >= '0' && key <= '9');

View File

@@ -27,7 +27,8 @@ enum CharSetFilter {
CS_ALPHANUMERAL, ///< Both numeric and alphabetic and spaces and stuff CS_ALPHANUMERAL, ///< Both numeric and alphabetic and spaces and stuff
CS_NUMERAL, ///< Only numeric ones CS_NUMERAL, ///< Only numeric ones
CS_NUMERAL_SIGNED, ///< Only numeric ones, and minus/negative CS_NUMERAL_SIGNED, ///< Only numeric ones, and minus/negative
CS_NUMERAL_DECIMAL, ///< Only numeric, decimal separaters, and minus/negative CS_NUMERAL_DECIMAL, ///< Only numeric, decimal separaters
CS_NUMERAL_DECIMAL_SIGNED, ///< Only numeric, decimal separaters, and minus/negative
CS_NUMERAL_SPACE, ///< Only numbers and spaces CS_NUMERAL_SPACE, ///< Only numbers and spaces
CS_ALPHA, ///< Only alphabetic values CS_ALPHA, ///< Only alphabetic values
CS_HEXADECIMAL, ///< Only hexadecimal characters CS_HEXADECIMAL, ///< Only hexadecimal characters