don't allow selecting multiple items in single selection control by changing the focused item with Ctrl-arrows and then pressing Space

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@47175 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2007-07-05 22:44:33 +00:00
parent d23bf09c7f
commit a9aead31d6

View File

@ -2462,7 +2462,7 @@ wxRect wxListMainWindow::GetLineLabelRect(size_t line) const
image_x = 3 + ix + IMAGE_MARGIN_IN_REPORT_MODE; image_x = 3 + ix + IMAGE_MARGIN_IN_REPORT_MODE;
} }
} }
wxRect rect; wxRect rect;
rect.x = HEADER_OFFSET_X; rect.x = HEADER_OFFSET_X;
rect.y = GetLineY(line); rect.y = GetLineY(line);
@ -3161,7 +3161,7 @@ void wxListMainWindow::OnMouse( wxMouseEvent &event )
wxRect label = GetLineLabelRect( current ); wxRect label = GetLineLabelRect( current );
if (label.Contains( x, y )) if (label.Contains( x, y ))
m_renameTimer->Start( 250, true ); m_renameTimer->Start( 250, true );
} }
else else
m_renameTimer->Start( 250, true ); m_renameTimer->Start( 250, true );
@ -3332,7 +3332,8 @@ void wxListMainWindow::OnArrowChar(size_t newCurrent, const wxKeyEvent& event)
else // !shift else // !shift
{ {
// all previously selected items are unselected unless ctrl is held // all previously selected items are unselected unless ctrl is held
if ( !event.ControlDown() ) // in a multiselection control
if ( !event.ControlDown() || IsSingleSel() )
HighlightAll(false); HighlightAll(false);
ChangeCurrent(newCurrent); ChangeCurrent(newCurrent);
@ -3340,10 +3341,9 @@ void wxListMainWindow::OnArrowChar(size_t newCurrent, const wxKeyEvent& event)
// refresh the old focus to remove it // refresh the old focus to remove it
RefreshLine( oldCurrent ); RefreshLine( oldCurrent );
if ( !event.ControlDown() ) // in single selection mode we must always have a selected item
{ if ( !event.ControlDown() || IsSingleSel() )
HighlightLine( m_current, true ); HighlightLine( m_current, true );
}
} }
RefreshLine( m_current ); RefreshLine( m_current );
@ -3523,17 +3523,19 @@ void wxListMainWindow::OnChar( wxKeyEvent &event )
case WXK_SPACE: case WXK_SPACE:
if ( IsSingleSel() ) if ( IsSingleSel() )
{ {
SendNotify( m_current, wxEVT_COMMAND_LIST_ITEM_ACTIVATED ); if ( event.ControlDown() )
if ( IsHighlighted(m_current) )
{ {
// don't unselect the item in single selection mode ReverseHighlight(m_current);
break; }
else // normal space press
{
SendNotify( m_current, wxEVT_COMMAND_LIST_ITEM_ACTIVATED );
} }
//else: select it in ReverseHighlight() below if unselected
} }
else // multiple selection
ReverseHighlight(m_current); {
ReverseHighlight(m_current);
}
break; break;
case WXK_RETURN: case WXK_RETURN:
@ -4830,7 +4832,7 @@ void wxListMainWindow::OnScroll(wxScrollWinEvent& event)
// update our idea of which lines are shown when we redraw the window the // update our idea of which lines are shown when we redraw the window the
// next time // next time
ResetVisibleLinesRange(); ResetVisibleLinesRange();
if ( event.GetOrientation() == wxHORIZONTAL && HasHeader() ) if ( event.GetOrientation() == wxHORIZONTAL && HasHeader() )
{ {
wxGenericListCtrl* lc = GetListCtrl(); wxGenericListCtrl* lc = GetListCtrl();