]> git.saurik.com Git - wxWidgets.git/blobdiff - src/propgrid/propgridpagestate.cpp
Added wxChoice renderer to wxDataViewCtrl
[wxWidgets.git] / src / propgrid / propgridpagestate.cpp
index 4fff40666a37a7f69af148cb3c6a936e9e3f74e6..fc4f6f14e5b57ba33457220dbdc2012a6d45d4cc 100644 (file)
@@ -632,7 +632,7 @@ void wxPropertyGridPageState::SortChildren( wxPGProperty* p )
 #endif
 
     // Fix indexes
-    pwc->FixIndexesOfChildren();
+    pwc->FixIndicesOfChildren();
 
 }
 
@@ -697,7 +697,10 @@ int wxPropertyGridPageState::GetColumnFitWidth(wxClientDC& dc,
         wxPGProperty* p = pwc->Item(i);
         if ( !p->IsCategory() )
         {
-            dc.GetTextExtent( p->GetColumnText(col), &w, &h );
+            const wxPGCell* cell = NULL;
+            wxString text;
+            p->GetDisplayInfo(col, -1, 0, &text, &cell);
+            dc.GetTextExtent(text, &w, &h);
             if ( col == 0 )
                 w += ( ((int)p->m_depth-1) * pg->m_subgroup_extramargin );
 
@@ -1100,7 +1103,7 @@ bool wxPropertyGridPageState::DoSetPropertyValueString( wxPGProperty* p, const w
 {
     if ( p )
     {
-        int flags = wxPG_REPORT_ERROR|wxPG_FULL_VALUE;
+        int flags = wxPG_REPORT_ERROR|wxPG_FULL_VALUE|wxPG_PROGRAMMATIC_VALUE;
 
         wxVariant variant = p->GetValueRef();
         bool res;
@@ -1508,8 +1511,8 @@ void wxPropertyGridPageState::DoSetPropertyValues( const wxVariantList& list, wx
 // wxPropertyGridPageState property adding and removal
 // -----------------------------------------------------------------------
 
-int wxPropertyGridPageState::PrepareToAddItem( wxPGProperty* property,
-                                           wxPGProperty* scheduledParent )
+bool wxPropertyGridPageState::PrepareToAddItem( wxPGProperty* property,
+                                                wxPGProperty* scheduledParent )
 {
     wxPropertyGrid* propGrid = m_pPropGrid;
 
@@ -1545,7 +1548,7 @@ int wxPropertyGridPageState::PrepareToAddItem( wxPGProperty* property,
             {
                 delete property;
                 m_currentCategory = pwc;
-                return 2; // Tells the caller what we did.
+                return false;
             }
         }
     }
@@ -1562,123 +1565,29 @@ int wxPropertyGridPageState::PrepareToAddItem( wxPGProperty* property,
 #endif
 
     // Make sure nothing is selected.
-    if ( propGrid && propGrid->m_selected )
-    {
-        bool selRes = propGrid->ClearSelection();
-        wxPG_CHECK_MSG_DBG( selRes,
-                            -1,
-                            wxT("failed to deselect a property (editor probably had invalid value)") );
-    }
-
-    if ( scheduledParent )
-    {
-        // Use parent's colours.
-        property->m_bgColIndex = scheduledParent->m_bgColIndex;
-        property->m_fgColIndex = scheduledParent->m_fgColIndex;
-
-        // Fix no parent does not yet have parenting flag yet, set one now
-        if ( !scheduledParent->HasFlag(wxPG_PROP_PARENTAL_FLAGS) )
-            scheduledParent->SetParentalType(wxPG_PROP_MISC_PARENT);
-            //scheduledParent->SetFlag(wxPG_PROP_MISC_PARENT);
-    }
-
-    // If in hideable adding mode, or if assigned parent is hideable, then
-    // make this one hideable.
-    if (
-         ( scheduledParent && (scheduledParent->m_flags & wxPG_PROP_HIDDEN) ) ||
-         ( propGrid && (propGrid->m_iFlags & wxPG_FL_ADDING_HIDEABLES) )
-       )
-        property->SetFlag( wxPG_PROP_HIDDEN );
-
-    // Set custom image flag.
-    int custImgHeight = property->OnMeasureImage().y;
-    if ( custImgHeight < 0 /*|| custImgHeight > 1*/ )
-    {
-        property->m_flags |= wxPG_PROP_CUSTOMIMAGE;
-    }
-
-    if ( propGrid && (propGrid->GetWindowStyleFlag() & wxPG_LIMITED_EDITING) )
-        property->m_flags |= wxPG_PROP_NOEDITOR;
+    if ( propGrid )
+        propGrid->ClearSelection(false);
 
-    if ( !property->IsCategory() )
-    {
-        // This is not a category.
-
-        //wxASSERT_MSG( property->GetEditorClass(), wxT("Editor class not initialized!") );
-
-        // Depth.
-        //
-        unsigned char depth = 1;
-        if ( scheduledParent )
-        {
-            depth = scheduledParent->m_depth;
-            if ( !scheduledParent->IsCategory() )
-                depth++;
-        }
-        property->m_depth = depth;
-        unsigned char greyDepth = depth;
+    // NULL parent == root parent
+    if ( !scheduledParent )
+        scheduledParent = DoGetRoot();
 
-        if ( scheduledParent )
-        {
-            wxPropertyCategory* pc;
+    property->m_parent = scheduledParent;
 
-            if ( scheduledParent->IsCategory() || scheduledParent->IsRoot() )
-                pc = (wxPropertyCategory*)scheduledParent;
-            else
-                // This conditional compile is necessary to
-                // bypass some compiler bug.
-                pc = GetPropertyCategory(scheduledParent);
+    property->InitAfterAdded(this, propGrid);
 
-            if ( pc )
-                greyDepth = pc->GetDepth();
-            else
-                greyDepth = scheduledParent->m_depthBgCol;
-        }
-
-        property->m_depthBgCol = greyDepth;
-
-        // Prepare children pre-added children
-        if ( property->GetChildCount() )
-        {
-            property->SetParentalType(wxPG_PROP_AGGREGATE);
-
-            property->SetExpanded(false); // Properties with children are not expanded by default.
-            if ( propGrid && propGrid->GetWindowStyleFlag() & wxPG_HIDE_MARGIN )
-                property->SetExpanded(true); // ...unless it cannot be expanded.
-
-            property->PrepareSubProperties();
-
-            return -1;
-        }
-
-        if ( propGrid && (propGrid->GetExtraStyle() & wxPG_EX_AUTO_UNSPECIFIED_VALUES) )
-            property->SetFlagRecursively(wxPG_PROP_AUTO_UNSPECIFIED, true);
-
-        return 0;
-    }
-    else
+    if ( property->IsCategory() )
     {
-        // This is a category.
-
-        // depth
-        unsigned char depth = 1;
-        if ( scheduledParent )
-        {
-            depth = scheduledParent->m_depth + 1;
-        }
-        property->m_depth = depth;
-        property->m_depthBgCol = depth;
+        wxPropertyCategory* pc = wxStaticCast(property, wxPropertyCategory);
 
-        m_currentCategory = (wxPropertyCategory*)property;
+        m_currentCategory = pc;
 
-        wxPropertyCategory* pc = (wxPropertyCategory*)property;
-
-        // Calculate text extent for caption item.
+        // Calculate text extent for category caption
         if ( propGrid )
             pc->CalculateTextExtent(propGrid, propGrid->GetCaptionFont());
-
-        return 1;
     }
+
+    return true;
 }
 
 // -----------------------------------------------------------------------
@@ -1703,11 +1612,11 @@ wxPGProperty* wxPropertyGridPageState::DoInsert( wxPGProperty* parent, int index
                  wxNullProperty,
                  wxT("when adding properties to fixed parents, use BeginAddChildren and EndAddChildren.") );
 
-    int parenting = PrepareToAddItem( property, (wxPropertyCategory*)parent );
+    bool res = PrepareToAddItem( property, (wxPropertyCategory*)parent );
 
-    // This type of invalid parenting value indicates we should exit now, returning
-    // id of most recent category.
-    if ( parenting > 1 )
+    // PrepareToAddItem() may just decide to use use current category
+    // instead of adding new one.
+    if ( !res )
         return m_currentCategory;
 
     // Note that item must be added into current mode later.
@@ -1736,7 +1645,7 @@ wxPGProperty* wxPropertyGridPageState::DoInsert( wxPGProperty* parent, int index
             // Categorized mode
 
             // Only add non-categories to m_abcArray.
-            if ( m_abcArray && parenting <= 0 )
+            if ( m_abcArray && !property->IsCategory() )
                 m_abcArray->AddChild2( property, -1, false );
 
             // Add to current mode.
@@ -1755,7 +1664,7 @@ wxPGProperty* wxPropertyGridPageState::DoInsert( wxPGProperty* parent, int index
                 m_regularArray.AddChild2( property, -1, false );
 
             // Add to current mode (no categories).
-            if ( parenting <= 0 )
+            if ( !property->IsCategory() )
                 m_abcArray->AddChild2( property, index );
         }
     }
@@ -1826,7 +1735,7 @@ void wxPropertyGridPageState::DoDelete( wxPGProperty* item )
             }
 
             if ( IsInNonCatMode() )
-                m_abcArray->FixIndexesOfChildren();
+                m_abcArray->FixIndicesOfChildren();
         }
     }
 
@@ -1844,7 +1753,7 @@ void wxPropertyGridPageState::DoDelete( wxPGProperty* item )
         // categorized mode - categorized array
         wxArrayPGProperty& parentsChildren = item->m_parent->m_children;
         parentsChildren.erase( parentsChildren.begin() + indinparent );
-        item->m_parent->FixIndexesOfChildren();
+        item->m_parent->FixIndicesOfChildren();
     }
     else
     {
@@ -1877,7 +1786,7 @@ void wxPropertyGridPageState::DoDelete( wxPGProperty* item )
             wxASSERT( item->m_parent == m_abcArray );
             wxArrayPGProperty& parentsChildren = item->m_parent->m_children;
             parentsChildren.erase(parentsChildren.begin() + indinparent);
-            item->m_parent->FixIndexesOfChildren(indinparent);
+            item->m_parent->FixIndicesOfChildren(indinparent);
         }
     }