for ( ;; )
{
+ // How many units we iterate string forward at the end of loop?
+ // We need to keep track of this or risk going to negative
+ // with it-- operation.
+ unsigned int strPosIncrement = 1;
+
if ( tokenStart != 0xFFFFFF )
{
// Token is running
{
const wxPGProperty* child = Item(curChild);
wxVariant variant(child->GetValue());
- variant.SetName(child->GetBaseName());
+ wxString childName = child->GetBaseName();
#ifdef __WXDEBUG__
if ( debug_print )
- wxLogDebug(wxT("token = '%s', child = %s"),token.c_str(),child->GetLabel().c_str());
+ wxLogDebug(wxT("token = '%s', child = %s"),
+ token.c_str(), childName.c_str());
#endif
// Add only if editable or setting programmatically
{
if ( len > 0 )
{
- if ( child->StringToValue(variant, token, propagatedFlags|wxPG_COMPOSITE_FRAGMENT) )
+ if ( child->StringToValue(variant, token,
+ propagatedFlags|wxPG_COMPOSITE_FRAGMENT) )
{
+ // We really need to set the variant's name
+ // *after* child->StringToValue() has been
+ // called, since variant's value may be set by
+ // assigning another variant into it, which
+ // then usually causes name to be copied (ie.
+ // usually cleared) as well. wxBoolProperty
+ // being case in point with its use of
+ // wxPGVariant_Bool macro as an optimization.
+ variant.SetName(childName);
list.Append(variant);
changed = true;
{
// Empty, becomes unspecified
variant.MakeNull();
+ variant.SetName(childName);
list.Append(variant);
changed = true;
}
if ( (argFlags & wxPG_PROGRAMMATIC_VALUE) ||
!child->HasFlag(wxPG_PROP_DISABLED|wxPG_PROP_READONLY) )
{
- bool stvRes = child->StringToValue( variant, token, propagatedFlags );
+ wxString childName = child->GetBaseName();
+
+ bool stvRes = child->StringToValue( variant, token,
+ propagatedFlags );
if ( stvRes || (variant != oldChildValue) )
{
- if ( stvRes )
- changed = true;
+ variant.SetName(childName);
+ list.Append(variant);
+
+ changed = true;
}
else
{
- // Failed, becomes unspecified
- variant.MakeNull();
- changed = true;
+ // No changes...
}
}
- variant.SetName(child->GetBaseName());
- list.Append(variant);
-
curChild++;
if ( curChild >= iMax )
break;
tokenStart = pos;
if ( a == delimeter )
- {
- pos--;
- --it;
- }
+ strPosIncrement -= 1;
}
}
}
if ( a == 0 )
break;
- ++it;
+ it += strPosIncrement;
+
if ( it != text.end() )
{
a = *it;
{
a = 0;
}
- pos++;
+
+ pos += strPosIncrement;
}
if ( changed )