]> git.saurik.com Git - wxWidgets.git/commitdiff
fixed GetNextItem(item = -1)
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 25 Jan 2000 16:26:17 +0000 (16:26 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 25 Jan 2000 16:26:17 +0000 (16:26 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5654 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/generic/listctrl.cpp

index 62c3aa3787852c466c34dd736cecb44ca72585b2..b7c2132a757c779955291744068bc582240bc488 100644 (file)
@@ -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;
 }