X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b7bc9d806b57f20e1d3135025ba0e6f603e7450e..69fb2f97492421b85b661add445012e98c1eaea9:/src/propgrid/propgridiface.cpp diff --git a/src/propgrid/propgridiface.cpp b/src/propgrid/propgridiface.cpp index 8bb38aaa94..f762133260 100644 --- a/src/propgrid/propgridiface.cpp +++ b/src/propgrid/propgridiface.cpp @@ -317,13 +317,42 @@ void wxPropertyGridInterface::DeleteProperty( wxPGPropArg id ) if ( grid->GetState() == state ) grid->DoSelectProperty(NULL, wxPG_SEL_DELETING|wxPG_SEL_NOVALIDATE); - state->DoDelete( p ); + state->DoDelete( p, true ); RefreshGrid(state); } // ----------------------------------------------------------------------- +wxPGProperty* wxPropertyGridInterface::RemoveProperty( wxPGPropArg id ) +{ + wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxNullProperty) + + wxCHECK( !p->GetChildCount() || p->HasFlag(wxPG_PROP_AGGREGATE), + wxNullProperty); + + wxPropertyGridPageState* state = p->GetParentState(); + wxPropertyGrid* grid = state->GetGrid(); + + if ( grid->GetState() == state ) + { + grid->DoSelectProperty(NULL, + wxPG_SEL_DELETING|wxPG_SEL_NOVALIDATE); + } + + state->DoDelete( p, false ); + + // Mark the property as 'unattached' + p->m_parentState = NULL; + p->m_parent = NULL; + + RefreshGrid(state); + + return p; +} + +// ----------------------------------------------------------------------- + wxPGProperty* wxPropertyGridInterface::ReplaceProperty( wxPGPropArg id, wxPGProperty* property ) { wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxNullProperty) @@ -361,11 +390,16 @@ bool wxPropertyGridInterface::ClearSelection( bool validation ) flags |= wxPG_SEL_NOVALIDATE; wxPropertyGridPageState* state = m_pState; - wxPropertyGrid* pg = state->GetGrid(); - if ( pg->GetState() == state ) - return pg->DoSelectProperty(NULL, flags); - else - state->SetSelection(NULL); + + if ( state ) + { + wxPropertyGrid* pg = state->GetGrid(); + if ( pg->GetState() == state ) + return pg->DoSelectProperty(NULL, flags); + else + state->SetSelection(NULL); + } + return true; }