X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f915d44b3f310ceabfca6b0e66c6c81fd778f7b9..b815db22267b568a47c026982fb061d57286a783:/src/propgrid/propgridpagestate.cpp diff --git a/src/propgrid/propgridpagestate.cpp b/src/propgrid/propgridpagestate.cpp index 705baa516a..802f05ee77 100644 --- a/src/propgrid/propgridpagestate.cpp +++ b/src/propgrid/propgridpagestate.cpp @@ -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; } } @@ -453,8 +453,15 @@ void wxPropertyGridPageState::DoSetPropertyName( wxPGProperty* p, { 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); } @@ -1114,7 +1121,7 @@ bool wxPropertyGridPageState::DoSetPropertyValueString( wxPGProperty* p, const w { p->SetValue(variant); if ( m_selected==p && this==m_pPropGrid->GetState() ) - p->UpdateControl(m_pPropGrid->GetEditorControl()); + m_pPropGrid->RefreshEditor(); } return true; @@ -1130,7 +1137,7 @@ bool wxPropertyGridPageState::DoSetPropertyValue( wxPGProperty* p, wxVariant& va { p->SetValue(value); if ( m_selected==p && this==m_pPropGrid->GetState() ) - p->UpdateControl(m_pPropGrid->GetEditorControl()); + m_pPropGrid->RefreshEditor(); return true; } @@ -1497,9 +1504,7 @@ void wxPropertyGridPageState::DoSetPropertyValues( const wxVariantList& list, wx m_pPropGrid->Thaw(); if ( this == m_pPropGrid->GetState() ) - { - m_selected->UpdateControl(m_pPropGrid->GetEditorControl()); - } + m_pPropGrid->RefreshEditor(); } } @@ -1676,7 +1681,8 @@ wxPGProperty* wxPropertyGridPageState::DoInsert( wxPGProperty* parent, int index } // 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(); @@ -1698,57 +1704,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; iGetChildCount(); 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; iGetChildCount(); 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(); } @@ -1787,7 +1777,9 @@ void wxPropertyGridPageState::DoDelete( wxPGProperty* item, bool doDelete ) } } - 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 if ( doDelete )