]> git.saurik.com Git - wxWidgets.git/blobdiff - src/propgrid/propgridpagestate.cpp
correct typo in one of the last changes
[wxWidgets.git] / src / propgrid / propgridpagestate.cpp
index c1ccec0c232c94e904ffd8171d5bb0326e029365..a2ce40e1ed65c94e70e0f07ed570530c125033a4 100644 (file)
@@ -74,11 +74,10 @@ void wxPropertyGridIteratorBase::Init( wxPropertyGridPageState* state, int flags
 
 void wxPropertyGridIteratorBase::Init( wxPropertyGridPageState* state, int flags, int startPos, int dir  )
 {
 
 void wxPropertyGridIteratorBase::Init( wxPropertyGridPageState* state, int flags, int startPos, int dir  )
 {
-    wxPGProperty* property;
+    wxPGProperty* property = NULL;
 
     if ( startPos == wxTOP )
     {
 
     if ( startPos == wxTOP )
     {
-        property = NULL;
         if ( dir == 0 )
             dir = 1;
     }
         if ( dir == 0 )
             dir = 1;
     }
@@ -90,8 +89,7 @@ void wxPropertyGridIteratorBase::Init( wxPropertyGridPageState* state, int flags
     }
     else
     {
     }
     else
     {
-        wxASSERT_MSG( false, wxT("Only supported stating positions are wxTOP and wxBOTTOM") );
-        property = NULL;
+        wxFAIL_MSG("Only supported starting positions are wxTOP and wxBOTTOM");
     }
 
     Init( state, flags, property, dir );
     }
 
     Init( state, flags, property, dir );
@@ -247,17 +245,17 @@ void wxPropertyGridPageState::InitNonCatMode()
 
     if ( m_properties->GetChildCount() )
     {
 
     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();
 
         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;
             }
         }
                 p->m_parent = &m_regularArray;
             }
         }
