diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 34bb961da0..cc1c3515b8 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -2288,10 +2288,13 @@ struct GameSettingsWindow : Window { /* Show the correct currency-translated value */ if (sd->flags & SF_GUI_CURRENCY) value64 *= _currency->rate; + 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 + this->valuewindow_entry = pe; SetDParam(0, value64); /* Limit string length to 14 so that MAX_INT32 * max currency rate doesn't exceed MAX_INT64. */ - ShowQueryString(STR_JUST_INT, STR_CONFIG_SETTING_QUERY_CAPTION, 15, this, CS_NUMERAL, QSF_ENABLE_DEFAULT); + ShowQueryString(STR_JUST_INT, STR_CONFIG_SETTING_QUERY_CAPTION, 15, this, charset_filter, QSF_ENABLE_DEFAULT); } this->SetDisplayedHelpText(pe); } diff --git a/src/string.cpp b/src/string.cpp index aeac4fe84f..2e14b4208e 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -494,11 +494,12 @@ bool strtolower(std::string &str, std::string::size_type offs) bool IsValidChar(WChar key, CharSetFilter afilter) { switch (afilter) { - case CS_ALPHANUMERAL: return IsPrintable(key); - case CS_NUMERAL: return (key >= '0' && key <= '9'); - case CS_NUMERAL_SPACE: return (key >= '0' && key <= '9') || key == ' '; - case CS_ALPHA: return IsPrintable(key) && !(key >= '0' && key <= '9'); - case CS_HEXADECIMAL: return (key >= '0' && key <= '9') || (key >= 'a' && key <= 'f') || (key >= 'A' && key <= 'F'); + case CS_ALPHANUMERAL: return IsPrintable(key); + case CS_NUMERAL: return (key >= '0' && key <= '9'); + case CS_NUMERAL_SPACE: return (key >= '0' && key <= '9') || key == ' '; + case CS_NUMERAL_SIGNED: return (key >= '0' && key <= '9') || key == '-'; + case CS_ALPHA: return IsPrintable(key) && !(key >= '0' && key <= '9'); + case CS_HEXADECIMAL: return (key >= '0' && key <= '9') || (key >= 'a' && key <= 'f') || (key >= 'A' && key <= 'F'); default: NOT_REACHED(); } } diff --git a/src/string_type.h b/src/string_type.h index 25ea65598e..b8705e403f 100644 --- a/src/string_type.h +++ b/src/string_type.h @@ -27,6 +27,7 @@ enum CharSetFilter { CS_ALPHANUMERAL, ///< Both numeric and alphabetic and spaces and stuff CS_NUMERAL, ///< Only numeric ones CS_NUMERAL_SPACE, ///< Only numbers and spaces + CS_NUMERAL_SIGNED, ///< Only numbers and '-' for negative values CS_ALPHA, ///< Only alphabetic values CS_HEXADECIMAL, ///< Only hexadecimal characters };