]> git.saurik.com Git - wxWidgets.git/blobdiff - src/propgrid/propgridpagestate.cpp
moving embedding to common API
[wxWidgets.git] / src / propgrid / propgridpagestate.cpp
index ac1792083f1940336016cf88ce103e886f92a0bf..4fff40666a37a7f69af148cb3c6a936e9e3f74e6 100644 (file)
@@ -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"
     #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
 
@@ -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 <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 )
@@ -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