From 0cbcb12d8fcbac0e4d48dddd45a1978d9d98e177 Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Tue, 6 Mar 2012 10:23:44 +0000 Subject: [PATCH] adapting grid-cell dragging according to discussion on wx-dev along the behaviour of treecontrolg git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70825 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/generic/grid.h | 2 +- src/generic/grid.cpp | 27 ++++++++++++++++++++++----- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/include/wx/generic/grid.h b/include/wx/generic/grid.h index c4eab88beb..481a081a94 100644 --- a/include/wx/generic/grid.h +++ b/include/wx/generic/grid.h @@ -2160,7 +2160,7 @@ private: // -------------------------------- // process mouse drag event in WXGRID_CURSOR_SELECT_CELL mode - void DoGridCellDrag(wxMouseEvent& event, + bool DoGridCellDrag(wxMouseEvent& event, const wxGridCellCoords& coords, bool isFirstDrag); diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index fc9cc7e598..07655b6c4d 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -3647,13 +3647,15 @@ void wxGrid::ChangeCursorMode(CursorMode mode, // grid mouse event processing // ---------------------------------------------------------------------------- -void +bool wxGrid::DoGridCellDrag(wxMouseEvent& event, const wxGridCellCoords& coords, bool isFirstDrag) { + bool performDefault = true ; + if ( coords == wxGridNoCellCoords ) - return; // we're outside any valid cell + return performDefault; // we're outside any valid cell // Hide the edit control, so it won't interfere with drag-shrinking. if ( IsCellEditControlShown() ) @@ -3678,8 +3680,11 @@ wxGrid::DoGridCellDrag(wxMouseEvent& event, if ( m_selectedBlockCorner == wxGridNoCellCoords) m_selectedBlockCorner = coords; - SendEvent(wxEVT_GRID_CELL_BEGIN_DRAG, coords, event); - return; + // if event is handled by user code, no further processing + if ( SendEvent(wxEVT_GRID_CELL_BEGIN_DRAG, coords, event) == 1 ) + performDefault = false; + + return performDefault; } } @@ -3690,6 +3695,8 @@ wxGrid::DoGridCellDrag(wxMouseEvent& event, // we don't handle the other key modifiers event.Skip(); } + + return performDefault; } void wxGrid::DoGridLineDrag(wxMouseEvent& event, const wxGridOperations& oper) @@ -3742,7 +3749,9 @@ void wxGrid::DoGridDragEvent(wxMouseEvent& event, const wxGridCellCoords& coords switch ( m_cursorMode ) { case WXGRID_CURSOR_SELECT_CELL: - DoGridCellDrag(event, coords, isFirstDrag); + // no further handling if handled by user + if ( DoGridCellDrag(event, coords, isFirstDrag) == false ) + return; break; case WXGRID_CURSOR_RESIZE_ROW: @@ -4396,6 +4405,14 @@ wxGrid::SendEvent(const wxEventType type, mouseEv.GetY() + GetColLabelSize(), false, mouseEv); + + if ( type == wxEVT_GRID_CELL_BEGIN_DRAG ) + { + // by default the dragging is not supported, the user code must + // explicitly allow the event for it to take place + gridEvt.Veto(); + } + claimed = GetEventHandler()->ProcessEvent(gridEvt); vetoed = !gridEvt.IsAllowed(); } -- 2.45.2