From: Vadim Zeitlin Date: Tue, 25 Jan 2000 16:26:17 +0000 (+0000) Subject: fixed GetNextItem(item = -1) X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/19695fbd618e13d34a2c5c60d754ecbc0c613fb3 fixed GetNextItem(item = -1) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5654 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/generic/listctrl.cpp b/src/generic/listctrl.cpp index 62c3aa3787..b7c2132a75 100644 --- a/src/generic/listctrl.cpp +++ b/src/generic/listctrl.cpp @@ -2331,21 +2331,31 @@ void wxListMainWindow::RealizeChanges( void ) } } -long wxListMainWindow::GetNextItem( long item, int WXUNUSED(geometry), int state ) +long wxListMainWindow::GetNextItem( long item, + int WXUNUSED(geometry), + int state ) { - long ret = 0; - if (item > 0) ret = item; - if(ret >= GetItemCount()) return -1; + long ret = item; + wxCHECK_MSG( ret < GetItemCount(), -1, _T("invalid listctrl index") ); + + // notice that we start with the next item (or the first one if item == -1) + // and this is intentional to allow writing a simple loop to iterate over + // all selected items wxNode *node = m_lines.Nth( (size_t)++ret ); while (node) { wxListLineData *line = (wxListLineData*)node->Data(); - if ((state & wxLIST_STATE_FOCUSED) && (line == m_current)) return ret; - if ((state & wxLIST_STATE_SELECTED) && (line->IsHilighted())) return ret; - if (!state) return ret; + if ((state & wxLIST_STATE_FOCUSED) && (line == m_current)) + return ret; + if ((state & wxLIST_STATE_SELECTED) && (line->IsHilighted())) + return ret; + if (!state) + return ret; ret++; + node = node->Next(); } + return -1; }