// Author: Jaakko Salli
// Modified by:
// Created: 2008-08-24
-// RCS-ID: $Id:
+// RCS-ID: $Id$
// Copyright: (c) Jaakko Salli
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
#pragma hdrstop
#endif
+#if wxUSE_PROPGRID
+
#ifndef WX_PRECOMP
#include "wx/defs.h"
#include "wx/object.h"
#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 <wx/propgrid/propgridpagestate.h>
-#include <wx/propgrid/propgrid.h>
-#include <wx/propgrid/editors.h>
-
-#include <typeinfo>
+#include "wx/propgrid/propgridpagestate.h"
+#include "wx/propgrid/propgrid.h"
+#include "wx/propgrid/editors.h"
#define wxPG_DEFAULT_SPLITTERX 110
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
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
-static int wxPG_SortFunc(void **p1, void **p2)
+#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 = *((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 )
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();
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;
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() )
wxPGProperty * p = pwc->Item( i );
wxASSERT( p != NULL );
if ( !p->IsCategory() )
- m_abcArray->m_children.Remove( p );
+ m_abcArray->RemoveChild(p);
}
if ( IsInNonCatMode() )
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
{
}
}
}
- 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);
}
}
}
// -----------------------------------------------------------------------
+
+#endif // wxUSE_PROPGRID