diff --git a/include/wx/valtext.h b/include/wx/valtext.h index 8c06688bfe..7ebc787069 100644 --- a/include/wx/valtext.h +++ b/include/wx/valtext.h @@ -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__ diff --git a/src/common/valtext.cpp b/src/common/valtext.cpp index 4e351477d7..e7f637ff25 100644 --- a/src/common/valtext.cpp +++ b/src/common/valtext.cpp @@ -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)