From f359462a441016510b154bc4eae2886b186cdd43 Mon Sep 17 00:00:00 2001 From: Rodrigo Braz Monteiro Date: Sat, 18 Feb 2006 22:44:12 +0000 Subject: [PATCH] Mouse drag scrolling for grid Originally committed to SVN as r64. --- core/base_grid.cpp | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/core/base_grid.cpp b/core/base_grid.cpp index f2a9f6665..4a3d63e51 100644 --- a/core/base_grid.cpp +++ b/core/base_grid.cpp @@ -59,7 +59,7 @@ BaseGrid::BaseGrid(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wx lastRow = -1; yPos = 0; bmp = NULL; - holding = true; + holding = false; // Set font wxString fontname = Options.AsText(_T("Font Face")); @@ -436,16 +436,40 @@ void BaseGrid::OnMouseEvent(wxMouseEvent &event) { bool alt = event.m_altDown; bool ctrl = event.m_controlDown; - // Click type - bool click = event.ButtonDown(wxMOUSE_BTN_LEFT); - if (click) holding = true; - if (!event.ButtonIsDown(wxMOUSE_BTN_LEFT)) holding = false; - // Row that mouse is over + bool click = event.ButtonDown(wxMOUSE_BTN_LEFT); int row = event.GetY()/lineHeight + yPos - 1; + if (holding && !click) { + row = MID(0,row,GetRows()-1); + } bool validRow = row >= 0 && row < GetRows(); if (!validRow) row = -1; + // Click type + if (click && !holding && validRow) { + holding = true; + CaptureMouse(); + } + if (!event.ButtonIsDown(wxMOUSE_BTN_LEFT) && holding) { + holding = false; + ReleaseMouse(); + } + + // Scroll to keep visible + if (holding) { + // Find direction + int minVis = yPos+1; + int maxVis = yPos+h/lineHeight-3; + int delta = 0; + if (row < minVis) delta = -1; + if (row > maxVis) delta = +1; + + // Scroll + yPos = MID(0,yPos+delta*3,GetRows()+2 - h/lineHeight); + scrollBar->SetThumbPosition(yPos); + Refresh(false); + } + // Click if ((click || holding) && validRow) { // Toggle selected