prevent a single selection control from having multiple selected items [backport of 47175 and 47176 from trunk]

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@47177 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2007-07-05 22:52:30 +00:00
parent 056ae23eeb
commit fedc6cd535

View File

@@ -3161,7 +3161,7 @@ void wxListMainWindow::OnMouse( wxMouseEvent &event )
wxRect label = GetLineLabelRect( current );
if (label.Contains( x, y ))
m_renameTimer->Start( 250, true );
}
else
m_renameTimer->Start( 250, true );
@@ -3332,7 +3332,8 @@ void wxListMainWindow::OnArrowChar(size_t newCurrent, const wxKeyEvent& event)
else // !shift
{
// all previously selected items are unselected unless ctrl is held
if ( !event.ControlDown() )
// in a multiselection control
if ( !event.ControlDown() || IsSingleSel() )
HighlightAll(false);
ChangeCurrent(newCurrent);
@@ -3340,10 +3341,9 @@ void wxListMainWindow::OnArrowChar(size_t newCurrent, const wxKeyEvent& event)
// refresh the old focus to remove it
RefreshLine( oldCurrent );
if ( !event.ControlDown() )
{
// in single selection mode we must always have a selected item
if ( !event.ControlDown() || IsSingleSel() )
HighlightLine( m_current, true );
}
}
RefreshLine( m_current );
@@ -3523,17 +3523,19 @@ void wxListMainWindow::OnChar( wxKeyEvent &event )
case WXK_SPACE:
if ( IsSingleSel() )
{
SendNotify( m_current, wxEVT_COMMAND_LIST_ITEM_ACTIVATED );
if ( IsHighlighted(m_current) )
if ( event.ControlDown() )
{
// don't unselect the item in single selection mode
break;
ReverseHighlight(m_current);
}
else // normal space press
{
SendNotify( m_current, wxEVT_COMMAND_LIST_ITEM_ACTIVATED );
}
//else: select it in ReverseHighlight() below if unselected
}
ReverseHighlight(m_current);
else // multiple selection
{
ReverseHighlight(m_current);
}
break;
case WXK_RETURN:
@@ -4808,6 +4810,11 @@ int LINKAGEMODE list_ctrl_compare_func_1( wxListLineData **arg1, wxListLineData
void wxListMainWindow::SortItems( wxListCtrlCompare fn, long data )
{
// selections won't make sense any more after sorting the items so reset
// them
HighlightAll(false);
ResetCurrent();
list_ctrl_compare_func_2 = fn;
list_ctrl_compare_data = data;
m_lines.Sort( list_ctrl_compare_func_1 );
@@ -4830,7 +4837,7 @@ void wxListMainWindow::OnScroll(wxScrollWinEvent& event)
// update our idea of which lines are shown when we redraw the window the
// next time
ResetVisibleLinesRange();
if ( event.GetOrientation() == wxHORIZONTAL && HasHeader() )
{
wxGenericListCtrl* lc = GetListCtrl();