X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7197bbad212b0d2e4c0986a2875cba566510f30d..ccec90930cfc38bd4347a97f46481242d9fd23cd:/src/propgrid/props.cpp diff --git a/src/propgrid/props.cpp b/src/propgrid/props.cpp index 755a79f1a3..f8d0857e7c 100644 --- a/src/propgrid/props.cpp +++ b/src/propgrid/props.cpp @@ -142,6 +142,78 @@ bool wxStringProperty::DoSetAttribute( const wxString& name, wxVariant& value ) return true; } +// ----------------------------------------------------------------------- +// wxNumericPropertyValidator +// ----------------------------------------------------------------------- + +#if wxUSE_VALIDATORS + +wxNumericPropertyValidator:: + wxNumericPropertyValidator( NumericType numericType, int base ) + : wxTextValidator(wxFILTER_INCLUDE_CHAR_LIST) +{ + wxArrayString arr; + arr.Add(wxS("0")); + arr.Add(wxS("1")); + arr.Add(wxS("2")); + arr.Add(wxS("3")); + arr.Add(wxS("4")); + arr.Add(wxS("5")); + arr.Add(wxS("6")); + arr.Add(wxS("7")); + + if ( base >= 10 ) + { + arr.Add(wxS("8")); + arr.Add(wxS("9")); + if ( base >= 16 ) + { + arr.Add(wxS("a")); arr.Add(wxS("A")); + arr.Add(wxS("b")); arr.Add(wxS("B")); + arr.Add(wxS("c")); arr.Add(wxS("C")); + arr.Add(wxS("d")); arr.Add(wxS("D")); + arr.Add(wxS("e")); arr.Add(wxS("E")); + arr.Add(wxS("f")); arr.Add(wxS("F")); + } + } + + if ( numericType == Signed ) + { + arr.Add(wxS("+")); + arr.Add(wxS("-")); + } + else if ( numericType == Float ) + { + arr.Add(wxS("+")); + arr.Add(wxS("-")); + arr.Add(wxS(".")); + arr.Add(wxS("e")); + } + + SetIncludes(arr); +} + +bool wxNumericPropertyValidator::Validate(wxWindow* parent) +{ + if ( !wxTextValidator::Validate(parent) ) + return false; + + wxWindow* wnd = GetWindow(); + if ( !wnd->IsKindOf(CLASSINFO(wxTextCtrl)) ) + return true; + + // Do not allow zero-length string + wxTextCtrl* tc = static_cast(wnd); + wxString text = tc->GetValue(); + + if ( !text.length() ) + return false; + + return true; +} + +#endif // wxUSE_VALIDATORS + // ----------------------------------------------------------------------- // wxIntProperty // ----------------------------------------------------------------------- @@ -376,9 +448,8 @@ wxValidator* wxIntProperty::GetClassValidator() #if wxUSE_VALIDATORS WX_PG_DOGETVALIDATOR_ENTRY() - // Atleast wxPython 2.6.2.1 required that the string argument is given - static wxString v; - wxTextValidator* validator = new wxTextValidator(wxFILTER_NUMERIC,&v); + wxValidator* validator = new wxNumericPropertyValidator( + wxNumericPropertyValidator::Signed); WX_PG_DOGETVALIDATOR_EXIT(validator) #else @@ -531,6 +602,21 @@ bool wxUIntProperty::ValidateValue( wxVariant& value, wxPGValidationInfo& valida wxS("%llu")); } +wxValidator* wxUIntProperty::DoGetValidator() const +{ +#if wxUSE_VALIDATORS + WX_PG_DOGETVALIDATOR_ENTRY() + + wxValidator* validator = new wxNumericPropertyValidator( + wxNumericPropertyValidator::Unsigned, + m_realBase); + + WX_PG_DOGETVALIDATOR_EXIT(validator) +#else + return NULL; +#endif +} + bool wxUIntProperty::DoSetAttribute( const wxString& name, wxVariant& value ) { if ( name == wxPG_UINT_BASE ) @@ -701,9 +787,24 @@ bool wxFloatProperty::DoSetAttribute( const wxString& name, wxVariant& value ) return false; } +wxValidator* +wxFloatProperty::GetClassValidator() +{ +#if wxUSE_VALIDATORS + WX_PG_DOGETVALIDATOR_ENTRY() + + wxValidator* validator = new wxNumericPropertyValidator( + wxNumericPropertyValidator::Float); + + WX_PG_DOGETVALIDATOR_EXIT(validator) +#else + return NULL; +#endif +} + wxValidator* wxFloatProperty::DoGetValidator() const { - return wxIntProperty::GetClassValidator(); + return GetClassValidator(); } // ----------------------------------------------------------------------- @@ -1343,7 +1444,7 @@ void wxFlagsProperty::OnSetValue() flag = choices.GetValue(i); if ( (newFlags & flag) != (m_oldValue & flag) ) - Item(i)->SetFlag( wxPG_PROP_MODIFIED ); + Item(i)->ChangeFlag( wxPG_PROP_MODIFIED, true ); } m_oldValue = newFlags; @@ -1451,7 +1552,7 @@ void wxFlagsProperty::RefreshChildren() wxPGProperty* p = Item(i); if ( subVal != (m_oldValue & flag) ) - p->SetFlag( wxPG_PROP_MODIFIED ); + p->ChangeFlag( wxPG_PROP_MODIFIED, true ); p->SetValue( subVal?true:false ); } @@ -2153,7 +2254,7 @@ void wxPGArrayEditorDialog::OnAddClick(wxCommandEvent& event) wxListCtrl* lc = m_elb->GetListCtrl(); int newItemIndex = lc->GetItemCount() - 1; - if ( m_hasCustomNewAction ) + if ( m_hasCustomNewAction ) { wxString str; if ( OnCustomNewAction(&str) ) @@ -2342,7 +2443,7 @@ wxArrayStringProperty::wxArrayStringProperty( const wxString& label, const wxArrayString& array ) : wxPGProperty(label,name) { - m_delimiter = '"'; + m_delimiter = ','; SetValue( array ); }