Refactor event sending code in wxGrid to use even more functions

Move the logic determining the return value of SendEvent() into its own
function instead of repeating it twice.

No real changes, this is a pure refactoring.
This commit is contained in:
Vadim Zeitlin
2020-05-02 00:47:43 +02:00
parent f938402dd0
commit 5cdcfddc61
2 changed files with 23 additions and 21 deletions

View File

@@ -97,6 +97,7 @@ class WXDLLIMPEXP_FWD_CORE wxGridCellAttr;
class WXDLLIMPEXP_FWD_CORE wxGridCellAttrProviderData; class WXDLLIMPEXP_FWD_CORE wxGridCellAttrProviderData;
class WXDLLIMPEXP_FWD_CORE wxGridColLabelWindow; class WXDLLIMPEXP_FWD_CORE wxGridColLabelWindow;
class WXDLLIMPEXP_FWD_CORE wxGridCornerLabelWindow; class WXDLLIMPEXP_FWD_CORE wxGridCornerLabelWindow;
class WXDLLIMPEXP_FWD_CORE wxGridEvent;
class WXDLLIMPEXP_FWD_CORE wxGridRowLabelWindow; class WXDLLIMPEXP_FWD_CORE wxGridRowLabelWindow;
class WXDLLIMPEXP_FWD_CORE wxGridWindow; class WXDLLIMPEXP_FWD_CORE wxGridWindow;
class WXDLLIMPEXP_FWD_CORE wxGridTypeRegistry; class WXDLLIMPEXP_FWD_CORE wxGridTypeRegistry;
@@ -2552,8 +2553,11 @@ protected:
bool Redimension( wxGridTableMessage& ); bool Redimension( wxGridTableMessage& );
// generate the appropriate grid event and return -1 if it was vetoed, 1 if // Send the given grid event and return -1 if it was vetoed, 1 if
// it was processed (but not vetoed) and 0 if it wasn't processed // 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 SendEvent(wxEventType evtType,
int row, int col, int row, int col,
const wxMouseEvent& e); const wxMouseEvent& e);

View File

@@ -5293,16 +5293,27 @@ wxGrid::SendGridSizeEvent(wxEventType type,
return GetEventHandler()->ProcessEvent(gridEvt); return GetEventHandler()->ProcessEvent(gridEvt);
} }
// Generate a grid event based on a mouse event and return: // Process the event and return
// -1 if the event was vetoed // -1 if the event was vetoed
// +1 if the event was processed (but not vetoed) // +1 if the event was processed (but not vetoed)
// 0 if the event wasn't handled // 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;
return claimed ? 1 : 0;
}
// Generate a grid event based on a mouse event and call DoSendEvent() with it.
int int
wxGrid::SendEvent(wxEventType type, wxGrid::SendEvent(wxEventType type,
int row, int col, int row, int col,
const wxMouseEvent& mouseEv) const wxMouseEvent& mouseEv)
{ {
bool claimed, vetoed;
if ( type == wxEVT_GRID_LABEL_LEFT_CLICK || if ( type == wxEVT_GRID_LABEL_LEFT_CLICK ||
type == wxEVT_GRID_LABEL_LEFT_DCLICK || type == wxEVT_GRID_LABEL_LEFT_DCLICK ||
@@ -5324,8 +5335,8 @@ wxGrid::SendEvent(wxEventType type,
pos.y, pos.y,
false, false,
mouseEv); mouseEv);
claimed = GetEventHandler()->ProcessEvent(gridEvt);
vetoed = !gridEvt.IsAllowed(); return DoSendEvent(gridEvt);
} }
else else
{ {
@@ -5345,15 +5356,8 @@ wxGrid::SendEvent(wxEventType type,
gridEvt.Veto(); gridEvt.Veto();
} }
claimed = GetEventHandler()->ProcessEvent(gridEvt); return DoSendEvent(gridEvt);
vetoed = !gridEvt.IsAllowed();
} }
// 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 // Generate a grid event of specified type, return value same as above
@@ -5364,13 +5368,7 @@ wxGrid::SendEvent(wxEventType type, int row, int col, const wxString& s)
wxGridEvent gridEvt( GetId(), type, this, row, col ); wxGridEvent gridEvt( GetId(), type, this, row, col );
gridEvt.SetString(s); gridEvt.SetString(s);
const bool claimed = GetEventHandler()->ProcessEvent(gridEvt); return DoSendEvent(gridEvt);
// A Veto'd event may not be `claimed' so test this first
if ( !gridEvt.IsAllowed() )
return -1;
return claimed ? 1 : 0;
} }
void wxGrid::Refresh(bool eraseb, const wxRect* rect) void wxGrid::Refresh(bool eraseb, const wxRect* rect)