// Add only if editable or setting programmatically
if ( (argFlags & wxPG_PROGRAMMATIC_VALUE) ||
- !child->HasFlag(wxPG_PROP_DISABLED|wxPG_PROP_READONLY) )
+ (!child->HasFlag(wxPG_PROP_DISABLED) &&
+ !child->HasFlag(wxPG_PROP_READONLY)) )
{
if ( len > 0 )
{
wxVariant variant(oldChildValue);
if ( (argFlags & wxPG_PROGRAMMATIC_VALUE) ||
- !child->HasFlag(wxPG_PROP_DISABLED|wxPG_PROP_READONLY) )
+ (!child->HasFlag(wxPG_PROP_DISABLED) &&
+ !child->HasFlag(wxPG_PROP_READONLY)) )
{
wxString childName = child->GetBaseName();
GetGrid()->ValueChangeInEvent(value);
}
-void wxPGProperty::SetFlagRecursively( FlagType flag, bool set )
+void wxPGProperty::SetFlagRecursively( wxPGPropertyFlags flag, bool set )
{
ChangeFlag(flag, set);
bool wxPGProperty::SetChoices( wxPGChoices& choices )
{
+ // Property must be de-selected first (otherwise choices in
+ // the control would be de-synced with true choices)
+ wxPropertyGrid* pg = GetGrid();
+ if ( pg && pg->GetSelection() == this )
+ pg->ClearSelection();
+
m_choices.Assign(choices);
{
return editor;
}
+bool wxPGProperty::Hide( bool hide, int flags )
+{
+ wxPropertyGrid* pg = GetGrid();
+ if ( pg )
+ return pg->HideProperty(this, hide, flags);
+
+ return DoHide( hide, flags );
+}
+
+bool wxPGProperty::DoHide( bool hide, int flags )
+{
+ if ( !hide )
+ ClearFlag( wxPG_PROP_HIDDEN );
+ else
+ SetFlag( wxPG_PROP_HIDDEN );
+
+ if ( flags & wxPG_RECURSE )
+ {
+ unsigned int i;
+ for ( i = 0; i < GetChildCount(); i++ )
+ Item(i)->DoHide(hide, flags | wxPG_RECURSE_STARTS);
+ }
+
+ return true;
+}
+
bool wxPGProperty::HasVisibleChildren() const
{
unsigned int i;
{
wxPropertyGridPageState* state = m_parentState;
- while ( GetChildCount() )
+ if ( !GetChildCount() )
+ return;
+
+ // Because deletion is sometimes deferred, we have to use
+ // this sort of code for enumerating the child properties.
+ unsigned int i = GetChildCount();
+ while ( i > 0 )
{
- wxPGProperty* child = Item(GetChildCount()-1);
- state->DoDelete(child, true);
+ i--;
+ state->DoDelete(Item(i), true);
}
}