dc.SetTextForeground(cell.GetFgCol());
}
- // Draw Background
- dc.DrawRectangle(rect);
+ // Draw Background, but only if not rendering in control
+ // (as control already has rendered correct background).
+ if ( !(flags & (Control|ChoicePopup)) )
+ dc.DrawRectangle(rect);
const wxBitmap& bmp = cell.GetBitmap();
if ( bmp.Ok() &&
paintdata.m_drawnWidth = imageSize.x;
paintdata.m_drawnHeight = imageSize.y;
- if ( !isUnspecified )
- {
- property->OnCustomPaint( dc, imageRect, paintdata );
- }
- else
- {
- dc.SetBrush(*wxWHITE_BRUSH);
- dc.DrawRectangle(imageRect);
- }
+ property->OnCustomPaint( dc, imageRect, paintdata );
imageOffset = paintdata.m_drawnWidth;
}
return wxNOT_FOUND;
}
-void wxPGProperty::UpdateControl( wxWindow* primary )
-{
- if ( primary )
- GetEditorClass()->UpdateControl(this, primary);
-}
-
bool wxPGProperty::ValidateValue( wxVariant& WXUNUSED(value), wxPGValidationInfo& WXUNUSED(validationInfo) ) const
{
return true;
{
}
+void wxPGProperty::OnValidationFailure( wxVariant& WXUNUSED(pendingValue) )
+{
+}
+
void wxPGProperty::GetDisplayInfo( unsigned int column,
int choiceIndex,
int flags,
childValue = overrideValue;
else
childValue = curChild->GetValue();
- node++;
+ ++node;
if ( node != valueOverrides->end() )
overrideValue = *node;
else
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;
}
{
int depth = 1;
- if ( it != text.end() ) it++;
+ if ( it != text.end() ) ++it;
pos++;
size_t startPos = pos;
while ( it != text.end() && depth > 0 )
{
a = *it;
- it++;
+ ++it;
pos++;
if ( a == wxS(']') )
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 )
// Children in list can be in any order, but we will give hint to
// GetPropertyByNameWH(). This optimizes for full list parsing.
- for ( node = list.begin(); node != list.end(); node++ )
+ for ( node = list.begin(); node != list.end(); ++node )
{
wxVariant& childValue = *((wxVariant*)*node);
wxPGProperty* child = GetPropertyByNameWH(childValue.GetName(), i);
{
m_value = value;
OnSetValue();
-
- if ( !(flags & wxPG_SETVAL_FROM_PARENT) )
- UpdateParentValues();
}
if ( flags & wxPG_SETVAL_BY_USER )
}
}
+ if ( !(flags & wxPG_SETVAL_FROM_PARENT) )
+ UpdateParentValues();
+
//
// Update editor control
//
void wxPGProperty::RefreshEditor()
{
- if ( m_parent && GetParentState() )
- {
- wxPropertyGrid* pg = GetParentState()->GetGrid();
- if ( pg->GetSelectedProperty() == this )
- {
- wxWindow* editor = pg->GetEditorControl();
- if ( editor )
- GetEditorClass()->UpdateControl( this, editor );
- }
- }
-}
+ if ( !m_parent )
+ return;
+ wxPropertyGrid* pg = GetGrid();
+ if ( pg && pg->GetSelectedProperty() == this )
+ pg->RefreshEditor();
+}
wxVariant wxPGProperty::GetDefaultValue() const
{
m_children.clear();
}
+void wxPGProperty::DeleteChildren()
+{
+ wxPropertyGridPageState* state = m_parentState;
+
+ while ( GetChildCount() )
+ {
+ wxPGProperty* child = Item(GetChildCount()-1);
+ state->DoDelete(child, true);
+ }
+}
+
void wxPGProperty::ChildChanged( wxVariant& WXUNUSED(thisValue),
int WXUNUSED(childIndex),
wxVariant& WXUNUSED(childValue) ) const
{
const wxString& childName = child->GetBaseName();
- for ( ; node != pList->end(); node++ )
+ for ( ; node != pList->end(); ++node )
{
const wxVariant& item = *((const wxVariant*)*node);
if ( item.GetName() == childName )
{
wxPGHashMapS2P::iterator it;
- for ( it = m_map.begin(); it != m_map.end(); it++ )
+ for ( it = m_map.begin(); it != m_map.end(); ++it )
{
wxVariantData* data = (wxVariantData*) it->second;
data->DecRef();