@@ -455,8 +453,15 @@ void wxPropertyGridPageState::DoSetPropertyName( wxPGProperty* p,
 {
     wxCHECK_RET( p, wxT("invalid property id") );
 
 {
     wxCHECK_RET( p, wxT("invalid property id") );
 
-    if ( p->GetBaseName().Len() ) m_dictName.erase( p->GetBaseName() );
-    if ( newName.Len() ) m_dictName[newName] = (void*) p;
+    wxPGProperty* parent = p->GetParent();
+
+    if ( parent->IsCategory() || parent->IsRoot() )
+    {
+        if ( p->GetBaseName().length() )
+            m_dictName.erase( p->GetBaseName() );
+        if ( newName.length() )
+            m_dictName[newName] = (void*) p;
+    }
 
     p->DoSetName(newName);
 }
 
     p->DoSetName(newName);
 }
@@ -470,7 +475,7 @@ void wxPropertyGridPageState::DoSetPropertyName( wxPGProperty* p,
 //   NB: Nowadays only needed for alphabetic/categoric mode switching.
 // -----------------------------------------------------------------------
 
 //   NB: Nowadays only needed for alphabetic/categoric mode switching.
 // -----------------------------------------------------------------------
 
-#define II_INVALID_I    0x00FFFFFF
+//#define II_INVALID_I    0x00FFFFFF
 
 #define ITEM_ITERATION_VARIABLES \
     wxPGProperty* parent; \
 
 #define ITEM_ITERATION_VARIABLES \
     wxPGProperty* parent; \
@@ -481,6 +486,7 @@ void wxPropertyGridPageState::DoSetPropertyName( wxPGProperty* p,
     parent = m_properties; \
     i = 0;
 
     parent = m_properties; \
     i = 0;
 
+#if 0
 #define ITEM_ITERATION_INIT(startparent, startindex, state) \
     parent = startparent; \
     i = (unsigned int)startindex; \
 #define ITEM_ITERATION_INIT(startparent, startindex, state) \
     parent = startparent; \
     i = (unsigned int)startindex; \
@@ -489,6 +495,7 @@ void wxPropertyGridPageState::DoSetPropertyName( wxPGProperty* p,
         parent = state->m_properties; \
         i = 0; \
     }
         parent = state->m_properties; \
         i = 0; \
     }
+#endif
 
 #define ITEM_ITERATION_LOOP_BEGIN \
     do \
 
 #define ITEM_ITERATION_LOOP_BEGIN \
     do \
@@ -895,8 +902,6 @@ void wxPropertyGridPageState::CheckColumnWidths( int widthChange )
     int reduceCol = -1;
     int highestColWidth = 0;
 
     int reduceCol = -1;
     int highestColWidth = 0;
 
-    bool minimizedCols = false;
-
 #ifdef __WXDEBUG__
     if ( debug )
         wxLogDebug(wxT("ColumnWidthCheck (virtualWidth: %i, clientWidth: %i)"), width, clientWidth);
 #ifdef __WXDEBUG__
     if ( debug )
         wxLogDebug(wxT("ColumnWidthCheck (virtualWidth: %i, clientWidth: %i)"), width, clientWidth);
@@ -910,7 +915,6 @@ void wxPropertyGridPageState::CheckColumnWidths( int widthChange )
         if ( m_colWidths[i] <= min )
         {
             m_colWidths[i] = min;
         if ( m_colWidths[i] <= min )
         {
             m_colWidths[i] = min;
-            minimizedCols = true;
         }
         else
         {
         }
         else
         {
@@ -947,10 +951,10 @@ void wxPropertyGridPageState::CheckColumnWidths( int widthChange )
         if ( colsWidth < width )
         {
             // Increase column
         if ( colsWidth < width )
         {
             // Increase column
-        #ifdef __WXDEBUG__
-        if ( debug )
-            wxLogDebug(wxT("  Adjust last column to %i"), m_colWidths[lastColumn] + widthHigher);
-        #endif
+#ifdef __WXDEBUG__
+            if ( debug )
+                wxLogDebug(wxT("  Adjust last column to %i"), m_colWidths[lastColumn] + widthHigher);
+#endif
             m_colWidths[lastColumn] = m_colWidths[lastColumn] + widthHigher;
         }
         else if ( colsWidth > width )
             m_colWidths[lastColumn] = m_colWidths[lastColumn] + widthHigher;
         }
         else if ( colsWidth > width )
@@ -1376,7 +1380,7 @@ void wxPropertyGridPageState::DoSetPropertyValues( const wxVariantList& list, wx
 
     //
     // Second pass for special entries
 
     //
     // Second pass for special entries
-    for ( node = list.begin(); node != list.end(); node++ )
+    for ( node = list.begin(); node != list.end(); ++node )
     {
         wxVariant *current = (wxVariant*)*node;
 
     {
         wxVariant *current = (wxVariant*)*node;
 
@@ -1440,7 +1444,7 @@ void wxPropertyGridPageState::DoSetPropertyValues( const wxVariantList& list, wx
 
     if ( numSpecialEntries )
     {
 
     if ( numSpecialEntries )
     {
-        for ( node = list.begin(); node != list.end(); node++ )
+        for ( node = list.begin(); node != list.end(); ++node )
         {
             wxVariant *current = (wxVariant*)*node;
 
         {
             wxVariant *current = (wxVariant*)*node;
 
@@ -1471,7 +1475,7 @@ void wxPropertyGridPageState::DoSetPropertyValues( const wxVariantList& list, wx
                                 wxVariantList& list2 = current->GetList();
                                 wxVariantList::const_iterator node2;
 
                                 wxVariantList& list2 = current->GetList();
                                 wxVariantList::const_iterator node2;
 
-                                for ( node2 = list2.begin(); node2 != list2.end(); node2++ )
+                                for ( node2 = list2.begin(); node2 != list2.end(); ++node2 )
                                 {
                                     wxVariant *attr = (wxVariant*)*node2;
                                     foundProp->SetAttribute( attr->GetName(), *attr );
                                 {
                                     wxVariant *attr = (wxVariant*)*node2;
                                     foundProp->SetAttribute( attr->GetName(), *attr );
@@ -1565,13 +1569,8 @@ bool wxPropertyGridPageState::PrepareToAddItem( wxPGProperty* property,
 #endif
 
     // Make sure nothing is selected.
 #endif
 
     // Make sure nothing is selected.
-    if ( propGrid && propGrid->m_selected )
-    {
-        bool selRes = propGrid->ClearSelection();
-        wxPG_CHECK_MSG_DBG( selRes,
-                            true,
-                            wxT("failed to deselect a property (editor probably had invalid value)") );
-    }
+    if ( propGrid )
+        propGrid->ClearSelection(false);
 
     // NULL parent == root parent
     if ( !scheduledParent )
 
     // NULL parent == root parent
     if ( !scheduledParent )
@@ -1684,7 +1683,8 @@ wxPGProperty* wxPropertyGridPageState::DoInsert( wxPGProperty* parent, int index
     }
 
     // Only add name to hashmap if parent is root or category
     }
 
     // Only add name to hashmap if parent is root or category
-    if ( (parent->IsCategory() || parent->IsRoot()) && property->m_name.length() )
+    if ( property->m_name.length() &&
+        (parent->IsCategory() || parent->IsRoot()) )
         m_dictName[property->m_name] = (void*) property;
 
     VirtualHeightChanged();
         m_dictName[property->m_name] = (void*) property;
 
     VirtualHeightChanged();
@@ -1698,7 +1698,7 @@ wxPGProperty* wxPropertyGridPageState::DoInsert( wxPGProperty* parent, int index
 
 // -----------------------------------------------------------------------
 
 
 // -----------------------------------------------------------------------
 
-void wxPropertyGridPageState::DoDelete( wxPGProperty* item )
+void wxPropertyGridPageState::DoDelete( wxPGProperty* item, bool doDelete )
 {
     wxCHECK_RET( item->GetParent(),
         wxT("this property was already deleted") );
 {
     wxCHECK_RET( item->GetParent(),
         wxT("this property was already deleted") );
@@ -1706,57 +1706,41 @@ void wxPropertyGridPageState::DoDelete( wxPGProperty* item )
     wxCHECK_RET( item != &m_regularArray && item != m_abcArray,
         wxT("wxPropertyGrid: Do not attempt to remove the root item.") );
 
     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;
     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.") );
 
         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
     {
         // 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
 
     }
 
     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
         {
             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();
     }
         parentsChildren.erase( parentsChildren.begin() + indinparent );
         item->m_parent->FixIndicesOfChildren();
     }
@@ -1795,10 +1779,13 @@ void wxPropertyGridPageState::DoDelete( wxPGProperty* item )
         }
     }
 
         }
     }
 
-    if ( item->GetBaseName().Len() ) m_dictName.erase(item->GetBaseName());
+    if ( item->GetBaseName().length() && 
+         (parent->IsCategory() || parent->IsRoot()) )
+        m_dictName.erase(item->GetBaseName());
 
     // We can actually delete it now
 
     // We can actually delete it now
-    delete item;
+    if ( doDelete )
+        delete item;
 
     m_itemsAdded = 1; // Not a logical assignment (but required nonetheless).
 
 
     m_itemsAdded = 1; // Not a logical assignment (but required nonetheless).