]> git.saurik.com Git - wxWidgets.git/commitdiff
Use m_children as it were std::vector
authorJaakko Salli <jaakko.salli@dnainternet.net>
Wed, 1 Oct 2008 15:13:00 +0000 (15:13 +0000)
committerJaakko Salli <jaakko.salli@dnainternet.net>
Wed, 1 Oct 2008 15:13:00 +0000 (15:13 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56015 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/propgrid/property.h
src/propgrid/property.cpp
src/propgrid/propgridpagestate.cpp

index 021d5a90a8b28e323a36a9b6a714f9039866d5a4..d394098c82bb56af10c855299448a2c07911def2 100644 (file)
@@ -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);
index 63fd9cac849449fdc651be04e46055ff8f0b3abf..29277f0568336308981a850dacbd5fba233044f4 100644 (file)
@@ -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
 {
index 913321f78d69036a40bc4c8e5c65a75535b9b8ff..9454dede82f0b4b4b1bb57401c06667a0bbb98f6 100644 (file)
@@ -592,6 +592,16 @@ bool wxPropertyGridPageState::EnableCategories( bool enable )
 
 // -----------------------------------------------------------------------
 
+#if wxUSE_STL
+#include <algorithm>
+
+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);
         }
     }