Merge branch 'grid-event-delete'
Handle deleting grid rows/columns in event handlers gracefully. See https://github.com/wxWidgets/wxWidgets/pull/1834
This commit is contained in:
@@ -5297,16 +5297,35 @@ wxGrid::SendGridSizeEvent(wxEventType type,
|
||||
return GetEventHandler()->ProcessEvent(gridEvt);
|
||||
}
|
||||
|
||||
// Generate a grid event based on a mouse event and return:
|
||||
// -1 if the event was vetoed
|
||||
// Process the event and return
|
||||
// -1 if the event was vetoed or if event cell was deleted
|
||||
// +1 if the event was processed (but not vetoed)
|
||||
// 0 if the event wasn't handled
|
||||
int wxGrid::DoSendEvent(wxGridEvent& gridEvt)
|
||||
{
|
||||
const bool claimed = GetEventHandler()->ProcessEvent(gridEvt);
|
||||
|
||||
// A Veto'd event may not be `claimed' so test this first
|
||||
if ( !gridEvt.IsAllowed() )
|
||||
return -1;
|
||||
|
||||
// We also return -1 if the event cell was deleted, as this allows to have
|
||||
// checks in several functions that generate an event and then proceed
|
||||
// doing something by default with the selected cell: this shouldn't be
|
||||
// done if the user-defined handler deleted this cell.
|
||||
if ( gridEvt.GetRow() >= GetNumberRows() ||
|
||||
gridEvt.GetCol() >= GetNumberCols() )
|
||||
return -1;
|
||||
|
||||
return claimed ? 1 : 0;
|
||||
}
|
||||
|
||||
// Generate a grid event based on a mouse event and call DoSendEvent() with it.
|
||||
int
|
||||
wxGrid::SendEvent(wxEventType type,
|
||||
int row, int col,
|
||||
const wxMouseEvent& mouseEv)
|
||||
{
|
||||
bool claimed, vetoed;
|
||||
|
||||
if ( type == wxEVT_GRID_LABEL_LEFT_CLICK ||
|
||||
type == wxEVT_GRID_LABEL_LEFT_DCLICK ||
|
||||
@@ -5328,8 +5347,8 @@ wxGrid::SendEvent(wxEventType type,
|
||||
pos.y,
|
||||
false,
|
||||
mouseEv);
|
||||
claimed = GetEventHandler()->ProcessEvent(gridEvt);
|
||||
vetoed = !gridEvt.IsAllowed();
|
||||
|
||||
return DoSendEvent(gridEvt);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -5349,15 +5368,8 @@ wxGrid::SendEvent(wxEventType type,
|
||||
gridEvt.Veto();
|
||||
}
|
||||
|
||||
claimed = GetEventHandler()->ProcessEvent(gridEvt);
|
||||
vetoed = !gridEvt.IsAllowed();
|
||||
return DoSendEvent(gridEvt);
|
||||
}
|
||||
|
||||
// A Veto'd event may not be `claimed' so test this first
|
||||
if (vetoed)
|
||||
return -1;
|
||||
|
||||
return claimed ? 1 : 0;
|
||||
}
|
||||
|
||||
// Generate a grid event of specified type, return value same as above
|
||||
@@ -5368,13 +5380,7 @@ wxGrid::SendEvent(wxEventType type, int row, int col, const wxString& s)
|
||||
wxGridEvent gridEvt( GetId(), type, this, row, col );
|
||||
gridEvt.SetString(s);
|
||||
|
||||
const bool claimed = GetEventHandler()->ProcessEvent(gridEvt);
|
||||
|
||||
// A Veto'd event may not be `claimed' so test this first
|
||||
if ( !gridEvt.IsAllowed() )
|
||||
return -1;
|
||||
|
||||
return claimed ? 1 : 0;
|
||||
return DoSendEvent(gridEvt);
|
||||
}
|
||||
|
||||
void wxGrid::Refresh(bool eraseb, const wxRect* rect)
|
||||
|
Reference in New Issue
Block a user