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:
Jaakko Salli
2008-11-06 18:05:09 +00:00
parent d1a4b6004a
commit 1621f192d9
7 changed files with 81 additions and 62 deletions

View File

@@ -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;

View File

@@ -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.
*/

View File

@@ -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 );
};

View File

@@ -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

View File

@@ -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();
}
@@ -3668,8 +3648,7 @@ bool wxPropertyGrid::DoCollapse( wxPGProperty* p, bool sendEvents )
// If active editor was inside collapsed section, then disable it
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);

View File

@@ -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;

View File

@@ -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 )