From: Jaakko Salli Date: Thu, 6 Nov 2008 18:05:09 +0000 (+0000) Subject: Removed property editor validation failure assertions when implicitly clearing select... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/1621f192d95b44c5909a788b8f1fe9e9c381df72 Removed property editor validation failure assertions when implicitly clearing selection. Added relevant notes into documentation of member functions that previously asserted. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56690 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/propgrid/propgriddefs.h b/include/wx/propgrid/propgriddefs.h index 2f9be1eea7..d72a787095 100644 --- a/include/wx/propgrid/propgriddefs.h +++ b/include/wx/propgrid/propgriddefs.h @@ -252,14 +252,6 @@ // ----------------------------------------------------------------------- -// wxPG_CHECK_FOO_DBG - debug check with message that does not -// interrupt program flow. -#define wxPG_CHECK_RET_DBG(A,B) \ - if ( !(A) ) { wxLogWarning(B); return; } -#define wxPG_CHECK_MSG_DBG(A,B,C) \ - if ( !(A) ) { wxLogWarning(C); return B; } - - class wxPGEditor; class wxPGProperty; class wxPropertyCategory; diff --git a/include/wx/propgrid/propgridiface.h b/include/wx/propgrid/propgridiface.h index 069a704989..e12f9248f3 100644 --- a/include/wx/propgrid/propgridiface.h +++ b/include/wx/propgrid/propgridiface.h @@ -200,9 +200,18 @@ public: */ virtual void Clear() = 0; - /** Deselect current selection, if any. Returns true if success - (ie. validator did not intercept). */ - bool ClearSelection(); + /** + Clears current selection, if any. + + @param validation + If set to @false, deselecting the property will always work, + even if its editor had invalid value in it. + + @return Returns @true if successful or if there was no selection. May + fail if validation was enabled and active editor had invalid + value. + */ + bool ClearSelection( bool validation = false); /** Resets modified status of all properties. */ diff --git a/interface/wx/propgrid/propgrid.h b/interface/wx/propgrid/propgrid.h index 8949055a0a..de580e6384 100644 --- a/interface/wx/propgrid/propgrid.h +++ b/interface/wx/propgrid/propgrid.h @@ -451,6 +451,10 @@ public: /** Enables or disables (shows/hides) categories according to parameter enable. + + @remarks This functions deselects selected property, if any. Validation + failure option wxPG_VFB_STAY_IN_PROPERTY is not respected, ie. + selection is cleared even if editor had invalid value. */ bool EnableCategories( bool enable ); @@ -811,11 +815,19 @@ public: /** Sorts all items at all levels (except private children). + + @remarks This functions deselects selected property, if any. Validation + failure option wxPG_VFB_STAY_IN_PROPERTY is not respected, ie. + selection is cleared even if editor had invalid value. */ void Sort(); /** Sorts children of a property. + + @remarks This functions deselects selected property, if any. Validation + failure option wxPG_VFB_STAY_IN_PROPERTY is not respected, ie. + selection is cleared even if editor had invalid value. */ void SortChildren( wxPGPropArg id ); }; diff --git a/interface/wx/propgrid/propgridiface.h b/interface/wx/propgrid/propgridiface.h index 7f35703133..5d350892f5 100644 --- a/interface/wx/propgrid/propgridiface.h +++ b/interface/wx/propgrid/propgridiface.h @@ -46,6 +46,9 @@ public: - Does not automatically redraw the control, so you may need to call Refresh() when calling this function after control has been shown for the first time. + - This functions deselects selected property, if any. Validation + failure option wxPG_VFB_STAY_IN_PROPERTY is not respected, ie. + selection is cleared even if editor had invalid value. */ wxPGProperty* Append( wxPGProperty* property ); @@ -71,15 +74,25 @@ public: /** Deletes all properties. + + @remarks This functions deselects selected property, if any. Validation + failure option wxPG_VFB_STAY_IN_PROPERTY is not respected, ie. + selection is cleared even if editor had invalid value. */ virtual void Clear() = 0; /** - Deselect current selection, if any. + Clears current selection, if any. + + @param validation + If set to @false, deselecting the property will always work, + even if its editor had invalid value in it. - @return Returns @true if success (ie. validator did not intercept). + @return Returns @true if successful or if there was no selection. May + fail if validation was enabled and active editor had invalid + value. */ - bool ClearSelection(); + bool ClearSelection( bool validation = false); /** Resets modified status of all properties. @@ -90,14 +103,19 @@ public: Collapses given category or property with children. @return Returns @true if actually collapsed. + + @remarks This function may deselect selected property, if any. Validation + failure option wxPG_VFB_STAY_IN_PROPERTY is not respected, ie. + selection is cleared even if editor had invalid value. */ bool Collapse( wxPGPropArg id ); /** Collapses all items that can be collapsed. - @return Returns @false if failed (may fail if value in active - editor cannot be validated). + @remarks This functions clears selection. Validation failure option + wxPG_VFB_STAY_IN_PROPERTY is not respected, ie. selection + is cleared even if editor had invalid value. */ bool CollapseAll(); @@ -112,6 +130,10 @@ public: /** Deletes a property. + + @remarks This functions deselects selected property, if any. Validation + failure option wxPG_VFB_STAY_IN_PROPERTY is not respected, ie. + selection is cleared even if editor had invalid value. */ void DeleteProperty( wxPGPropArg id ); @@ -148,11 +170,19 @@ public: Expands given category or property with children. @return Returns @true if actually expanded. + + @remarks This function may deselect selected property, if any. Validation + failure option wxPG_VFB_STAY_IN_PROPERTY is not respected, ie. + selection is cleared even if editor had invalid value. */ bool Expand( wxPGPropArg id ); /** Expands all items that can be expanded. + + @remarks This functions clears selection. Validation failure option + wxPG_VFB_STAY_IN_PROPERTY is not respected, ie. selection + is cleared even if editor had invalid value. */ bool ExpandAll( bool expand = true ); @@ -431,6 +461,10 @@ public: non-categoric) are active, Insert becomes even more slow. This is especially true if current mode is non-categoric. + - This functions deselects selected property, if any. Validation + failure option wxPG_VFB_STAY_IN_PROPERTY is not respected, ie. + selection is cleared even if editor had invalid value. + Example of use: @code diff --git a/src/propgrid/propgrid.cpp b/src/propgrid/propgrid.cpp index 190021d63e..40e2383b6b 100644 --- a/src/propgrid/propgrid.cpp +++ b/src/propgrid/propgrid.cpp @@ -1038,13 +1038,7 @@ void wxPropertyGrid::ResetColours() bool wxPropertyGrid::SetFont( const wxFont& font ) { // Must disable active editor. - if ( m_selected ) - { - bool selRes = ClearSelection(); - wxPG_CHECK_MSG_DBG( selRes, - false, - wxT("failed to deselect a property (editor probably had invalid value)") ); - } + ClearSelection(false); // TODO: Following code is disabled with wxMac because // it is reported to fail. I (JMS) cannot debug it @@ -2177,12 +2171,7 @@ void wxPropertyGrid::Refresh( bool WXUNUSED(eraseBackground), void wxPropertyGrid::Clear() { - if ( m_selected ) - { - bool selRes = DoSelectProperty(NULL, wxPG_SEL_DELETING); // This must be before state clear - wxPG_CHECK_RET_DBG( selRes, - wxT("failed to deselect a property (editor probably had invalid value)") ); - } + ClearSelection(false); m_pState->DoClear(); @@ -2201,8 +2190,7 @@ void wxPropertyGrid::Clear() bool wxPropertyGrid::EnableCategories( bool enable ) { - if ( !ClearSelection() ) - return false; + ClearSelection(false); if ( enable ) { @@ -2254,13 +2242,7 @@ void wxPropertyGrid::SwitchState( wxPropertyGridPageState* pNewState ) wxPGProperty* oldSelection = m_selected; - // Deselect - if ( m_selected ) - { - bool selRes = ClearSelection(); - wxPG_CHECK_RET_DBG( selRes, - wxT("failed to deselect a property (editor probably had invalid value)") ); - } + ClearSelection(false); m_pState->m_selected = oldSelection; @@ -2328,9 +2310,7 @@ void wxPropertyGrid::SortChildren( wxPGPropArg id ) void wxPropertyGrid::Sort() { - bool selRes = ClearSelection(); // This must be before state clear - wxPG_CHECK_RET_DBG( selRes, - wxT("failed to deselect a property (editor probably had invalid value)") ); + ClearSelection(false); // This must be before state clear m_pState->Sort(); } @@ -3666,10 +3646,9 @@ bool wxPropertyGrid::DoCollapse( wxPGProperty* p, bool sendEvents ) wxPGProperty* pwc = wxStaticCast(p, wxPGProperty); // If active editor was inside collapsed section, then disable it - if ( m_selected && m_selected->IsSomeParent (p) ) + if ( m_selected && m_selected->IsSomeParent(p) ) { - if ( !ClearSelection() ) - return false; + ClearSelection(false); } // Store dont-center-splitter flag 'cause we need to temporarily set it @@ -3754,8 +3733,7 @@ bool wxPropertyGrid::DoHideProperty( wxPGProperty* p, bool hide, int flags ) ( m_selected == p || m_selected->IsSomeParent(p) ) ) { - if ( !ClearSelection() ) - return false; + ClearSelection(false); } m_pState->DoHideProperty(p, hide, flags); diff --git a/src/propgrid/propgridiface.cpp b/src/propgrid/propgridiface.cpp index 46cb89fbb8..3b4bfe078c 100644 --- a/src/propgrid/propgridiface.cpp +++ b/src/propgrid/propgridiface.cpp @@ -315,11 +315,7 @@ void wxPropertyGridInterface::DeleteProperty( wxPGPropArg id ) 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 ); @@ -358,12 +354,16 @@ 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(); + return pg->DoSelectProperty(NULL, flags); else state->SetSelection(NULL); return true; @@ -428,8 +428,7 @@ bool wxPropertyGridInterface::ExpandAll( bool doExpand ) if ( GetSelection() && GetSelection() != state->DoGetRoot() && !doExpand ) { - if ( !pg->ClearSelection() ) - return false; + pg->ClearSelection(false); } wxPGVIterator it; diff --git a/src/propgrid/propgridpagestate.cpp b/src/propgrid/propgridpagestate.cpp index c1ccec0c23..fc4f6f14e5 100644 --- a/src/propgrid/propgridpagestate.cpp +++ b/src/propgrid/propgridpagestate.cpp @@ -1565,13 +1565,8 @@ bool wxPropertyGridPageState::PrepareToAddItem( wxPGProperty* property, #endif // Make sure nothing is selected. - if ( propGrid && propGrid->m_selected ) - { - bool selRes = propGrid->ClearSelection(); - wxPG_CHECK_MSG_DBG( selRes, - true, - wxT("failed to deselect a property (editor probably had invalid value)") ); - } + if ( propGrid ) + propGrid->ClearSelection(false); // NULL parent == root parent if ( !scheduledParent )