X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6bce2ad9197274135a20234a4af5e6be8dead5a9..c4825ef73a5f190b8f39c59df098c3f39fa4464b:/src/propgrid/propgridpagestate.cpp diff --git a/src/propgrid/propgridpagestate.cpp b/src/propgrid/propgridpagestate.cpp index ac1792083f..4fff40666a 100644 --- a/src/propgrid/propgridpagestate.cpp +++ b/src/propgrid/propgridpagestate.cpp @@ -4,7 +4,7 @@ // Author: Jaakko Salli // Modified by: // Created: 2008-08-24 -// RCS-ID: $Id: +// RCS-ID: $Id$ // Copyright: (c) Jaakko Salli // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// @@ -16,6 +16,8 @@ #pragma hdrstop #endif +#if wxUSE_PROPGRID + #ifndef WX_PRECOMP #include "wx/defs.h" #include "wx/object.h" @@ -27,35 +29,18 @@ #include "wx/panel.h" #include "wx/dc.h" #include "wx/dcmemory.h" - #include "wx/button.h" #include "wx/pen.h" #include "wx/brush.h" - #include "wx/cursor.h" - #include "wx/dialog.h" - #include "wx/settings.h" - #include "wx/msgdlg.h" - #include "wx/choice.h" - #include "wx/stattext.h" - #include "wx/scrolwin.h" - #include "wx/dirdlg.h" - #include "wx/layout.h" - #include "wx/sizer.h" - #include "wx/textdlg.h" - #include "wx/filedlg.h" - #include "wx/statusbr.h" #include "wx/intl.h" - #include "wx/frame.h" #include "wx/stopwatch.h" #endif // This define is necessary to prevent macro clearing #define __wxPG_SOURCE_FILE__ -#include -#include -#include - -#include +#include "wx/propgrid/propgridpagestate.h" +#include "wx/propgrid/propgrid.h" +#include "wx/propgrid/editors.h" #define wxPG_DEFAULT_SPLITTERX 110 @@ -463,6 +448,19 @@ wxPGProperty* wxPropertyGridPageState::BaseGetPropertyByName( const wxString& na return (wxPGProperty*) NULL; } +// ----------------------------------------------------------------------- + +void wxPropertyGridPageState::DoSetPropertyName( wxPGProperty* p, + const wxString& newName ) +{ + wxCHECK_RET( p, wxT("invalid property id") ); + + if ( p->GetBaseName().Len() ) m_dictName.erase( p->GetBaseName() ); + if ( newName.Len() ) m_dictName[newName] = (void*) p; + + p->DoSetName(newName); +} + // ----------------------------------------------------------------------- // wxPropertyGridPageState global operations // ----------------------------------------------------------------------- @@ -594,13 +592,25 @@ bool wxPropertyGridPageState::EnableCategories( bool enable ) // ----------------------------------------------------------------------- -static int wxPG_SortFunc(void **p1, void **p2) +#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 = *((wxPGProperty**)p1); - wxPGProperty *pp2 = *((wxPGProperty**)p2); + wxPGProperty *pp1 = *p1; + wxPGProperty *pp2 = *p2; return pp1->GetLabel().compare( pp2->GetLabel() ); } +#endif + void wxPropertyGridPageState::SortChildren( wxPGProperty* p ) { if ( !p ) @@ -615,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(); @@ -1449,7 +1463,7 @@ void wxPropertyGridPageState::DoSetPropertyValues( const wxVariantList& list, wx wxPGProperty* foundProp = BaseGetPropertyByName(propName); if ( foundProp ) { - wxASSERT( wxPGIsVariantType(*current, list) ); + wxASSERT( current->GetType() == wxPG_VARIANT_TYPE_LIST ); wxVariantList& list2 = current->GetList(); wxVariantList::const_iterator node2; @@ -1503,6 +1517,12 @@ int wxPropertyGridPageState::PrepareToAddItem( wxPGProperty* property, if ( scheduledParent == m_properties ) scheduledParent = (wxPGProperty*) NULL; + if ( scheduledParent && !scheduledParent->IsCategory() ) + { + wxASSERT_MSG( property->GetBaseName().length(), + "Property's children must have unique, non-empty names within their scope" ); + } + property->m_parentState = this; if ( property->IsCategory() ) @@ -1802,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() ) @@ -1818,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 { @@ -1850,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); } } @@ -1872,3 +1892,5 @@ void wxPropertyGridPageState::DoDelete( wxPGProperty* item ) } // ----------------------------------------------------------------------- + +#endif // wxUSE_PROPGRID