]> git.saurik.com Git - wxWidgets.git/blobdiff - src/propgrid/property.cpp
disable a correct test which VC6 just doesn't want to grok (hopefully last buildbot...
[wxWidgets.git] / src / propgrid / property.cpp
index d2ad9a372d8f024ca643c61a89170284135e85b0..65811cca7a5e4ee938141a952e39c86c0863cf26 100644 (file)
@@ -664,10 +664,10 @@ wxString wxPGProperty::GetColumnText( unsigned int col ) const
     return wxEmptyString;
 }
 
     return wxEmptyString;
 }
 
-void wxPGProperty::GenerateComposedValue( wxString& text,
-                                          int argFlags,
-                                          const wxVariantList* valueOverrides,
-                                          wxPGHashMapS2S* childResults ) const
+void wxPGProperty::DoGenerateComposedValue( wxString& text,
+                                            int argFlags,
+                                            const wxVariantList* valueOverrides,
+                                            wxPGHashMapS2S* childResults ) const
 {
     int i;
     int iMax = m_children.size();
 {
     int i;
     int iMax = m_children.size();
@@ -733,8 +733,8 @@ void wxPGProperty::GenerateComposedValue( wxString& text,
                  childValue.GetType() == wxPG_VARIANT_TYPE_LIST )
             {
                 wxVariantList& childList = childValue.GetList();
                  childValue.GetType() == wxPG_VARIANT_TYPE_LIST )
             {
                 wxVariantList& childList = childValue.GetList();
-                GenerateComposedValue(s, argFlags|wxPG_COMPOSITE_FRAGMENT,
-                                      &childList, childResults);
+                DoGenerateComposedValue(s, argFlags|wxPG_COMPOSITE_FRAGMENT,
+                                        &childList, childResults);
             }
             else
             {
             }
             else
             {
@@ -797,7 +797,7 @@ wxString wxPGProperty::ValueToString( wxVariant& WXUNUSED(value),
                   "implementation only works if value is m_value." );
 
     wxString text;
                   "implementation only works if value is m_value." );
 
     wxString text;
-    GenerateComposedValue(text, argFlags);
+    DoGenerateComposedValue(text, argFlags);
     return text;
 }
 
     return text;
 }
 
