From 1406dc01b2d886bda2f64294e86d3c59d6a80dcd Mon Sep 17 00:00:00 2001 From: Francesco Montorsi Date: Sat, 31 Jan 2009 21:27:27 +0000 Subject: [PATCH] give better names to wxTextValidator::IsInCharIncludes and to wxTextValidator::IsNotInCharExcludes; add wxFILTER_SIMPLE_NUMBER style; remove specialized global helpers used by wxTextValidator in favour of wxStringCheck templated calls; better document the wxFILTER_* styles which use ctype standard functions git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58569 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/valtext.h | 7 ++++--- interface/wx/valtext.h | 14 ++++++++++++- src/common/valtext.cpp | 47 +++++++++++++----------------------------- 3 files changed, 31 insertions(+), 37 deletions(-) diff --git a/include/wx/valtext.h b/include/wx/valtext.h index 1408a09eff..a5fee8fb6f 100644 --- a/include/wx/valtext.h +++ b/include/wx/valtext.h @@ -26,6 +26,7 @@ enum wxTextValidatorStyle wxFILTER_ASCII, wxFILTER_ALPHA, wxFILTER_ALPHANUMERIC, + wxFILTER_SIMPLE_NUMBER, wxFILTER_NUMERIC, wxFILTER_INCLUDE_LIST, wxFILTER_EXCLUDE_LIST, @@ -82,13 +83,13 @@ public: protected: // returns true if all characters of the given string are present in m_includes - bool IsInCharIncludes(const wxString& val) const; + bool ContainsOnlyIncludedCharacters(const wxString& val) const; // returns true if all characters of the given string are NOT present in m_excludes - bool IsNotInCharExcludes(const wxString& val) const; + bool ContainsExcludedCharacters(const wxString& val) const; // returns true if the contents of 'val' are valid for the current validation style - bool IsValid(const wxString& val, wxString* errormsg) const; + virtual bool IsValid(const wxString& val, wxString* errormsg) const; protected: wxTextValidatorStyle m_validatorStyle; diff --git a/interface/wx/valtext.h b/interface/wx/valtext.h index c61435b3be..a6bde76a50 100644 --- a/interface/wx/valtext.h +++ b/interface/wx/valtext.h @@ -15,16 +15,28 @@ enum wxTextValidatorStyle /// No filtering takes place. wxFILTER_NONE, - /// Non-ASCII characters are filtered out. + /// Non-ASCII characters are filtered out. See wxString::IsAscii. wxFILTER_ASCII, /// Non-alpha characters are filtered out. + /// Uses the wxWidgets wrapper for the standard CRT function @c isalpha + /// (which is locale-dependent) on all characters of the string. wxFILTER_ALPHA, /// Non-alphanumeric characters are filtered out. + /// Uses the wxWidgets wrapper for the standard CRT function @c isalnum + /// (which is locale-dependent) on all characters of the string. wxFILTER_ALPHANUMERIC, /// Non-numeric characters are filtered out. + /// Uses the wxWidgets wrapper for the standard CRT function @c isdigit + /// (which is locale-dependent) on all characters of the string. + wxFILTER_SIMPLE_NUMBER, + + /// Non-numeric characters are filtered out. + /// Works like @c wxFILTER_SIMPLE_NUMBER but allows also decimal points, + /// minus/plus signs and the 'e' or 'E' character to input exponents. + /// Note that this is not the same behaviour of wxString::IsNumber(). wxFILTER_NUMERIC, /// Use an include list. The validator checks if the user input is on diff --git a/src/common/valtext.cpp b/src/common/valtext.cpp index d150671737..8b79675c22 100644 --- a/src/common/valtext.cpp +++ b/src/common/valtext.cpp @@ -37,43 +37,19 @@ // global helpers // ---------------------------------------------------------------------------- -static bool wxIsAlpha(const wxString& val) -{ - int i; - for ( i = 0; i < (int)val.length(); i++) - { - if (!wxIsalpha(val[i])) - return false; - } - return true; -} - -static bool wxIsAlphaNumeric(const wxString& val) -{ - int i; - for ( i = 0; i < (int)val.length(); i++) - { - if (!wxIsalnum(val[i])) - return false; - } - return true; -} - static bool wxIsNumeric(const wxString& val) { - int i; - for ( i = 0; i < (int)val.length(); i++) + for ( wxString::const_iterator i = val.begin(); i != val.end(); ++i ) { // Allow for "," (French) as well as "." -- in future we should // use wxSystemSettings or other to do better localisation - if ((!wxIsdigit(val[i])) && (val[i] != wxT('.')) && (val[i] != wxT(',')) && (val[i] != wxT('e')) && - (val[i] != wxT('E')) && (val[i] != wxT('+')) && (val[i] != wxT('-'))) + if ((!wxIsdigit(*i)) && (*i != wxT('.')) && (*i != wxT(',')) && (*i != wxT('e')) && + (*i != wxT('E')) && (*i != wxT('+')) && (*i != wxT('-'))) return false; } return true; } - // ---------------------------------------------------------------------------- // wxTextValidator // ---------------------------------------------------------------------------- @@ -234,27 +210,32 @@ bool wxTextValidator::IsValid(const wxString& val, wxString* pErr) const break; case wxFILTER_ALPHA: - if ( !wxIsAlpha(val) ) + if ( !wxStringCheck(val) ) errormsg = _("'%s' should only contain alphabetic characters."); break; case wxFILTER_ALPHANUMERIC: - if ( !wxIsAlphaNumeric(val) ) + if ( !wxStringCheck(val) ) errormsg = _("'%s' should only contain alphabetic or numeric characters."); break; + case wxFILTER_SIMPLE_NUMBER: + if ( !wxStringCheck(val) ) + errormsg = _("'%s' should be numeric."); + break; + case wxFILTER_NUMERIC: if ( !wxIsNumeric(val) ) errormsg = _("'%s' should be numeric."); break; case wxFILTER_INCLUDE_CHAR_LIST: - if ( !IsInCharIncludes(val) ) + if ( !ContainsOnlyIncludedCharacters(val) ) errormsg = _("'%s' is invalid"); break; case wxFILTER_EXCLUDE_CHAR_LIST: - if ( !IsNotInCharExcludes(val) ) + if ( ContainsExcludedCharacters(val) ) errormsg = _("'%s' is invalid"); break; @@ -268,7 +249,7 @@ bool wxTextValidator::IsValid(const wxString& val, wxString* pErr) const return errormsg.empty(); } -bool wxTextValidator::IsInCharIncludes(const wxString& val) const +bool wxTextValidator::ContainsOnlyIncludedCharacters(const wxString& val) const { for (size_t i = 0; i < val.length(); i++) if (m_includes.Index((wxString) val[i]) == wxNOT_FOUND) @@ -279,7 +260,7 @@ bool wxTextValidator::IsInCharIncludes(const wxString& val) const return true; } -bool wxTextValidator::IsNotInCharExcludes(const wxString& val) const +bool wxTextValidator::ContainsExcludedCharacters(const wxString& val) const { for (size_t i = 0; i < val.length(); i++) if (m_excludes.Index((wxString) val[i]) != wxNOT_FOUND) -- 2.45.2