Fix to make wxGrid::SelectBlock do what it says.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_2_BRANCH@7912 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1290,12 +1290,27 @@ public:
|
|||||||
void SelectRow( int row, bool addToSelected = FALSE );
|
void SelectRow( int row, bool addToSelected = FALSE );
|
||||||
void SelectCol( int col, bool addToSelected = FALSE );
|
void SelectCol( int col, bool addToSelected = FALSE );
|
||||||
|
|
||||||
void SelectBlock( int topRow, int leftCol, int bottomRow, int rightCol );
|
// MB: This ugly confusion of SelectBlock functions will be absent
|
||||||
|
// in post wx-2.2 releases
|
||||||
|
//
|
||||||
|
void SelectBlock( int topRow, int leftCol, int bottomRow, int rightCol,
|
||||||
|
bool addToSelected );
|
||||||
|
|
||||||
|
void SelectBlock( int topRow, int leftCol, int bottomRow, int rightCol )
|
||||||
|
{ SelectBlock( topRow, leftCol, bottomRow, rightCol, FALSE ); }
|
||||||
|
|
||||||
|
void SelectBlock( const wxGridCellCoords& topLeft,
|
||||||
|
const wxGridCellCoords& bottomRight,
|
||||||
|
bool addToSelected )
|
||||||
|
{ SelectBlock( topLeft.GetRow(), topLeft.GetCol(),
|
||||||
|
bottomRight.GetRow(), bottomRight.GetCol(),
|
||||||
|
addToSelected ); }
|
||||||
|
|
||||||
void SelectBlock( const wxGridCellCoords& topLeft,
|
void SelectBlock( const wxGridCellCoords& topLeft,
|
||||||
const wxGridCellCoords& bottomRight )
|
const wxGridCellCoords& bottomRight )
|
||||||
{ SelectBlock( topLeft.GetRow(), topLeft.GetCol(),
|
{ SelectBlock( topLeft.GetRow(), topLeft.GetCol(),
|
||||||
bottomRight.GetRow(), bottomRight.GetCol() ); }
|
bottomRight.GetRow(), bottomRight.GetCol(),
|
||||||
|
FALSE ); }
|
||||||
|
|
||||||
void SelectAll();
|
void SelectAll();
|
||||||
|
|
||||||
@@ -1724,6 +1739,12 @@ protected:
|
|||||||
void SetCurrentCell( int row, int col )
|
void SetCurrentCell( int row, int col )
|
||||||
{ SetCurrentCell( wxGridCellCoords(row, col) ); }
|
{ SetCurrentCell( wxGridCellCoords(row, col) ); }
|
||||||
|
|
||||||
|
void HighlightBlock( int topRow, int leftCol, int bottomRow, int rightCol );
|
||||||
|
|
||||||
|
void HighlightBlock( const wxGridCellCoords& topLeft,
|
||||||
|
const wxGridCellCoords& bottomRight )
|
||||||
|
{ HighlightBlock( topLeft.GetRow(), topLeft.GetCol(),
|
||||||
|
bottomRight.GetRow(), bottomRight.GetCol() ); }
|
||||||
|
|
||||||
// ------ functions to get/send data (see also public functions)
|
// ------ functions to get/send data (see also public functions)
|
||||||
//
|
//
|
||||||
|
@@ -4675,17 +4675,17 @@ void wxGrid::ProcessGridCellMouseEvent( wxMouseEvent& event )
|
|||||||
{
|
{
|
||||||
if ( m_selectingKeyboard == wxGridNoCellCoords)
|
if ( m_selectingKeyboard == wxGridNoCellCoords)
|
||||||
m_selectingKeyboard = coords;
|
m_selectingKeyboard = coords;
|
||||||
SelectBlock ( m_selectingKeyboard, coords );
|
HighlightBlock ( m_selectingKeyboard, coords );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( !IsSelection() )
|
if ( !IsSelection() )
|
||||||
{
|
{
|
||||||
SelectBlock( coords, coords );
|
HighlightBlock( coords, coords );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SelectBlock( m_currentCellCoords, coords );
|
HighlightBlock( m_currentCellCoords, coords );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4817,7 +4817,7 @@ void wxGrid::ProcessGridCellMouseEvent( wxMouseEvent& event )
|
|||||||
SetCurrentCell( coords );
|
SetCurrentCell( coords );
|
||||||
if ( m_selection->GetSelectionMode()
|
if ( m_selection->GetSelectionMode()
|
||||||
!= wxGrid::wxGridSelectCells)
|
!= wxGrid::wxGridSelectCells)
|
||||||
SelectBlock( coords, coords );
|
HighlightBlock( coords, coords );
|
||||||
}
|
}
|
||||||
m_waitForSlowClick = TRUE;
|
m_waitForSlowClick = TRUE;
|
||||||
}
|
}
|
||||||
@@ -5624,6 +5624,140 @@ void wxGrid::SetCurrentCell( const wxGridCellCoords& coords )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void wxGrid::HighlightBlock( int topRow, int leftCol, int bottomRow, int rightCol )
|
||||||
|
{
|
||||||
|
int temp;
|
||||||
|
wxGridCellCoords updateTopLeft, updateBottomRight;
|
||||||
|
|
||||||
|
if ( m_selection->GetSelectionMode() == wxGrid::wxGridSelectRows )
|
||||||
|
{
|
||||||
|
leftCol = 0;
|
||||||
|
rightCol = GetNumberCols() - 1;
|
||||||
|
}
|
||||||
|
else if ( m_selection->GetSelectionMode() == wxGrid::wxGridSelectColumns )
|
||||||
|
{
|
||||||
|
topRow = 0;
|
||||||
|
bottomRow = GetNumberRows() - 1;
|
||||||
|
}
|
||||||
|
if ( topRow > bottomRow )
|
||||||
|
{
|
||||||
|
temp = topRow;
|
||||||
|
topRow = bottomRow;
|
||||||
|
bottomRow = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( leftCol > rightCol )
|
||||||
|
{
|
||||||
|
temp = leftCol;
|
||||||
|
leftCol = rightCol;
|
||||||
|
rightCol = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
updateTopLeft = wxGridCellCoords( topRow, leftCol );
|
||||||
|
updateBottomRight = wxGridCellCoords( bottomRow, rightCol );
|
||||||
|
|
||||||
|
if ( m_selectingTopLeft != updateTopLeft ||
|
||||||
|
m_selectingBottomRight != updateBottomRight )
|
||||||
|
{
|
||||||
|
// Compute two optimal update rectangles:
|
||||||
|
// Either one rectangle is a real subset of the
|
||||||
|
// other, or they are (almost) disjoint!
|
||||||
|
wxRect rect[4];
|
||||||
|
bool need_refresh[4];
|
||||||
|
need_refresh[0] =
|
||||||
|
need_refresh[1] =
|
||||||
|
need_refresh[2] =
|
||||||
|
need_refresh[3] = FALSE;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
// Store intermediate values
|
||||||
|
wxCoord oldLeft = m_selectingTopLeft.GetCol();
|
||||||
|
wxCoord oldTop = m_selectingTopLeft.GetRow();
|
||||||
|
wxCoord oldRight = m_selectingBottomRight.GetCol();
|
||||||
|
wxCoord oldBottom = m_selectingBottomRight.GetRow();
|
||||||
|
|
||||||
|
// Determine the outer/inner coordinates.
|
||||||
|
if (oldLeft > leftCol)
|
||||||
|
{
|
||||||
|
temp = oldLeft;
|
||||||
|
oldLeft = leftCol;
|
||||||
|
leftCol = temp;
|
||||||
|
}
|
||||||
|
if (oldTop > topRow )
|
||||||
|
{
|
||||||
|
temp = oldTop;
|
||||||
|
oldTop = topRow;
|
||||||
|
topRow = temp;
|
||||||
|
}
|
||||||
|
if (oldRight < rightCol )
|
||||||
|
{
|
||||||
|
temp = oldRight;
|
||||||
|
oldRight = rightCol;
|
||||||
|
rightCol = temp;
|
||||||
|
}
|
||||||
|
if (oldBottom < bottomRow)
|
||||||
|
{
|
||||||
|
temp = oldBottom;
|
||||||
|
oldBottom = bottomRow;
|
||||||
|
bottomRow = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now, either the stuff marked old is the outer
|
||||||
|
// rectangle or we don't have a situation where one
|
||||||
|
// is contained in the other.
|
||||||
|
|
||||||
|
if ( oldLeft < leftCol )
|
||||||
|
{
|
||||||
|
need_refresh[0] = TRUE;
|
||||||
|
rect[0] = BlockToDeviceRect( wxGridCellCoords ( oldTop,
|
||||||
|
oldLeft ),
|
||||||
|
wxGridCellCoords ( oldBottom,
|
||||||
|
leftCol - 1 ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( oldTop < topRow )
|
||||||
|
{
|
||||||
|
need_refresh[1] = TRUE;
|
||||||
|
rect[1] = BlockToDeviceRect( wxGridCellCoords ( oldTop,
|
||||||
|
leftCol ),
|
||||||
|
wxGridCellCoords ( topRow - 1,
|
||||||
|
rightCol ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( oldRight > rightCol )
|
||||||
|
{
|
||||||
|
need_refresh[2] = TRUE;
|
||||||
|
rect[2] = BlockToDeviceRect( wxGridCellCoords ( oldTop,
|
||||||
|
rightCol + 1 ),
|
||||||
|
wxGridCellCoords ( oldBottom,
|
||||||
|
oldRight ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( oldBottom > bottomRow )
|
||||||
|
{
|
||||||
|
need_refresh[3] = TRUE;
|
||||||
|
rect[3] = BlockToDeviceRect( wxGridCellCoords ( bottomRow + 1,
|
||||||
|
leftCol ),
|
||||||
|
wxGridCellCoords ( oldBottom,
|
||||||
|
rightCol ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Change Selection
|
||||||
|
m_selectingTopLeft = updateTopLeft;
|
||||||
|
m_selectingBottomRight = updateBottomRight;
|
||||||
|
|
||||||
|
// various Refresh() calls
|
||||||
|
for (i = 0; i < 4; i++ )
|
||||||
|
if ( need_refresh[i] && rect[i] != wxGridNoCellRect )
|
||||||
|
m_gridWin->Refresh( FALSE, &(rect[i]) );
|
||||||
|
}
|
||||||
|
|
||||||
|
// never generate an event as it will be generated from
|
||||||
|
// wxGridSelection::SelectBlock!
|
||||||
|
// (old comment from when this was the body of SelectBlock)
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// ------ functions to get/send data (see also public functions)
|
// ------ functions to get/send data (see also public functions)
|
||||||
//
|
//
|
||||||
@@ -6610,7 +6744,7 @@ bool wxGrid::MoveCursorUp( bool expandSelection )
|
|||||||
m_selectingKeyboard.SetRow( m_selectingKeyboard.GetRow() - 1 );
|
m_selectingKeyboard.SetRow( m_selectingKeyboard.GetRow() - 1 );
|
||||||
MakeCellVisible( m_selectingKeyboard.GetRow(),
|
MakeCellVisible( m_selectingKeyboard.GetRow(),
|
||||||
m_selectingKeyboard.GetCol() );
|
m_selectingKeyboard.GetCol() );
|
||||||
SelectBlock( m_currentCellCoords, m_selectingKeyboard );
|
HighlightBlock( m_currentCellCoords, m_selectingKeyboard );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( m_currentCellCoords.GetRow() > 0 )
|
else if ( m_currentCellCoords.GetRow() > 0 )
|
||||||
@@ -6644,7 +6778,7 @@ bool wxGrid::MoveCursorDown( bool expandSelection )
|
|||||||
m_selectingKeyboard.SetRow( m_selectingKeyboard.GetRow() + 1 );
|
m_selectingKeyboard.SetRow( m_selectingKeyboard.GetRow() + 1 );
|
||||||
MakeCellVisible( m_selectingKeyboard.GetRow(),
|
MakeCellVisible( m_selectingKeyboard.GetRow(),
|
||||||
m_selectingKeyboard.GetCol() );
|
m_selectingKeyboard.GetCol() );
|
||||||
SelectBlock( m_currentCellCoords, m_selectingKeyboard );
|
HighlightBlock( m_currentCellCoords, m_selectingKeyboard );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( m_currentCellCoords.GetRow() < m_numRows - 1 )
|
else if ( m_currentCellCoords.GetRow() < m_numRows - 1 )
|
||||||
@@ -6678,7 +6812,7 @@ bool wxGrid::MoveCursorLeft( bool expandSelection )
|
|||||||
m_selectingKeyboard.SetCol( m_selectingKeyboard.GetCol() - 1 );
|
m_selectingKeyboard.SetCol( m_selectingKeyboard.GetCol() - 1 );
|
||||||
MakeCellVisible( m_selectingKeyboard.GetRow(),
|
MakeCellVisible( m_selectingKeyboard.GetRow(),
|
||||||
m_selectingKeyboard.GetCol() );
|
m_selectingKeyboard.GetCol() );
|
||||||
SelectBlock( m_currentCellCoords, m_selectingKeyboard );
|
HighlightBlock( m_currentCellCoords, m_selectingKeyboard );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( m_currentCellCoords.GetCol() > 0 )
|
else if ( m_currentCellCoords.GetCol() > 0 )
|
||||||
@@ -6712,7 +6846,7 @@ bool wxGrid::MoveCursorRight( bool expandSelection )
|
|||||||
m_selectingKeyboard.SetCol( m_selectingKeyboard.GetCol() + 1 );
|
m_selectingKeyboard.SetCol( m_selectingKeyboard.GetCol() + 1 );
|
||||||
MakeCellVisible( m_selectingKeyboard.GetRow(),
|
MakeCellVisible( m_selectingKeyboard.GetRow(),
|
||||||
m_selectingKeyboard.GetCol() );
|
m_selectingKeyboard.GetCol() );
|
||||||
SelectBlock( m_currentCellCoords, m_selectingKeyboard );
|
HighlightBlock( m_currentCellCoords, m_selectingKeyboard );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( m_currentCellCoords.GetCol() < m_numCols - 1 )
|
else if ( m_currentCellCoords.GetCol() < m_numCols - 1 )
|
||||||
@@ -6842,7 +6976,7 @@ bool wxGrid::MoveCursorUpBlock( bool expandSelection )
|
|||||||
if ( expandSelection )
|
if ( expandSelection )
|
||||||
{
|
{
|
||||||
m_selectingKeyboard = wxGridCellCoords( row, col );
|
m_selectingKeyboard = wxGridCellCoords( row, col );
|
||||||
SelectBlock( m_currentCellCoords, m_selectingKeyboard );
|
HighlightBlock( m_currentCellCoords, m_selectingKeyboard );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -6905,7 +7039,7 @@ bool wxGrid::MoveCursorDownBlock( bool expandSelection )
|
|||||||
if ( expandSelection )
|
if ( expandSelection )
|
||||||
{
|
{
|
||||||
m_selectingKeyboard = wxGridCellCoords( row, col );
|
m_selectingKeyboard = wxGridCellCoords( row, col );
|
||||||
SelectBlock( m_currentCellCoords, m_selectingKeyboard );
|
HighlightBlock( m_currentCellCoords, m_selectingKeyboard );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -6969,7 +7103,7 @@ bool wxGrid::MoveCursorLeftBlock( bool expandSelection )
|
|||||||
if ( expandSelection )
|
if ( expandSelection )
|
||||||
{
|
{
|
||||||
m_selectingKeyboard = wxGridCellCoords( row, col );
|
m_selectingKeyboard = wxGridCellCoords( row, col );
|
||||||
SelectBlock( m_currentCellCoords, m_selectingKeyboard );
|
HighlightBlock( m_currentCellCoords, m_selectingKeyboard );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -7033,7 +7167,7 @@ bool wxGrid::MoveCursorRightBlock( bool expandSelection )
|
|||||||
if ( expandSelection )
|
if ( expandSelection )
|
||||||
{
|
{
|
||||||
m_selectingKeyboard = wxGridCellCoords( row, col );
|
m_selectingKeyboard = wxGridCellCoords( row, col );
|
||||||
SelectBlock( m_currentCellCoords, m_selectingKeyboard );
|
HighlightBlock( m_currentCellCoords, m_selectingKeyboard );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -8069,139 +8203,17 @@ void wxGrid::SelectCol( int col, bool addToSelected )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void wxGrid::SelectBlock( int topRow, int leftCol, int bottomRow, int rightCol )
|
void wxGrid::SelectBlock( int topRow, int leftCol, int bottomRow, int rightCol,
|
||||||
|
bool addToSelected )
|
||||||
{
|
{
|
||||||
int temp;
|
if ( IsSelection() && !addToSelected )
|
||||||
wxGridCellCoords updateTopLeft, updateBottomRight;
|
ClearSelection();
|
||||||
|
|
||||||
if ( m_selection->GetSelectionMode() == wxGrid::wxGridSelectRows )
|
m_selection->SelectBlock( topRow, leftCol, bottomRow, rightCol,
|
||||||
{
|
FALSE, addToSelected );
|
||||||
leftCol = 0;
|
|
||||||
rightCol = GetNumberCols() - 1;
|
|
||||||
}
|
|
||||||
else if ( m_selection->GetSelectionMode() == wxGrid::wxGridSelectColumns )
|
|
||||||
{
|
|
||||||
topRow = 0;
|
|
||||||
bottomRow = GetNumberRows() - 1;
|
|
||||||
}
|
|
||||||
if ( topRow > bottomRow )
|
|
||||||
{
|
|
||||||
temp = topRow;
|
|
||||||
topRow = bottomRow;
|
|
||||||
bottomRow = temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( leftCol > rightCol )
|
|
||||||
{
|
|
||||||
temp = leftCol;
|
|
||||||
leftCol = rightCol;
|
|
||||||
rightCol = temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
updateTopLeft = wxGridCellCoords( topRow, leftCol );
|
|
||||||
updateBottomRight = wxGridCellCoords( bottomRow, rightCol );
|
|
||||||
|
|
||||||
if ( m_selectingTopLeft != updateTopLeft ||
|
|
||||||
m_selectingBottomRight != updateBottomRight )
|
|
||||||
{
|
|
||||||
// Compute two optimal update rectangles:
|
|
||||||
// Either one rectangle is a real subset of the
|
|
||||||
// other, or they are (almost) disjoint!
|
|
||||||
wxRect rect[4];
|
|
||||||
bool need_refresh[4];
|
|
||||||
need_refresh[0] =
|
|
||||||
need_refresh[1] =
|
|
||||||
need_refresh[2] =
|
|
||||||
need_refresh[3] = FALSE;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
// Store intermediate values
|
|
||||||
wxCoord oldLeft = m_selectingTopLeft.GetCol();
|
|
||||||
wxCoord oldTop = m_selectingTopLeft.GetRow();
|
|
||||||
wxCoord oldRight = m_selectingBottomRight.GetCol();
|
|
||||||
wxCoord oldBottom = m_selectingBottomRight.GetRow();
|
|
||||||
|
|
||||||
// Determine the outer/inner coordinates.
|
|
||||||
if (oldLeft > leftCol)
|
|
||||||
{
|
|
||||||
temp = oldLeft;
|
|
||||||
oldLeft = leftCol;
|
|
||||||
leftCol = temp;
|
|
||||||
}
|
|
||||||
if (oldTop > topRow )
|
|
||||||
{
|
|
||||||
temp = oldTop;
|
|
||||||
oldTop = topRow;
|
|
||||||
topRow = temp;
|
|
||||||
}
|
|
||||||
if (oldRight < rightCol )
|
|
||||||
{
|
|
||||||
temp = oldRight;
|
|
||||||
oldRight = rightCol;
|
|
||||||
rightCol = temp;
|
|
||||||
}
|
|
||||||
if (oldBottom < bottomRow)
|
|
||||||
{
|
|
||||||
temp = oldBottom;
|
|
||||||
oldBottom = bottomRow;
|
|
||||||
bottomRow = temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now, either the stuff marked old is the outer
|
|
||||||
// rectangle or we don't have a situation where one
|
|
||||||
// is contained in the other.
|
|
||||||
|
|
||||||
if ( oldLeft < leftCol )
|
|
||||||
{
|
|
||||||
need_refresh[0] = TRUE;
|
|
||||||
rect[0] = BlockToDeviceRect( wxGridCellCoords ( oldTop,
|
|
||||||
oldLeft ),
|
|
||||||
wxGridCellCoords ( oldBottom,
|
|
||||||
leftCol - 1 ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( oldTop < topRow )
|
|
||||||
{
|
|
||||||
need_refresh[1] = TRUE;
|
|
||||||
rect[1] = BlockToDeviceRect( wxGridCellCoords ( oldTop,
|
|
||||||
leftCol ),
|
|
||||||
wxGridCellCoords ( topRow - 1,
|
|
||||||
rightCol ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( oldRight > rightCol )
|
|
||||||
{
|
|
||||||
need_refresh[2] = TRUE;
|
|
||||||
rect[2] = BlockToDeviceRect( wxGridCellCoords ( oldTop,
|
|
||||||
rightCol + 1 ),
|
|
||||||
wxGridCellCoords ( oldBottom,
|
|
||||||
oldRight ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( oldBottom > bottomRow )
|
|
||||||
{
|
|
||||||
need_refresh[3] = TRUE;
|
|
||||||
rect[3] = BlockToDeviceRect( wxGridCellCoords ( bottomRow + 1,
|
|
||||||
leftCol ),
|
|
||||||
wxGridCellCoords ( oldBottom,
|
|
||||||
rightCol ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Change Selection
|
|
||||||
m_selectingTopLeft = updateTopLeft;
|
|
||||||
m_selectingBottomRight = updateBottomRight;
|
|
||||||
|
|
||||||
// various Refresh() calls
|
|
||||||
for (i = 0; i < 4; i++ )
|
|
||||||
if ( need_refresh[i] && rect[i] != wxGridNoCellRect )
|
|
||||||
m_gridWin->Refresh( FALSE, &(rect[i]) );
|
|
||||||
}
|
|
||||||
|
|
||||||
// never generate an event as it will be generated from
|
|
||||||
// wxGridSelection::SelectBlock!
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void wxGrid::SelectAll()
|
void wxGrid::SelectAll()
|
||||||
{
|
{
|
||||||
m_selection->SelectBlock( 0, 0, m_numRows-1, m_numCols-1 );
|
m_selection->SelectBlock( 0, 0, m_numRows-1, m_numCols-1 );
|
||||||
|
Reference in New Issue
Block a user