@@ -881,7 +881,7 @@ bool wxPGProperty::StringToValue( wxVariant& variant, const wxString& text, int
     wxVariantList temp_list;
     wxVariant list(temp_list);
 
     wxVariantList temp_list;
     wxVariant list(temp_list);
 
-    int propagatedFlags = argFlags & wxPG_REPORT_ERROR;
+    int propagatedFlags = argFlags & (wxPG_REPORT_ERROR|wxPG_PROGRAMMATIC_VALUE);
 
 #ifdef __WXDEBUG__
     bool debug_print = false;
 
 #ifdef __WXDEBUG__
     bool debug_print = false;
@@ -914,41 +914,45 @@ bool wxPGProperty::StringToValue( wxVariant& variant, const wxString& text, int
                 if ( !addOnlyIfNotEmpty || len > 0 )
                 {
                     const wxPGProperty* child = Item(curChild);
                 if ( !addOnlyIfNotEmpty || len > 0 )
                 {
                     const wxPGProperty* child = Item(curChild);
+                    wxVariant variant(child->GetValue());
+                    variant.SetName(child->GetBaseName());
+
                 #ifdef __WXDEBUG__
                     if ( debug_print )
                         wxLogDebug(wxT("token = '%s', child = %s"),token.c_str(),child->GetLabel().c_str());
                 #endif
 
                 #ifdef __WXDEBUG__
                     if ( debug_print )
                         wxLogDebug(wxT("token = '%s', child = %s"),token.c_str(),child->GetLabel().c_str());
                 #endif
 
-                    if ( len > 0 )
+                    // Add only if editable or setting programmatically
+                    if ( (argFlags & wxPG_PROGRAMMATIC_VALUE) ||
+                         !child->HasFlag(wxPG_PROP_DISABLED|wxPG_PROP_READONLY) )
                     {
                     {
-                        bool wasUnspecified = child->IsValueUnspecified();
-
-                        wxVariant variant(child->GetValueRef());
-                        if ( child->StringToValue(variant, token, propagatedFlags|wxPG_COMPOSITE_FRAGMENT) )
+                        if ( len > 0 )
                         {
                         {
-                            variant.SetName(child->GetBaseName());
+                            bool wasUnspecified = child->IsValueUnspecified();
 
 
-                            // Clear unspecified flag only if OnSetValue() didn't
-                            // affect it.
-                            if ( child->IsValueUnspecified() &&
-                                 (wasUnspecified || !UsesAutoUnspecified()) )
+                            if ( child->StringToValue(variant, token, propagatedFlags|wxPG_COMPOSITE_FRAGMENT) )
                             {
                             {
-                                variant = child->GetDefaultValue();
-                            }
+                                // Clear unspecified flag only if OnSetValue() didn't
+                                // affect it.
+                                if ( child->IsValueUnspecified() &&
+                                     (wasUnspecified || !UsesAutoUnspecified()) )
+                                {
+                                    variant = child->GetDefaultValue();
+                                }
 
 
-                            list.Append(variant);
+                                list.Append(variant);
 
 
+                                changed = true;
+                            }
+                        }
+                        else
+                        {
+                            // Empty, becomes unspecified
+                            variant.MakeNull();
+                            list.Append(variant);
                             changed = true;
                         }
                     }
                             changed = true;
                         }
                     }
-                    else
-                    {
-                        // Empty, becomes unspecified
-                        wxVariant variant2;
-                        variant2.SetName(child->GetBaseName());
-                        list.Append(variant2);
-                        changed = true;
-                    }
 
                     curChild++;
                     if ( curChild >= iMax )
 
                     curChild++;
                     if ( curChild >= iMax )
@@ -997,17 +1001,22 @@ bool wxPGProperty::StringToValue( wxVariant& variant, const wxString& text, int
 
                     wxVariant oldChildValue = child->GetValue();
                     wxVariant variant(oldChildValue);
 
                     wxVariant oldChildValue = child->GetValue();
                     wxVariant variant(oldChildValue);
-                    bool stvRes = child->StringToValue( variant, token, propagatedFlags );
-                    if ( stvRes || (variant != oldChildValue) )
+
+                    if ( (argFlags & wxPG_PROGRAMMATIC_VALUE) ||
+                         !child->HasFlag(wxPG_PROP_DISABLED|wxPG_PROP_READONLY) )
                     {
                     {
-                        if ( stvRes )
+                        bool stvRes = child->StringToValue( variant, token, propagatedFlags );
+                        if ( stvRes || (variant != oldChildValue) )
+                        {
+                            if ( stvRes )
+                                changed = true;
+                        }
+                        else
+                        {
+                            // Failed, becomes unspecified
+                            variant.MakeNull();
                             changed = true;
                             changed = true;
-                    }
-                    else
-                    {
-                        // Failed, becomes unspecified
-                        variant.MakeNull();
-                        changed = true;
+                        }
                     }
 
                     variant.SetName(child->GetBaseName());
                     }
 
                     variant.SetName(child->GetBaseName());
@@ -2115,7 +2124,7 @@ wxPGProperty* wxPGProperty::UpdateParentValues()
          !parent->IsCategory() && !parent->IsRoot() )
     {
         wxString s;
          !parent->IsCategory() && !parent->IsRoot() )
     {
         wxString s;
-        parent->GenerateComposedValue(s);
+        parent->DoGenerateComposedValue(s);
         parent->m_value = s;
         return parent->UpdateParentValues();
     }
         parent->m_value = s;
         return parent->UpdateParentValues();
     }