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
This commit is contained in:
@@ -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;
|
||||
|
@@ -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.
|
||||
*/
|
||||
|
@@ -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 );
|
||||
};
|
||||
|
@@ -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.
|
||||
|
||||
@return Returns @true if success (ie. validator did not intercept).
|
||||
@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 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
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
@@ -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 )
|
||||
|
Reference in New Issue
Block a user