From 88b792af94fe4a2d0f14a2c4c6b85ff3c4bd49a5 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 13 Aug 2001 15:41:18 +0000 Subject: [PATCH] added missing refresh when changing focus in wxListCtrl, added test for it in the sample git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11368 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- samples/listctrl/listtest.cpp | 14 ++++++++++++++ samples/listctrl/listtest.h | 2 ++ src/generic/listctrl.cpp | 14 +++++++++++--- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/samples/listctrl/listtest.cpp b/samples/listctrl/listtest.cpp index dbac0985fb..8fc8a10781 100644 --- a/samples/listctrl/listtest.cpp +++ b/samples/listctrl/listtest.cpp @@ -60,6 +60,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(LIST_SMALL_ICON_TEXT_VIEW, MyFrame::OnSmallIconTextView) EVT_MENU(LIST_VIRTUAL_VIEW, MyFrame::OnVirtualView) + EVT_MENU(LIST_FOCUS_LAST, MyFrame::OnFocusLast) EVT_MENU(LIST_TOGGLE_FIRST, MyFrame::OnToggleFirstSel) EVT_MENU(LIST_DESELECT_ALL, MyFrame::OnDeselectAll) EVT_MENU(LIST_SELECT_ALL, MyFrame::OnSelectAll) @@ -180,6 +181,7 @@ MyFrame::MyFrame(const wxChar *title, int x, int y, int w, int h) menuView->Append(LIST_VIRTUAL_VIEW, _T("Virtual view\tF7")); wxMenu *menuList = new wxMenu; + menuList->Append(LIST_FOCUS_LAST, _T("&Make last item current\tCtrl-L")); menuList->Append(LIST_TOGGLE_FIRST, _T("&Toggle first item\tCtrl-T")); menuList->Append(LIST_DESELECT_ALL, _T("&Deselect All\tCtrl-D")); menuList->Append(LIST_SELECT_ALL, _T("S&elect All\tCtrl-A")); @@ -252,6 +254,18 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) dialog.ShowModal(); } +void MyFrame::OnFocusLast(wxCommandEvent& WXUNUSED(event)) +{ + long index = m_listCtrl->GetItemCount() - 1; + if ( index == -1 ) + { + return; + } + + m_listCtrl->SetItemState(index, wxLIST_STATE_FOCUSED, wxLIST_STATE_FOCUSED); + m_listCtrl->EnsureVisible(index); +} + void MyFrame::OnToggleFirstSel(wxCommandEvent& WXUNUSED(event)) { m_listCtrl->SetItemState(0, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED); diff --git a/samples/listctrl/listtest.h b/samples/listctrl/listtest.h index 005fb3f0e9..f649e03a79 100644 --- a/samples/listctrl/listtest.h +++ b/samples/listctrl/listtest.h @@ -84,6 +84,7 @@ public: void OnSmallIconTextView(wxCommandEvent& event); void OnVirtualView(wxCommandEvent& event); + void OnFocusLast(wxCommandEvent& event); void OnToggleFirstSel(wxCommandEvent& event); void OnDeselectAll(wxCommandEvent& event); void OnSelectAll(wxCommandEvent& event); @@ -144,6 +145,7 @@ enum LIST_TOGGLE_FIRST, LIST_SHOW_COL_INFO, LIST_SHOW_SEL_INFO, + LIST_FOCUS_LAST, LIST_CTRL = 1000 }; diff --git a/src/generic/listctrl.cpp b/src/generic/listctrl.cpp index e4fc11143e..8f641d4537 100644 --- a/src/generic/listctrl.cpp +++ b/src/generic/listctrl.cpp @@ -3497,8 +3497,9 @@ void wxListMainWindow::SetItemState( long litem, long state, long stateMask ) _T("invalid list ctrl item index in SetItem") ); size_t oldCurrent = m_current; - size_t item = (size_t)litem; // sdafe because of the check above + size_t item = (size_t)litem; // safe because of the check above + // do we need to change the focus? if ( stateMask & wxLIST_STATE_FOCUSED ) { if ( state & wxLIST_STATE_FOCUSED ) @@ -3510,9 +3511,13 @@ void wxListMainWindow::SetItemState( long litem, long state, long stateMask ) m_current = item; OnFocusLine( m_current ); - if ( IsSingleSel() && (oldCurrent != (size_t)-1) ) + if ( oldCurrent != (size_t)-1 ) { - HighlightLine(oldCurrent, FALSE); + if ( IsSingleSel() ) + { + HighlightLine(oldCurrent, FALSE); + } + RefreshLine(oldCurrent); } @@ -3526,10 +3531,13 @@ void wxListMainWindow::SetItemState( long litem, long state, long stateMask ) { OnUnfocusLine( m_current ); m_current = (size_t)-1; + + RefreshLine( oldCurrent ); } } } + // do we need to change the selection state? if ( stateMask & wxLIST_STATE_SELECTED ) { bool on = (state & wxLIST_STATE_SELECTED) != 0; -- 2.47.2