From d8c74d044b5acfedfbc15bf29bbfa4f4bc8f1bf7 Mon Sep 17 00:00:00 2001 From: Jaakko Salli Date: Wed, 1 Oct 2008 15:13:00 +0000 Subject: [PATCH] Use m_children as it were std::vector git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56015 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/propgrid/property.h | 3 +++ src/propgrid/property.cpp | 14 +++++++++++++ src/propgrid/propgridpagestate.cpp | 32 ++++++++++++++++++++++-------- 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/include/wx/propgrid/property.h b/include/wx/propgrid/property.h index 021d5a90a8..d394098c82 100644 --- a/include/wx/propgrid/property.h +++ b/include/wx/propgrid/property.h @@ -1984,6 +1984,9 @@ protected: // Call for after sub-properties added with AddChild void PrepareSubProperties(); + // Removes child property with given pointer. Does not delete it. + void RemoveChild( wxPGProperty* p ); + void SetParentalType( int flag ) { m_flags &= ~(wxPG_PROP_PROPERTY|wxPG_PROP_PARENTAL_FLAGS); diff --git a/src/propgrid/property.cpp b/src/propgrid/property.cpp index 63fd9cac84..29277f0568 100644 --- a/src/propgrid/property.cpp +++ b/src/propgrid/property.cpp @@ -1581,6 +1581,20 @@ void wxPGProperty::AddChild( wxPGProperty* prop ) prop->m_parent = this; } +void wxPGProperty::RemoveChild( wxPGProperty* p ) +{ + wxArrayPGProperty::iterator it; + wxArrayPGProperty& children = m_children; + + for ( it=children.begin(); it != children.end(); it++ ) + { + if ( *it == p ) + { + m_children.erase(it); + break; + } + } +} void wxPGProperty::AdaptListToValue( wxVariant& list, wxVariant* value ) const { diff --git a/src/propgrid/propgridpagestate.cpp b/src/propgrid/propgridpagestate.cpp index 913321f78d..9454dede82 100644 --- a/src/propgrid/propgridpagestate.cpp +++ b/src/propgrid/propgridpagestate.cpp @@ -592,6 +592,16 @@ bool wxPropertyGridPageState::EnableCategories( bool enable ) // ----------------------------------------------------------------------- +#if wxUSE_STL +#include + +static bool wxPG_SortFunc(wxPGProperty *p1, wxPGProperty *p2) +{ + return p1->GetLabel() < p2->GetLabel(); +} + +#else + static int wxPG_SortFunc(wxPGProperty **p1, wxPGProperty **p2) { wxPGProperty *pp1 = *p1; @@ -599,6 +609,8 @@ static int wxPG_SortFunc(wxPGProperty **p1, wxPGProperty **p2) return pp1->GetLabel().compare( pp2->GetLabel() ); } +#endif + void wxPropertyGridPageState::SortChildren( wxPGProperty* p ) { if ( !p ) @@ -613,7 +625,11 @@ void wxPropertyGridPageState::SortChildren( wxPGProperty* p ) if ( pwc->GetChildCount() < 1 ) return; +#if wxUSE_STL + std::sort(pwc->m_children.begin(), pwc->m_children.end(), wxPG_SortFunc); +#else pwc->m_children.Sort( wxPG_SortFunc ); +#endif // Fix indexes pwc->FixIndexesOfChildren(); @@ -1806,7 +1822,7 @@ void wxPropertyGridPageState::DoDelete( wxPGProperty* item ) wxPGProperty * p = pwc->Item( i ); wxASSERT( p != NULL ); if ( !p->IsCategory() ) - m_abcArray->m_children.Remove( p ); + m_abcArray->RemoveChild(p); } if ( IsInNonCatMode() ) @@ -1822,14 +1838,13 @@ void wxPropertyGridPageState::DoDelete( wxPGProperty* item ) if ( !item->IsCategory() && item->GetParent()->IsCategory() ) { if ( m_abcArray ) - { - m_abcArray->m_children.Remove( item ); - } + m_abcArray->RemoveChild(item); } // categorized mode - categorized array - item->m_parent->m_children.RemoveAt(indinparent); - item->m_parent->FixIndexesOfChildren(/*indinparent*/); + wxArrayPGProperty& parentsChildren = item->m_parent->m_children; + parentsChildren.erase( parentsChildren.begin() + indinparent ); + item->m_parent->FixIndexesOfChildren(); } else { @@ -1854,13 +1869,14 @@ void wxPropertyGridPageState::DoDelete( wxPGProperty* item ) } } } - cat_parent->m_children.RemoveAt(cat_index); + cat_parent->m_children.erase(cat_parent->m_children.begin()+cat_index); // non-categorized mode - non-categorized array if ( !item->IsCategory() ) { wxASSERT( item->m_parent == m_abcArray ); - item->m_parent->m_children.RemoveAt(indinparent); + wxArrayPGProperty& parentsChildren = item->m_parent->m_children; + parentsChildren.erase(parentsChildren.begin() + indinparent); item->m_parent->FixIndexesOfChildren(indinparent); } } -- 2.45.2