]> git.saurik.com Git - wxWidgets.git/commitdiff
Fixed various inconsistencies with deleting properties, added wxPGProperty::DeleteChi...
authorJaakko Salli <jaakko.salli@dnainternet.net>
Sat, 20 Dec 2008 15:47:05 +0000 (15:47 +0000)
committerJaakko Salli <jaakko.salli@dnainternet.net>
Sat, 20 Dec 2008 15:47:05 +0000 (15:47 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57442 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

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

index 7c329b7d1c4fca1d7980a27f773f37431cc0d586..38019dfe9b43117d829d16ddf92b6256dcbc18c7 100644 (file)
@@ -1443,6 +1443,11 @@ public:
         return false;
     }
 
+    /**
+        Deletes children of the property.
+    */
+    void DeleteChildren();
+
     /**
         Removes entry from property's wxPGChoices and editor control (if it is
         active).
@@ -2073,9 +2078,6 @@ public:
     /** Returns index of given child property. */
     int Index( const wxPGProperty* p ) const;
 
-    /** Deletes all sub-properties. */
-    void Empty();
-
     // Puts correct indexes to children
     void FixIndicesOfChildren( unsigned int starthere = 0 );
 
@@ -2205,6 +2207,9 @@ protected:
 
     void DoSetName(const wxString& str) { m_name = str; }
 
+    /** Deletes all sub-properties. */
+    void Empty();
+
     void InitAfterAdded( wxPropertyGridPageState* pageState,
                          wxPropertyGrid* propgrid );
 
index 9369d8cb964a5eb61e0b5318e906c0f21645f99d..5cd1d564a1ac8eb40982e55d029bbf8afd040d34 100644 (file)
@@ -907,6 +907,11 @@ public:
     */
     bool AreChildrenComponents() const;
 
+    /**
+        Deletes children of the property.
+    */
+    void DeleteChildren();
+
     /**
         Removes entry from property's wxPGChoices and editor control (if it is active).
 
index 53a26de39ffa726c53f994b3517d90bda3b28d03..addc80c0c20af351f4585859df050a027bfcde36 100644 (file)
@@ -2276,6 +2276,17 @@ void wxPGProperty::Empty()
     m_children.clear();
 }
 
+void wxPGProperty::DeleteChildren()
+{
+    wxPropertyGridPageState* state = m_parentState;
+
+    while ( GetChildCount() )
+    {
+        wxPGProperty* child = Item(GetChildCount()-1);
+        state->DoDelete(child, true);
+    }
+}
+
 void wxPGProperty::ChildChanged( wxVariant& WXUNUSED(thisValue),
                                  int WXUNUSED(childIndex),
                                  wxVariant& WXUNUSED(childValue) ) const
index 705baa516adafc44a82dffac78f540bfd79b106e..6e4e78d65e7a43bd0dd1fe71b6803da34c5214d5 100644 (file)
@@ -245,17 +245,17 @@ void wxPropertyGridPageState::InitNonCatMode()
 
     if ( m_properties->GetChildCount() )
     {
-        // Copy items.
-        wxPropertyGridIterator it( this, wxPG_ITERATE_DEFAULT|wxPG_ITERATE_CATEGORIES );
+        //
+        // Prepare m_abcArray
+        wxPropertyGridIterator it( this, wxPG_ITERATE_PROPERTIES );
 
         for ( ; !it.AtEnd(); it.Next() )
         {
             wxPGProperty* p = it.GetProperty();
             wxPGProperty* parent = p->GetParent();
-            if ( p->HasFlag(wxPG_PROP_MISC_PARENT) &&
-                ( parent == m_properties || (parent->IsCategory() || parent->IsRoot()) ) )
+            if ( parent->IsCategory() || parent->IsRoot() )
             {
-                m_abcArray->AddChild2( p );
+                m_abcArray->AddChild2(p);
                 p->m_parent = &m_regularArray;
             }
         }
@@ -1698,57 +1698,41 @@ void wxPropertyGridPageState::DoDelete( wxPGProperty* item, bool doDelete )
     wxCHECK_RET( item != &m_regularArray && item != m_abcArray,
         wxT("wxPropertyGrid: Do not attempt to remove the root item.") );
 
-    size_t i;
     unsigned int indinparent = item->GetIndexInParent();
 
     wxPGProperty* pwc = (wxPGProperty*)item;
+    wxPGProperty* parent = item->GetParent();
 
-    wxCHECK_RET( !item->GetParent()->HasFlag(wxPG_PROP_AGGREGATE),
+    wxCHECK_RET( !parent->HasFlag(wxPG_PROP_AGGREGATE),
         wxT("wxPropertyGrid: Do not attempt to remove sub-properties.") );
 
-    if ( item->IsCategory() )
+    // Delete children
+    if ( item->GetChildCount() && !item->HasFlag(wxPG_PROP_AGGREGATE) )
     {
         // deleting a category
-
-        // erase category entries from the hash table
-        for ( i=0; i<pwc->GetChildCount(); i++ )
+        if ( item->IsCategory() )
         {
-            wxPGProperty* sp = pwc->Item( i );
-            if ( sp->GetBaseName().Len() ) m_dictName.erase(sp->GetBaseName());
+            if ( pwc == m_currentCategory )
+                m_currentCategory = (wxPropertyCategory*) NULL;
         }
 
-        if ( pwc == m_currentCategory )
-            m_currentCategory = (wxPropertyCategory*) NULL;
-
-        if ( m_abcArray )
-        {
-            // Remove children from non-categorized array.
-            for ( i=0; i<pwc->GetChildCount(); i++ )
-            {
-                wxPGProperty * p = pwc->Item( i );
-                wxASSERT( p != NULL );
-                if ( !p->IsCategory() )
-                    m_abcArray->RemoveChild(p);
-            }
-
-            if ( IsInNonCatMode() )
-                m_abcArray->FixIndicesOfChildren();
-        }
+        item->DeleteChildren();
     }
 
     if ( !IsInNonCatMode() )
     {
         // categorized mode - non-categorized array
 
-        // Remove from non-cat array, but only if parent is in it
-        if ( !item->IsCategory() && item->GetParent()->IsCategory() )
+        // Remove from non-cat array
+        if ( !item->IsCategory() &&
+             (parent->IsCategory() || parent->IsRoot()) )
         {
             if ( m_abcArray )
                 m_abcArray->RemoveChild(item);
         }
 
         // categorized mode - categorized array
-        wxArrayPGProperty& parentsChildren = item->m_parent->m_children;
+        wxArrayPGProperty& parentsChildren = parent->m_children;
         parentsChildren.erase( parentsChildren.begin() + indinparent );
         item->m_parent->FixIndicesOfChildren();
     }