X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/48a32cf671d960423138e567ae6835449d7dbd51..2d8d109b6caa338a96e84f78d57aa2dc548b93d4:/src/propgrid/props.cpp?ds=sidebyside diff --git a/src/propgrid/props.cpp b/src/propgrid/props.cpp index 3558201abc..db637b2ffb 100644 --- a/src/propgrid/props.cpp +++ b/src/propgrid/props.cpp @@ -134,7 +134,7 @@ bool wxStringProperty::DoSetAttribute( const wxString& name, wxVariant& value ) if ( name == wxPG_STRING_PASSWORD ) { m_flags &= ~(wxPG_PROP_PASSWORD); - if ( wxPGVariantToInt(value) ) m_flags |= wxPG_PROP_PASSWORD; + if ( value.GetLong() ) m_flags |= wxPG_PROP_PASSWORD; RecreateEditor(); return false; } @@ -169,11 +169,10 @@ wxString wxIntProperty::ValueToString( wxVariant& value, { return wxString::Format(wxS("%li"),value.GetLong()); } - else if ( value.GetType() == wxLongLong_VariantType ) + else if ( value.GetType() == wxPG_VARIANT_TYPE_LONGLONG ) { - wxLongLong ll; - ll << value; - return ll.ToString(); + wxLongLong ll = value.GetLongLong(); + return ll.ToString(); } return wxEmptyString; @@ -221,10 +220,9 @@ bool wxIntProperty::StringToValue( wxVariant& variant, const wxString& text, int { bool doChangeValue = isPrevLong; - if ( !isPrevLong && variantType == wxLongLong_VariantType ) + if ( !isPrevLong && variantType == wxPG_VARIANT_TYPE_LONGLONG ) { - wxLongLong oldValue; - oldValue << variant; + wxLongLong oldValue = variant.GetLongLong(); if ( oldValue.GetValue() != value64 ) doChangeValue = true; } @@ -232,7 +230,7 @@ bool wxIntProperty::StringToValue( wxVariant& variant, const wxString& text, int if ( doChangeValue ) { wxLongLong ll(value64); - variant << ll; + variant = ll; return true; } } @@ -274,14 +272,14 @@ bool wxIntProperty::DoValidation( const wxPGProperty* property, wxLongLong_t& va variant = property->GetAttribute(wxPGGlobalVars->m_strMin); if ( !variant.IsNull() ) { - wxPGVariantToLongLong(variant, &min); + min = variant.GetLongLong().GetValue(); minOk = true; } variant = property->GetAttribute(wxPGGlobalVars->m_strMax); if ( !variant.IsNull() ) { - wxPGVariantToLongLong(variant, &max); + max = variant.GetLongLong().GetValue(); maxOk = true; } @@ -290,9 +288,17 @@ bool wxIntProperty::DoValidation( const wxPGProperty* property, wxLongLong_t& va if ( value < min ) { if ( mode == wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE ) - pValidationInfo->SetFailureMessage( - wxString::Format(_("Value must be %lld or higher"),min) - ); + { + wxString msg; + if ( !maxOk ) + msg = wxString::Format( + _("Value must be %lld or higher."), min); + else + msg = wxString::Format( + _("Value must be between %lld and %lld."), + min, max); + pValidationInfo->SetFailureMessage(msg); + } else if ( mode == wxPG_PROPERTY_VALIDATION_SATURATE ) value = min; else @@ -306,9 +312,17 @@ bool wxIntProperty::DoValidation( const wxPGProperty* property, wxLongLong_t& va if ( value > max ) { if ( mode == wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE ) - pValidationInfo->SetFailureMessage( - wxString::Format(_("Value must be %lld or higher"),min) - ); + { + wxString msg; + if ( !minOk ) + msg = wxString::Format( + _("Value must be %lld or lower."), max); + else + msg = wxString::Format( + _("Value must be between %lld and %lld."), + min, max); + pValidationInfo->SetFailureMessage(msg); + } else if ( mode == wxPG_PROPERTY_VALIDATION_SATURATE ) value = max; else @@ -319,12 +333,12 @@ bool wxIntProperty::DoValidation( const wxPGProperty* property, wxLongLong_t& va return true; } -bool wxIntProperty::ValidateValue( wxVariant& value, wxPGValidationInfo& validationInfo ) const +bool wxIntProperty::ValidateValue( wxVariant& value, + wxPGValidationInfo& validationInfo ) const { - wxLongLong_t ll; - if ( wxPGVariantToLongLong(value, &ll) ) - return DoValidation(this, ll, &validationInfo, wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE); - return true; + wxLongLong_t ll = value.GetLongLong().GetValue(); + return DoValidation(this, ll, &validationInfo, + wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE); } wxValidator* wxIntProperty::GetClassValidator() @@ -354,21 +368,21 @@ wxValidator* wxIntProperty::DoGetValidator() const #define wxPG_UINT_TEMPLATE_MAX 8 -static const wxChar* gs_uintTemplates32[wxPG_UINT_TEMPLATE_MAX] = { +static const wxChar* const gs_uintTemplates32[wxPG_UINT_TEMPLATE_MAX] = { wxT("%x"),wxT("0x%x"),wxT("$%x"), wxT("%X"),wxT("0x%X"),wxT("$%X"), wxT("%u"),wxT("%o") }; -static const wxChar* gs_uintTemplates64[wxPG_UINT_TEMPLATE_MAX] = { - wxT("%") wxLongLongFmtSpec wxT("x"), - wxT("0x%") wxLongLongFmtSpec wxT("x"), - wxT("$%") wxLongLongFmtSpec wxT("x"), - wxT("%") wxLongLongFmtSpec wxT("X"), - wxT("0x%") wxLongLongFmtSpec wxT("X"), - wxT("$%") wxLongLongFmtSpec wxT("X"), - wxT("%") wxLongLongFmtSpec wxT("u"), - wxT("%") wxLongLongFmtSpec wxT("o") +static const char* const gs_uintTemplates64[wxPG_UINT_TEMPLATE_MAX] = { + "%" wxLongLongFmtSpec "x", + "0x%" wxLongLongFmtSpec "x", + "$%" wxLongLongFmtSpec "x", + "%" wxLongLongFmtSpec "X", + "0x%" wxLongLongFmtSpec "X", + "$%" wxLongLongFmtSpec "X", + "%" wxLongLongFmtSpec "u", + "%" wxLongLongFmtSpec "o" }; WX_PG_IMPLEMENT_PROPERTY_CLASS(wxUIntProperty,wxPGProperty, @@ -406,11 +420,11 @@ wxString wxUIntProperty::ValueToString( wxVariant& value, if ( value.GetType() == wxPG_VARIANT_TYPE_LONG ) { - return wxString::Format(gs_uintTemplates32[index], (unsigned long)value.GetLong()); + return wxString::Format(gs_uintTemplates32[index], + (unsigned long)value.GetLong()); } - wxULongLong ull; - ull << value; + wxULongLong ull = value.GetULongLong(); return wxString::Format(gs_uintTemplates64[index], ull.GetValue()); } @@ -439,18 +453,16 @@ bool wxUIntProperty::StringToValue( wxVariant& variant, const wxString& text, in { bool doChangeValue = isPrevLong; - if ( !isPrevLong && variantType == wxULongLong_VariantType ) + if ( !isPrevLong && variantType == wxPG_VARIANT_TYPE_ULONGLONG ) { - wxULongLong oldValue; - oldValue << variant; + wxULongLong oldValue = variant.GetULongLong(); if ( oldValue.GetValue() != value64 ) doChangeValue = true; } if ( doChangeValue ) { - wxULongLong ull(value64); - variant << ull; + variant = wxULongLong(value64); return true; } } @@ -478,49 +490,40 @@ bool wxUIntProperty::IntToValue( wxVariant& variant, int number, int WXUNUSED(ar return false; } -#ifdef ULLONG_MAX - #define wxUINT64_MAX ULLONG_MAX - #define wxUINT64_MIN wxULL(0) -#else - #define wxUINT64_MAX wxULL(0xFFFFFFFFFFFFFFFF) - #define wxUINT64_MIN wxULL(0) -#endif - bool wxUIntProperty::ValidateValue( wxVariant& value, wxPGValidationInfo& validationInfo ) const { // Check for min/max - wxULongLong_t ll; - if ( wxPGVariantToULongLong(value, &ll) ) - { - wxULongLong_t min = wxUINT64_MIN; - wxULongLong_t max = wxUINT64_MAX; - wxVariant variant; + wxULongLong_t ll = value.GetULongLong().GetValue(); + + wxULongLong_t min = 0; + wxULongLong_t max = wxUINT64_MAX; + wxVariant variant; - variant = GetAttribute(wxPGGlobalVars->m_strMin); - if ( !variant.IsNull() ) + variant = GetAttribute(wxPGGlobalVars->m_strMin); + if ( !variant.IsNull() ) + { + min = variant.GetULongLong().GetValue(); + if ( ll < min ) { - wxPGVariantToULongLong(variant, &min); - if ( ll < min ) - { - validationInfo.SetFailureMessage( - wxString::Format(_("Value must be %llu or higher"),min) - ); - return false; - } + validationInfo.SetFailureMessage( + wxString::Format(_("Value must be %llu or higher"),min) + ); + return false; } - variant = GetAttribute(wxPGGlobalVars->m_strMax); - if ( !variant.IsNull() ) + } + variant = GetAttribute(wxPGGlobalVars->m_strMax); + if ( !variant.IsNull() ) + { + max = variant.GetULongLong().GetValue(); + if ( ll > max ) { - wxPGVariantToULongLong(variant, &max); - if ( ll > max ) - { - validationInfo.SetFailureMessage( - wxString::Format(_("Value must be %llu or less"),max) - ); - return false; - } + validationInfo.SetFailureMessage( + wxString::Format(_("Value must be %llu or less"),max) + ); + return false; } } + return true; } @@ -663,7 +666,10 @@ bool wxFloatProperty::StringToValue( wxVariant& variant, const wxString& text, i return false; } -bool wxFloatProperty::DoValidation( const wxPGProperty* property, double& value, wxPGValidationInfo* pValidationInfo, int mode ) +bool wxFloatProperty::DoValidation( const wxPGProperty* property, + double& value, + wxPGValidationInfo* pValidationInfo, + int mode ) { // Check for min/max double min = (double)wxINT64_MIN; @@ -675,14 +681,14 @@ bool wxFloatProperty::DoValidation( const wxPGProperty* property, double& value, variant = property->GetAttribute(wxPGGlobalVars->m_strMin); if ( !variant.IsNull() ) { - wxPGVariantToDouble(variant, &min); + min = variant.GetDouble(); minOk = true; } variant = property->GetAttribute(wxPGGlobalVars->m_strMax); if ( !variant.IsNull() ) { - wxPGVariantToDouble(variant, &max); + max = variant.GetDouble(); maxOk = true; } @@ -704,7 +710,7 @@ bool wxFloatProperty::DoValidation( const wxPGProperty* property, double& value, if ( maxOk ) { - wxPGVariantToDouble(variant, &max); + max = variant.GetDouble(); if ( value > max ) { if ( mode == wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE ) @@ -721,12 +727,13 @@ bool wxFloatProperty::DoValidation( const wxPGProperty* property, double& value, return true; } -bool wxFloatProperty::ValidateValue( wxVariant& value, wxPGValidationInfo& validationInfo ) const +bool +wxFloatProperty::ValidateValue( wxVariant& value, + wxPGValidationInfo& validationInfo ) const { - double fpv; - if ( wxPGVariantToDouble(value, &fpv) ) - return DoValidation(this, fpv, &validationInfo, wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE); - return true; + double fpv = value.GetDouble(); + return DoValidation(this, fpv, &validationInfo, + wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE); } bool wxFloatProperty::DoSetAttribute( const wxString& name, wxVariant& value ) @@ -857,8 +864,7 @@ bool wxBoolProperty::DoSetAttribute( const wxString& name, wxVariant& value ) #if wxPG_INCLUDE_CHECKBOX if ( name == wxPG_BOOL_USE_CHECKBOX ) { - int ival = wxPGVariantToInt(value); - if ( ival ) + if ( value.GetLong() ) m_flags |= wxPG_PROP_USE_CHECKBOX; else m_flags &= ~(wxPG_PROP_USE_CHECKBOX); @@ -867,8 +873,7 @@ bool wxBoolProperty::DoSetAttribute( const wxString& name, wxVariant& value ) #endif if ( name == wxPG_BOOL_USE_DOUBLE_CLICK_CYCLING ) { - int ival = wxPGVariantToInt(value); - if ( ival ) + if ( value.GetLong() ) m_flags |= wxPG_PROP_USE_DCC; else m_flags &= ~(wxPG_PROP_USE_DCC); @@ -885,7 +890,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxEnumProperty, wxPGProperty) WX_PG_IMPLEMENT_PROPERTY_CLASS_PLAIN(wxEnumProperty,long,Choice) -wxEnumProperty::wxEnumProperty( const wxString& label, const wxString& name, const wxChar** labels, +wxEnumProperty::wxEnumProperty( const wxString& label, const wxString& name, const wxChar* const* labels, const long* values, int value ) : wxPGProperty(label,name) { SetIndex(0); @@ -899,7 +904,7 @@ wxEnumProperty::wxEnumProperty( const wxString& label, const wxString& name, con } } -wxEnumProperty::wxEnumProperty( const wxString& label, const wxString& name, const wxChar** labels, +wxEnumProperty::wxEnumProperty( const wxString& label, const wxString& name, const wxChar* const* labels, const long* values, wxPGChoices* choicesCache, int value ) : wxPGProperty(label,name) { @@ -969,11 +974,17 @@ void wxEnumProperty::OnSetValue() wxString variantType = m_value.GetType(); if ( variantType == wxPG_VARIANT_TYPE_LONG ) + { ValueFromInt_( m_value, m_value.GetLong(), wxPG_FULL_VALUE ); + } else if ( variantType == wxPG_VARIANT_TYPE_STRING ) + { ValueFromString_( m_value, m_value.GetString(), 0 ); + } else + { wxFAIL; + } if ( ms_nextIndex != -2 ) { @@ -1039,9 +1050,7 @@ bool wxEnumProperty::ValueFromString_( wxVariant& value, const wxString& text, i // If text not any of the choices, store as text instead // (but only if we are wxEditEnumProperty) - if ( useIndex == -1 && - (value.GetType() != wxPG_VARIANT_TYPE_STRING || (m_value.GetString() != text)) && - isEdit ) + if ( useIndex == -1 && isEdit ) { asText = true; } @@ -1145,14 +1154,14 @@ IMPLEMENT_DYNAMIC_CLASS(wxEditEnumProperty, wxPGProperty) WX_PG_IMPLEMENT_PROPERTY_CLASS_PLAIN(wxEditEnumProperty,wxString,ComboBox) -wxEditEnumProperty::wxEditEnumProperty( const wxString& label, const wxString& name, const wxChar** labels, +wxEditEnumProperty::wxEditEnumProperty( const wxString& label, const wxString& name, const wxChar* const* labels, const long* values, const wxString& value ) : wxEnumProperty(label,name,labels,values,0) { SetValue( value ); } -wxEditEnumProperty::wxEditEnumProperty( const wxString& label, const wxString& name, const wxChar** labels, +wxEditEnumProperty::wxEditEnumProperty( const wxString& label, const wxString& name, const wxChar* const* labels, const long* values, wxPGChoices* choicesCache, const wxString& value ) : wxEnumProperty(label,name,labels,values,choicesCache,0) { @@ -1224,6 +1233,12 @@ void wxFlagsProperty::Init() m_children.clear(); + // Relay wxPG_BOOL_USE_CHECKBOX and wxPG_BOOL_USE_DOUBLE_CLICK_CYCLING + // to child bool property controls. + long attrUseCheckBox = GetAttributeAsLong(wxPG_BOOL_USE_CHECKBOX, 0); + long attrUseDCC = GetAttributeAsLong(wxPG_BOOL_USE_DOUBLE_CLICK_CYCLING, + 0); + if ( m_choices.IsOk() ) { const wxPGChoices& choices = m_choices; @@ -1246,6 +1261,12 @@ void wxFlagsProperty::Init() { boolProp = new wxBoolProperty( label, label, child_val ); } + if ( attrUseCheckBox ) + boolProp->SetAttribute(wxPG_BOOL_USE_CHECKBOX, + true); + if ( attrUseDCC ) + boolProp->SetAttribute(wxPG_BOOL_USE_DOUBLE_CLICK_CYCLING, + true); AddPrivateChild(boolProp); } @@ -1259,7 +1280,7 @@ void wxFlagsProperty::Init() } wxFlagsProperty::wxFlagsProperty( const wxString& label, const wxString& name, - const wxChar** labels, const long* values, long value ) : wxPGProperty(label,name) + const wxChar* const* labels, const long* values, long value ) : wxPGProperty(label,name) { m_oldChoicesData = NULL; @@ -1483,15 +1504,34 @@ void wxFlagsProperty::RefreshChildren() m_oldValue = flags; } -void wxFlagsProperty::ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const +wxVariant wxFlagsProperty::ChildChanged( wxVariant& thisValue, + int childIndex, + wxVariant& childValue ) const { long oldValue = thisValue.GetLong(); long val = childValue.GetLong(); unsigned long vi = m_choices.GetValue(childIndex); + if ( val ) - thisValue = (long)(oldValue | vi); - else - thisValue = (long)(oldValue & ~(vi)); + return (long) (oldValue | vi); + + return (long) (oldValue & ~(vi)); +} + +bool wxFlagsProperty::DoSetAttribute( const wxString& name, wxVariant& value ) +{ + if ( name == wxPG_BOOL_USE_CHECKBOX || + name == wxPG_BOOL_USE_DOUBLE_CLICK_CYCLING ) + { + for ( size_t i=0; iSetAttribute(name, value); + } + // Must return false so that the attribute is stored in + // flag property's actual property storage + return false; + } + return false; } // ----------------------------------------------------------------------- @@ -1618,10 +1658,9 @@ wxFileProperty::wxFileProperty( const wxString& label, const wxString& name, wxFileProperty::~wxFileProperty() {} -#if wxUSE_VALIDATORS - wxValidator* wxFileProperty::GetClassValidator() { +#if wxUSE_VALIDATORS WX_PG_DOGETVALIDATOR_ENTRY() // Atleast wxPython 2.6.2.1 required that the string argument is given @@ -1639,6 +1678,9 @@ wxValidator* wxFileProperty::GetClassValidator() validator->SetExcludes(exChars); WX_PG_DOGETVALIDATOR_EXIT(validator) +#else + return NULL; +#endif } wxValidator* wxFileProperty::DoGetValidator() const @@ -1646,8 +1688,6 @@ wxValidator* wxFileProperty::DoGetValidator() const return GetClassValidator(); } -#endif - void wxFileProperty::OnSetValue() { const wxString& fnstr = m_value.GetString(); @@ -1776,7 +1816,7 @@ bool wxFileProperty::DoSetAttribute( const wxString& name, wxVariant& value ) // stored in m_attributes. if ( name == wxPG_FILE_SHOW_FULL_PATH ) { - if ( wxPGVariantToInt(value) ) + if ( value.GetLong() ) m_flags |= wxPG_PROP_SHOW_FULL_FILENAME; else m_flags &= ~(wxPG_PROP_SHOW_FULL_FILENAME); @@ -1921,14 +1961,14 @@ bool wxLongStringProperty::DisplayEditorDialog( wxPGProperty* prop, wxPropertyGr rowsizer->Add( ed, 1, wxEXPAND|wxALL, spacing ); topsizer->Add( rowsizer, 1, wxEXPAND, 0 ); - rowsizer = new wxBoxSizer( wxHORIZONTAL ); - const int but_sz_flags = - wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT; - rowsizer->Add( new wxButton(dlg,wxID_OK,_("Ok")), - 0, but_sz_flags, spacing ); - rowsizer->Add( new wxButton(dlg,wxID_CANCEL,_("Cancel")), - 0, but_sz_flags, spacing ); - topsizer->Add( rowsizer, 0, wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL, 0 ); + + wxStdDialogButtonSizer* buttonSizer = new wxStdDialogButtonSizer(); + buttonSizer->AddButton(new wxButton(dlg, wxID_OK)); + buttonSizer->AddButton(new wxButton(dlg, wxID_CANCEL)); + buttonSizer->Realize(); + topsizer->Add( buttonSizer, 0, + wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL|wxBOTTOM|wxRIGHT, + spacing ); dlg->SetSizer( topsizer ); topsizer->SetSizeHints( dlg ); @@ -2083,9 +2123,6 @@ bool wxArrayEditorDialog::Create( wxWindow *parent, m_curFocus = 1; - const int but_sz_flags = - wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL|wxALL; //wxBOTTOM|wxLEFT|wxRIGHT; - wxBoxSizer* topsizer = new wxBoxSizer( wxVERTICAL ); // Message @@ -2097,12 +2134,14 @@ bool wxArrayEditorDialog::Create( wxWindow *parent, wxBoxSizer* rowsizer = new wxBoxSizer( wxHORIZONTAL ); m_edValue = new wxTextCtrl(this,21,wxEmptyString, wxDefaultPosition,wxDefaultSize,wxTE_PROCESS_ENTER); +#if wxUSE_VALIDATORS wxValidator* validator = GetTextCtrlValidator(); if ( validator ) { m_edValue->SetValidator( *validator ); delete validator; } +#endif rowsizer->Add( m_edValue, 1, wxALIGN_LEFT|wxALIGN_CENTRE_VERTICAL|wxALL, spacing ); @@ -2155,17 +2194,14 @@ bool wxArrayEditorDialog::Create( wxWindow *parent, topsizer->Add( new wxStaticLine(this,-1), 0, wxEXPAND|wxTOP|wxLEFT|wxRIGHT, spacing ); - // buttons - rowsizer = new wxBoxSizer( wxHORIZONTAL ); - /* - const int but_sz_flags = - wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT; - */ - rowsizer->Add( new wxButton(this,wxID_OK,_("Ok")), - 0, but_sz_flags, spacing ); - rowsizer->Add( new wxButton(this,wxID_CANCEL,_("Cancel")), - 0, but_sz_flags, spacing ); - topsizer->Add( rowsizer, 0, wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL, 0 ); + // Standard dialog buttons + wxStdDialogButtonSizer* buttonSizer = new wxStdDialogButtonSizer(); + buttonSizer->AddButton(new wxButton(this, wxID_OK)); + buttonSizer->AddButton(new wxButton(this, wxID_CANCEL)); + buttonSizer->Realize(); + topsizer->Add( buttonSizer, 0, + wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL|wxALL, + spacing ); m_edValue->SetFocus(); @@ -2554,7 +2590,7 @@ bool wxArrayStringProperty::StringToValue( wxVariant& variant, const wxString& t // Need to replace backslashes with empty characters // (opposite what is done in GenerateValueString). - token.Replace ( wxS("\\"), wxEmptyString, true ); + token.Replace ( wxS("\\\\"), wxS("\\"), true ); arr.Add( token );