- if ( !m_validatorWindow )
- return FALSE;
- if ( !m_validatorWindow->IsKindOf(CLASSINFO(wxTextCtrl)) )
- return FALSE;
- if ( !m_stringValue )
- return FALSE;
-
- wxTextCtrl *control = (wxTextCtrl *) m_validatorWindow ;
-
- // If window is disabled, don't validate
- if ( !control->Enabled() )
- return FALSE;
-
- wxString val(control->GetValue());
-
- if ( m_validatorStyle & wxFILTER_INCLUDE_LIST )
- {
- if ( !m_includeList.Member(val) )
- {
- m_validatorWindow->SetFocus();
- char buf[512];
- sprintf(buf, _("%s is invalid."), (const char *)val);
- wxMessageBox(buf, _("Validation conflict"), wxOK | wxICON_EXCLAMATION, parent);
- return FALSE;
- }
- }
- if ( m_validatorStyle & wxFILTER_EXCLUDE_LIST )
- {
- if ( m_excludeList.Member(val) )
- {
- m_validatorWindow->SetFocus();
- char buf[512];
- sprintf(buf, _("%s is invalid."), (const char *)val);
- wxMessageBox(buf, _("Validation conflict"), wxOK | wxICON_EXCLAMATION, parent);
- return FALSE;
- }
- }
- if ( (m_validatorStyle & wxFILTER_ASCII) && !val.IsAscii() )
- {
- m_validatorWindow->SetFocus();
- char buf[512];
- sprintf(buf, _("%s should only contain ASCII characters."), (const char *)val);
- wxMessageBox(buf, _("Validation conflict"), wxOK | wxICON_EXCLAMATION, parent);
- return FALSE;
- }
- if ( (m_validatorStyle & wxFILTER_ALPHA) && !wxIsAlpha(val) )
- {
- m_validatorWindow->SetFocus();
- char buf[512];
- sprintf(buf, _("%s should only contain alphabetic characters."), (const char *)val);
- wxMessageBox(buf, _("Validation conflict"), wxOK | wxICON_EXCLAMATION, parent);
- return FALSE;
- }
- if ( (m_validatorStyle & wxFILTER_ALPHANUMERIC) && !wxIsAlphaNumeric(val))
- {
- m_validatorWindow->SetFocus();
- char buf[512];
- sprintf(buf, _("%s should only contain alphabetic or numeric characters."), (const char *)val);
- wxMessageBox(buf,_("Validation conflict"), wxOK | wxICON_EXCLAMATION, parent);
- return FALSE;
- }
- if ( (m_validatorStyle & wxFILTER_NUMERIC) && !wxIsNumeric(val))
-
- {
- m_validatorWindow->SetFocus();
- char buf[512];
- sprintf(buf, _("%s should be numeric."), (const char *)val);
- wxMessageBox(buf, _("Validation conflict"), wxOK | wxICON_EXCLAMATION, parent);
- return FALSE;
- }
-
- return TRUE ;
+ // If window is disabled, simply return
+ if ( !m_validatorWindow->IsEnabled() )
+ return true;
+
+ wxTextEntry * const text = GetTextEntry();
+ if ( !text )
+ return false;
+
+ wxString val(text->GetValue());
+
+ bool ok = true;
+
+ // NB: this format string should contian exactly one '%s'
+ wxString errormsg;
+
+ bool includes = (m_validatorStyle & wxFILTER_INCLUDE_LIST) != 0;
+ if ( includes || (m_validatorStyle & wxFILTER_EXCLUDE_LIST) )
+ {
+ // if includes, it's only ok to have the members of the list,
+ // otherwise it's only ok to have non-members
+ ok = includes == (m_includes.Index(val) != wxNOT_FOUND);
+ if ( !ok )
+ {
+ errormsg = _("'%s' is invalid");
+ }
+ }
+ else if ( (m_validatorStyle & wxFILTER_ASCII) && !val.IsAscii() )
+ {
+ ok = false;
+
+ errormsg = _("'%s' should only contain ASCII characters.");
+ }
+ else if ( (m_validatorStyle & wxFILTER_ALPHA) && !wxIsAlpha(val) )
+ {
+ ok = false;
+
+ errormsg = _("'%s' should only contain alphabetic characters.");
+ }
+ else if ( (m_validatorStyle & wxFILTER_ALPHANUMERIC) && !wxIsAlphaNumeric(val))
+ {
+ ok = false;
+
+ errormsg = _("'%s' should only contain alphabetic or numeric characters.");
+ }
+ else if ( (m_validatorStyle & wxFILTER_NUMERIC) && !wxIsNumeric(val))
+ {
+ ok = false;
+
+ errormsg = _("'%s' should be numeric.");
+ }
+ else if ( (m_validatorStyle & wxFILTER_INCLUDE_CHAR_LIST) && !IsInCharIncludes(val))
+ {
+ //it's only ok to have the members of the list
+ errormsg = _("'%s' is invalid");
+ ok = false;
+ }
+ else if ( (m_validatorStyle & wxFILTER_EXCLUDE_CHAR_LIST) && !IsNotInCharExcludes(val))
+ {
+ // it's only ok to have non-members of the list
+ errormsg = _("'%s' is invalid");
+ ok = false;
+ }
+
+ if ( !ok )
+ {
+ wxASSERT_MSG( !errormsg.empty(), _T("you forgot to set errormsg") );
+
+ m_validatorWindow->SetFocus();
+
+ wxString buf;
+ buf.Printf(errormsg, val.c_str());
+
+ wxMessageBox(buf, _("Validation conflict"),
+ wxOK | wxICON_EXCLAMATION, parent);
+ }
+
+ return ok;