Drop the column being dragged at the correct position in wxGrid.

The column was being always dropped after the column at drop position but this
was incorrect and didn't correspond to the visual feedback drawn by
wxHeaderCtrl: if the drop position is over the "near" part of the column, the
column should be dropped before it instead.

Do the check for this in wxGrid code too now.

Closes #12120.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64475 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2010-06-03 10:35:53 +00:00
parent 1b46c6697f
commit 7c3310596e

View File

@@ -3469,7 +3469,34 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event )
} }
else else
{ {
DoEndMoveCol(XToPos(x)); // get the position of the column we're over
int pos = XToPos(x);
// we may need to adjust the drop position but don't bother
// checking for it if we can't anyhow
if ( pos > 1 )
{
// also find the index of the column we're over: notice
// that the existing "col" variable may be invalid but
// we need a valid one here
const int colValid = GetColAt(pos);
// if we're on the "near" (usually left but right in
// RTL case) part of the column, the actual position we
// should be placed in is actually the one before it
bool near;
const int middle = GetColLeft(colValid) +
GetColWidth(colValid)/2;
if ( GetLayoutDirection() == wxLayout_LeftToRight )
near = x <= middle;
else // wxLayout_RightToLeft
near = x > middle;
if ( near )
pos--;
}
DoEndMoveCol(pos);
} }
break; break;