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:
@@ -97,6 +97,7 @@ class WXDLLIMPEXP_FWD_CORE wxGridCellAttr;
|
||||
class WXDLLIMPEXP_FWD_CORE wxGridCellAttrProviderData;
|
||||
class WXDLLIMPEXP_FWD_CORE wxGridColLabelWindow;
|
||||
class WXDLLIMPEXP_FWD_CORE wxGridCornerLabelWindow;
|
||||
class WXDLLIMPEXP_FWD_CORE wxGridEvent;
|
||||
class WXDLLIMPEXP_FWD_CORE wxGridRowLabelWindow;
|
||||
class WXDLLIMPEXP_FWD_CORE wxGridWindow;
|
||||
class WXDLLIMPEXP_FWD_CORE wxGridTypeRegistry;
|
||||
@@ -2554,8 +2555,13 @@ protected:
|
||||
bool Redimension( wxGridTableMessage& );
|
||||
|
||||
|
||||
// generate the appropriate grid event and return -1 if it was vetoed, 1 if
|
||||
// it was processed (but not vetoed) and 0 if it wasn't processed
|
||||
// Send the given grid event and return -1 if it was vetoed or, as a
|
||||
// special exception, if an event for a particular cell resulted in this
|
||||
// cell being deleted, 1 if it was processed (but not vetoed) and 0 if it
|
||||
// wasn't processed.
|
||||
int DoSendEvent(wxGridEvent& gridEvt);
|
||||
|
||||
// Generate an event of the given type and call DoSendEvent().
|
||||
int SendEvent(wxEventType evtType,
|
||||
int row, int col,
|
||||
const wxMouseEvent& e);
|
||||
|
@@ -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