change wxTextValidator to use wxArrayString instead of wxStringList

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31844 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Ryan Norton
2005-02-07 23:46:42 +00:00
parent 2c3a10641d
commit f94a790daf
3 changed files with 111 additions and 57 deletions

View File

@@ -44,16 +44,16 @@ Constructor, taking a style and optional pointer to a wxString variable.
\twocolitem{{\bf wxFILTER\_NUMERIC}}{Non-numeric characters are filtered out.} \twocolitem{{\bf wxFILTER\_NUMERIC}}{Non-numeric characters are filtered out.}
\twocolitem{{\bf wxFILTER\_INCLUDE\_LIST}}{Use an include list. The validator \twocolitem{{\bf wxFILTER\_INCLUDE\_LIST}}{Use an include list. The validator
checks if the user input is on the list, complaining if not. See checks if the user input is on the list, complaining if not. See
\helpref{wxTextValidator::SetIncludeList}{wxtextvalidatorsetincludelist}.} \helpref{wxTextValidator::SetIncludes}{wxtextvalidatorsetincludes}.}
\twocolitem{{\bf wxFILTER\_EXCLUDE\_LIST}}{Use an exclude list. The validator \twocolitem{{\bf wxFILTER\_EXCLUDE\_LIST}}{Use an exclude list. The validator
checks if the user input is on the list, complaining if it is. See checks if the user input is on the list, complaining if it is. See
\helpref{wxTextValidator::SetExcludeList}{wxtextvalidatorsetexcludelist}.} \helpref{wxTextValidator::SetExcludes}{wxtextvalidatorsetexcludes}.}
\twocolitem{{\bf wxFILTER\_INCLUDE\_CHAR\_LIST}}{Use an include list. The validator \twocolitem{{\bf wxFILTER\_INCLUDE\_CHAR\_LIST}}{Use an include list. The validator
checks if each input character is in the list (one character per list element), complaining if not. checks if each input character is in the list (one character per list element), complaining if not.
See \helpref{wxTextValidator::SetIncludeList}{wxtextvalidatorsetincludelist}.} See \helpref{wxTextValidator::SetIncludes}{wxtextvalidatorsetincludes}.}
\twocolitem{{\bf wxFILTER\_EXCLUDE\_CHAR\_LIST}}{Use an include list. The validator \twocolitem{{\bf wxFILTER\_EXCLUDE\_CHAR\_LIST}}{Use an include list. The validator
checks if each input character is in the list (one character per list element), complaining if it is. checks if each input character is in the list (one character per list element), complaining if it is.
See \helpref{wxTextValidator::SetExcludeList}{wxtextvalidatorsetexcludelist}.} See \helpref{wxTextValidator::SetExcludes}{wxtextvalidatorsetexcludes}.}
\end{twocollist} \end{twocollist}
} }
@@ -62,27 +62,21 @@ should have a lifetime equal to or longer than the validator lifetime (which is
determined by the lifetime of the window). % If NULL, the validator uses its own internal storage for the value. NOT true determined by the lifetime of the window). % If NULL, the validator uses its own internal storage for the value. NOT true
} }
\membersection{wxTextValidator::\destruct{wxTextValidator}}\label{wxtextvalidatordtor}
\func{}{\destruct{wxTextValidator}}{\void}
Destructor.
\membersection{wxTextValidator::Clone}\label{wxtextvalidatorclone} \membersection{wxTextValidator::Clone}\label{wxtextvalidatorclone}
\constfunc{virtual wxValidator*}{Clone}{\void} \constfunc{virtual wxValidator*}{Clone}{\void}
Clones the text validator using the copy constructor. Clones the text validator using the copy constructor.
\membersection{wxTextValidator::GetExcludeList}\label{wxtextvalidatorgetexcludelist} \membersection{wxTextValidator::GetExcludes}\label{wxtextvalidatorgetexcludes}
\constfunc{wxStringList\&}{GetExcludeList}{\void} \constfunc{wxArrayString\&}{GetExcludes}{\void}
Returns a reference to the exclude list (the list of invalid values). Returns a reference to the exclude list (the list of invalid values).
\membersection{wxTextValidator::GetIncludeList}\label{wxtextvalidatorgetincludelist} \membersection{wxTextValidator::GetIncludes}\label{wxtextvalidatorgetincludes}
\constfunc{wxStringList\&}{GetIncludeList}{\void} \constfunc{wxArrayString\&}{GetIncludes}{\void}
Returns a reference to the include list (the list of valid values). Returns a reference to the include list (the list of valid values).
@@ -99,15 +93,15 @@ Returns the validator style.
Receives character input from the window and filters it according to the Receives character input from the window and filters it according to the
current validator style. current validator style.
\membersection{wxTextValidator::SetExcludeList}\label{wxtextvalidatorsetexcludelist} \membersection{wxTextValidator::SetExcludes}\label{wxtextvalidatorsetexcludes}
\func{void}{SetExcludeList}{\param{const wxStringList\&}{ stringList}} \func{void}{SetExcludes}{\param{const wxArrayString\&}{ stringList}}
Sets the exclude list (invalid values for the user input). Sets the exclude list (invalid values for the user input).
\membersection{wxTextValidator::SetIncludeList}\label{wxtextvalidatorsetincludelist} \membersection{wxTextValidator::SetIncludes}\label{wxtextvalidatorsetincludes}
\func{void}{SetIncludeList}{\param{const wxStringList\&}{ stringList}} \func{void}{SetIncludes}{\param{const wxArrayString\&}{ stringList}}
Sets the include list (valid values for the user input). Sets the include list (valid values for the user input).

