X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d7e2b52235d70e25d7797ce1dccd97fa6989f4b5..55410bb4f67febe1ca20654f078ea4fb9a6223ae:/src/propgrid/propgridiface.cpp diff --git a/src/propgrid/propgridiface.cpp b/src/propgrid/propgridiface.cpp index 9d679284e8..8f0bab8b5a 100644 --- a/src/propgrid/propgridiface.cpp +++ b/src/propgrid/propgridiface.cpp @@ -314,16 +314,41 @@ void wxPropertyGridInterface::DeleteProperty( wxPGPropArg id ) wxPropertyGridPageState* state = p->GetParentState(); wxPropertyGrid* grid = state->GetGrid(); + if ( grid->GetState() == state ) + grid->DoSelectProperty(NULL, wxPG_SEL_DELETING|wxPG_SEL_NOVALIDATE); + + 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 ) { - bool selRes = grid->DoSelectProperty(NULL, wxPG_SEL_DELETING); - wxPG_CHECK_RET_DBG( selRes, - wxT("failed to deselect a property (editor probably had invalid value)") ); + grid->DoSelectProperty(NULL, + wxPG_SEL_DELETING|wxPG_SEL_NOVALIDATE); } - state->DoDelete( p ); + state->DoDelete( p, false ); + + // Mark the property as 'unattached' + p->m_parentState = NULL; + p->m_parent = NULL; RefreshGrid(state); + + return p; } // ----------------------------------------------------------------------- @@ -358,14 +383,23 @@ wxPGProperty* wxPropertyGridInterface::ReplaceProperty( wxPGPropArg id, wxPGProp // wxPropertyGridInterface property operations // ----------------------------------------------------------------------- -bool wxPropertyGridInterface::ClearSelection() +bool wxPropertyGridInterface::ClearSelection( bool validation ) { + int flags = 0; + if ( !validation ) + flags |= wxPG_SEL_NOVALIDATE; + wxPropertyGridPageState* state = m_pState; - wxPropertyGrid* pg = state->GetGrid(); - if ( pg->GetState() == state ) - return pg->DoClearSelection(); - 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; } @@ -428,8 +462,7 @@ bool wxPropertyGridInterface::ExpandAll( bool doExpand ) if ( GetSelection() && GetSelection() != state->DoGetRoot() && !doExpand ) { - if ( !pg->ClearSelection() ) - return false; + pg->ClearSelection(false); } wxPGVIterator it; @@ -465,18 +498,6 @@ bool wxPropertyGridInterface::ExpandAll( bool doExpand ) // ----------------------------------------------------------------------- -void wxPropertyGridInterface::SetPropertyValueUnspecified( wxPGPropArg id ) -{ - wxPG_PROP_ARG_CALL_PROLOG() - wxPropertyGrid* propGrid = p->GetGridIfDisplayed(); - if ( propGrid ) - propGrid->DoSetPropertyValueUnspecified(p); - else - p->GetParentState()->DoSetPropertyValueUnspecified(p); -} - -// ----------------------------------------------------------------------- - void wxPropertyGridInterface::ClearModifiedStatus() { unsigned int pageIndex = 0; @@ -490,6 +511,9 @@ void wxPropertyGridInterface::ClearModifiedStatus() pageIndex++; } + + // Update active editor control, if any + GetPropertyGrid()->RefreshEditor(); } // ----------------------------------------------------------------------- @@ -726,6 +750,25 @@ bool wxPropertyGridInterface::Expand( wxPGPropArg id ) // ----------------------------------------------------------------------- +void wxPropertyGridInterface::Sort( int flags ) +{ + wxPropertyGrid* pg = GetPropertyGrid(); + + pg->ClearSelection(false); + + unsigned int pageIndex = 0; + + for (;;) + { + wxPropertyGridPageState* page = GetPageState(pageIndex); + if ( !page ) break; + page->DoSort(flags); + pageIndex++; + } +} + +// ----------------------------------------------------------------------- + void wxPropertyGridInterface::SetPropertyLabel( wxPGPropArg id, const wxString& newproplabel ) { wxPG_PROP_ARG_CALL_PROLOG() @@ -774,6 +817,38 @@ bool wxPropertyGridInterface::SetPropertyMaxLength( wxPGPropArg id, int maxLen ) // ----------------------------------------------------------------------- +void +wxPropertyGridInterface::SetPropertyBackgroundColour( wxPGPropArg id, + const wxColour& colour, + bool recursively ) +{ + wxPG_PROP_ARG_CALL_PROLOG() + p->SetBackgroundColour( colour, recursively ); + RefreshProperty( p ); +} + +// ----------------------------------------------------------------------- + +void wxPropertyGridInterface::SetPropertyTextColour( wxPGPropArg id, + const wxColour& colour, + bool recursively ) +{ + wxPG_PROP_ARG_CALL_PROLOG() + p->SetTextColour( colour, recursively ); + RefreshProperty( p ); +} + +// ----------------------------------------------------------------------- + +void wxPropertyGridInterface::SetPropertyColoursToDefault( wxPGPropArg id ) +{ + wxPG_PROP_ARG_CALL_PROLOG() + + p->m_cells.clear(); +} + +// ----------------------------------------------------------------------- + void wxPropertyGridInterface::SetPropertyCell( wxPGPropArg id, int column, const wxString& text, @@ -972,7 +1047,7 @@ wxString wxPropertyGridInterface::SaveEditableState( int includedStates ) const if ( !p->HasFlag(wxPG_PROP_COLLAPSED) ) result += EscapeDelimiters(p->GetName()); - result += wxS(","); + result += wxS(","); }