use wxTextEntry in wxTextValidator (modified patch 1821743)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49591 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2007-11-01 20:52:40 +00:00
parent b6423e8be3
commit 472eec8a03
2 changed files with 43 additions and 33 deletions

View File

@ -14,9 +14,8 @@
#include "wx/defs.h"
#if wxUSE_VALIDATORS && wxUSE_TEXTCTRL
#if wxUSE_VALIDATORS && (wxUSE_TEXTCTRL || wxUSE_COMBOBOX)
#include "wx/textctrl.h"
#include "wx/validate.h"
#define wxFILTER_NONE 0x0000
@ -60,6 +59,7 @@ public:
inline long GetStyle() const { return m_validatorStyle; }
inline void SetStyle(long style) { m_validatorStyle = style; }
wxTextEntry *GetTextEntry();
void SetIncludes(const wxArrayString& includes) { m_includes = includes; }
inline wxArrayString& GetIncludes() { return m_includes; }
@ -73,7 +73,6 @@ public:
// Filter keystrokes
void OnChar(wxKeyEvent& event);
DECLARE_EVENT_TABLE()
protected:
@ -82,16 +81,6 @@ protected:
wxArrayString m_includes;
wxArrayString m_excludes;
bool CheckValidator() const
{
wxCHECK_MSG( m_validatorWindow, false,
_T("No window associated with validator") );
wxCHECK_MSG( m_validatorWindow->IsKindOf(CLASSINFO(wxTextCtrl)), false,
_T("wxTextValidator is only for wxTextCtrl's") );
return true;
}
private:
// Cannot use
// DECLARE_NO_COPY_CLASS(wxTextValidator)
@ -102,7 +91,7 @@ private:
};
#endif
// wxUSE_VALIDATORS && wxUSE_TEXTCTRL
// wxUSE_VALIDATORS && (wxUSE_TEXTCTRL || wxUSE_COMBOBOX)
#endif
// _WX_VALTEXTH__

View File

@ -16,7 +16,7 @@
#pragma hdrstop
#endif
#if wxUSE_VALIDATORS && wxUSE_TEXTCTRL
#if wxUSE_VALIDATORS && (wxUSE_TEXTCTRL || wxUSE_COMBOBOX)
#include "wx/valtext.h"
@ -75,6 +75,28 @@ bool wxTextValidator::Copy(const wxTextValidator& val)
return true;
}
wxTextEntry *wxTextValidator::GetTextEntry()
{
#if wxUSE_TEXTCTRL
if (m_validatorWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
{
return (wxTextCtrl*)m_validatorWindow;
}
#endif
#if wxUSE_COMBOBOX
if (m_validatorWindow->IsKindOf(CLASSINFO(wxComboBox)))
{
return (wxComboBox*)m_validatorWindow;
}
#endif
wxFAIL_MSG(
_T("wxTextValidator can only be used with wxTextCtrl or wxComboBox")
);
return NULL;
}
static bool wxIsAlpha(const wxString& val)
{
int i;
@ -101,16 +123,15 @@ static bool wxIsAlphaNumeric(const wxString& val)
// This function can pop up an error message.
bool wxTextValidator::Validate(wxWindow *parent)
{
if( !CheckValidator() )
return false;
wxTextCtrl *control = (wxTextCtrl *) m_validatorWindow;
// If window is disabled, simply return
if ( !control->IsEnabled() )
if ( !m_validatorWindow->IsEnabled() )
return true;
wxString val(control->GetValue());
wxTextEntry * const text = GetTextEntry();
if ( !text )
return false;
wxString val(text->GetValue());
bool ok = true;
@ -184,13 +205,13 @@ bool wxTextValidator::Validate(wxWindow *parent)
// Called to transfer data to the window
bool wxTextValidator::TransferToWindow(void)
{
if( !CheckValidator() )
return false;
if ( m_stringValue )
{
wxTextCtrl *control = (wxTextCtrl *) m_validatorWindow;
control->SetValue(* m_stringValue);
wxTextEntry * const text = GetTextEntry();
if ( !text )
return false;
text->SetValue(*m_stringValue);
}
return true;
@ -199,13 +220,13 @@ bool wxTextValidator::TransferToWindow(void)
// Called to transfer data to the window
bool wxTextValidator::TransferFromWindow(void)
{
if( !CheckValidator() )
return false;
if ( m_stringValue )
{
wxTextCtrl *control = (wxTextCtrl *) m_validatorWindow;
*m_stringValue = control->GetValue();
wxTextEntry * const text = GetTextEntry();
if ( !text )
return false;
*m_stringValue = text->GetValue();
}
return true;
@ -284,4 +305,4 @@ static bool wxIsNumeric(const wxString& val)
#endif
// wxUSE_VALIDATORS && wxUSE_TEXTCTRL
// wxUSE_VALIDATORS && (wxUSE_TEXTCTRL || wxUSE_COMBOBOX)