View File

@@ -64,25 +64,41 @@ public:
inline long GetStyle() const { return m_validatorStyle; } inline long GetStyle() const { return m_validatorStyle; }
inline void SetStyle(long style) { m_validatorStyle = style; } inline void SetStyle(long style) { m_validatorStyle = style; }
void SetIncludeList(const wxStringList& list); #if WXWIN_COMPATIBILITY_2_4
inline wxStringList& GetIncludeList() { return m_includeList; } wxDEPRECATED( void SetIncludeList(const wxStringList& list) );
wxDEPRECATED( inline wxStringList& GetIncludeList() );
void SetExcludeList(const wxStringList& list); wxDEPRECATED( void SetExcludeList(const wxStringList& list) );
inline wxStringList& GetExcludeList() { return m_excludeList; } wxDEPRECATED( inline wxStringList& GetExcludeList() );
wxDEPRECATED( bool IsInCharIncludeList(const wxString& val) );
wxDEPRECATED( bool IsNotInCharExcludeList(const wxString& val) );
#endif
void SetIncludes(const wxArrayString& includes) { m_includes = includes; }
inline wxArrayString& GetIncludes() { return m_includes; }
void SetExcludes(const wxArrayString& excludes) { m_excludes = excludes; }
inline wxArrayString& GetExcludes() { return m_excludes; }
bool IsInCharIncludes(const wxString& val);
bool IsNotInCharExcludes(const wxString& val);
// Filter keystrokes // Filter keystrokes
void OnChar(wxKeyEvent& event); void OnChar(wxKeyEvent& event);
bool IsInCharIncludeList(const wxString& val);
bool IsNotInCharExcludeList(const wxString& val);
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
protected: protected:
long m_validatorStyle; long m_validatorStyle;
wxString * m_stringValue; wxString * m_stringValue;
#if WXWIN_COMPATIBILITY_2_4
wxStringList m_includeList; wxStringList m_includeList;
wxStringList m_excludeList; wxStringList m_excludeList;
#endif
wxArrayString m_includes;
wxArrayString m_excludes;
bool CheckValidator() const bool CheckValidator() const
{ {

View File

@@ -73,8 +73,8 @@ bool wxTextValidator::Copy(const wxTextValidator& val)
m_validatorStyle = val.m_validatorStyle; m_validatorStyle = val.m_validatorStyle;
m_stringValue = val.m_stringValue; m_stringValue = val.m_stringValue;
m_includeList = val.m_includeList; m_includes = val.m_includes;
m_excludeList = val.m_excludeList; m_excludes = val.m_excludes;
return true; return true;
} }
@@ -121,12 +121,12 @@ bool wxTextValidator::Validate(wxWindow *parent)
// NB: this format string should contian exactly one '%s' // NB: this format string should contian exactly one '%s'
wxString errormsg; wxString errormsg;
bool includeList = (m_validatorStyle & wxFILTER_INCLUDE_LIST) != 0; bool includes = (m_validatorStyle & wxFILTER_INCLUDE_LIST) != 0;
if ( includeList || (m_validatorStyle & wxFILTER_EXCLUDE_LIST) ) if ( includes || (m_validatorStyle & wxFILTER_EXCLUDE_LIST) )
{ {
// if includeList, it's only ok to have the members of the list, // if includes, it's only ok to have the members of the list,
// otherwise it's only ok to have non-members // otherwise it's only ok to have non-members
ok = includeList == m_includeList.Member(val); ok = includes == (m_includes.Index(val) != wxNOT_FOUND);
if ( !ok ) if ( !ok )
{ {
errormsg = _("'%s' is invalid"); errormsg = _("'%s' is invalid");
@@ -156,13 +156,13 @@ bool wxTextValidator::Validate(wxWindow *parent)
errormsg = _("'%s' should be numeric."); errormsg = _("'%s' should be numeric.");
} }
else if ( (m_validatorStyle & wxFILTER_INCLUDE_CHAR_LIST) && !IsInCharIncludeList(val)) else if ( (m_validatorStyle & wxFILTER_INCLUDE_CHAR_LIST) && !IsInCharIncludes(val))
{ {
//it's only ok to have the members of the list //it's only ok to have the members of the list
errormsg = _("'%s' is invalid"); errormsg = _("'%s' is invalid");
ok = false; ok = false;
} }
else if ( (m_validatorStyle & wxFILTER_EXCLUDE_CHAR_LIST) && !IsNotInCharExcludeList(val)) else if ( (m_validatorStyle & wxFILTER_EXCLUDE_CHAR_LIST) && !IsNotInCharExcludes(val))
{ {
// it's only ok to have non-members of the list // it's only ok to have non-members of the list
errormsg = _("'%s' is invalid"); errormsg = _("'%s' is invalid");
@@ -215,14 +215,79 @@ bool wxTextValidator::TransferFromWindow(void)
return true; return true;
} }
#if WXWIN_COMPATIBILITY_2_4
inline void wxCopyStringListToArrayString(wxArrayString& to, const wxStringList& from)
{
to.Clear();
for(wxStringList::Node* pNode = from.GetFirst(); pNode; pNode = pNode->GetNext())
to.Add(pNode->GetData());
}
inline void wxCopyArrayStringToStringList(wxStringList& to, const wxArrayString& from)
{
to.Clear();
for(size_t i = 0; i < from.GetCount(); ++i)
to.Add(from[i]);
}
wxStringList& wxTextValidator::GetIncludeList()
{
wxCopyArrayStringToStringList(m_includeList, m_includes);
return m_includeList;
}
wxStringList& wxTextValidator::GetExcludeList()
{
wxCopyArrayStringToStringList(m_excludeList, m_excludes);
return m_excludeList;
}
void wxTextValidator::SetIncludeList(const wxStringList& list) void wxTextValidator::SetIncludeList(const wxStringList& list)
{ {
m_includeList = list; wxCopyStringListToArrayString(m_includes, list);
} }
void wxTextValidator::SetExcludeList(const wxStringList& list) void wxTextValidator::SetExcludeList(const wxStringList& list)
{ {
m_excludeList = list; wxCopyStringListToArrayString(m_excludes, list);
}
bool wxTextValidator::IsInCharIncludeList(const wxString& val)
{
return IsInCharIncludes(val);
}
bool wxTextValidator::IsNotInCharExcludeList(const wxString& val)
{
return IsNotInCharExcludes(val);
}
#endif //compat 2.4
bool wxTextValidator::IsInCharIncludes(const wxString& val)
{
size_t i;
for ( i = 0; i < val.Length(); i++)
{
if (m_includes.Index((wxString) val[i]) == wxNOT_FOUND)
return false;
}
return true;
}
bool wxTextValidator::IsNotInCharExcludes(const wxString& val)
{
size_t i;
for ( i = 0; i < val.Length(); i++)
{
if (m_excludes.Index((wxString) val[i]) != wxNOT_FOUND)
return false;
}
return true;
} }
void wxTextValidator::OnChar(wxKeyEvent& event) void wxTextValidator::OnChar(wxKeyEvent& event)
@@ -240,8 +305,8 @@ void wxTextValidator::OnChar(wxKeyEvent& event)
if ( if (
!(keyCode < WXK_SPACE || keyCode == WXK_DELETE || keyCode > WXK_START) && !(keyCode < WXK_SPACE || keyCode == WXK_DELETE || keyCode > WXK_START) &&
( (
((m_validatorStyle & wxFILTER_INCLUDE_CHAR_LIST) && !IsInCharIncludeList(wxString((wxChar) keyCode, 1))) || ((m_validatorStyle & wxFILTER_INCLUDE_CHAR_LIST) && !IsInCharIncludes(wxString((wxChar) keyCode, 1))) ||
((m_validatorStyle & wxFILTER_EXCLUDE_CHAR_LIST) && !IsNotInCharExcludeList(wxString((wxChar) keyCode, 1))) || ((m_validatorStyle & wxFILTER_EXCLUDE_CHAR_LIST) && !IsNotInCharExcludes(wxString((wxChar) keyCode, 1))) ||
((m_validatorStyle & wxFILTER_ASCII) && !isascii(keyCode)) || ((m_validatorStyle & wxFILTER_ASCII) && !isascii(keyCode)) ||
((m_validatorStyle & wxFILTER_ALPHA) && !wxIsalpha(keyCode)) || ((m_validatorStyle & wxFILTER_ALPHA) && !wxIsalpha(keyCode)) ||
((m_validatorStyle & wxFILTER_ALPHANUMERIC) && !wxIsalnum(keyCode)) || ((m_validatorStyle & wxFILTER_ALPHANUMERIC) && !wxIsalnum(keyCode)) ||
@@ -274,27 +339,6 @@ static bool wxIsNumeric(const wxString& val)
return true; return true;
} }
bool wxTextValidator::IsInCharIncludeList(const wxString& val)
{
size_t i;
for ( i = 0; i < val.Length(); i++)
{
if (!m_includeList.Member((wxString) val[i]))
return false;
}
return true;
}
bool wxTextValidator::IsNotInCharExcludeList(const wxString& val)
{
size_t i;
for ( i = 0; i < val.Length(); i++)
{
if (m_excludeList.Member((wxString) val[i]))
return false;
}
return true;
}
#endif #endif
// wxUSE_VALIDATORS && wxUSE_TEXTCTRL // wxUSE_VALIDATORS && wxUSE_TEXTCTRL