/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
-#pragma implementation "listctrl.h"
+ #pragma implementation "listctrl.h"
+ #pragma implementation "listctrlbase.h"
#endif
// For compilers that support precompilation, includes "wx.h".
{
wxNavigationKeyEvent nevent;
nevent.SetDirection( !event.ShiftDown() );
+ nevent.SetEventObject( GetParent()->GetParent() );
nevent.SetCurrentFocus( m_parent );
- if (m_parent->GetEventHandler()->ProcessEvent( nevent )) return;
+ if (GetParent()->GetParent()->GetEventHandler()->ProcessEvent( nevent )) return;
}
/* no item -> nothing to do */
}
}
-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,
+ max = GetItemCount();
+ wxCHECK_MSG( (ret == -1) || (ret < max), -1,
+ _T("invalid listctrl index in GetNextItem()") );
+
+ // 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
+ ret++;
+ if ( ret == max )
+ {
+ // this is not an error because the index was ok initially, just no
+ // such item
+ return -1;
+ }
+
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;
}
list_ctrl_compare_func_2 = fn;
list_ctrl_compare_data = data;
m_lines.Sort( list_ctrl_compare_func_1 );
+ m_dirty = TRUE;
}
void wxListMainWindow::OnScroll(wxScrollWinEvent& event)
m_mainWin = new wxListMainWindow( this, -1, wxPoint(0,0), size, style );
if (HasFlag(wxLC_REPORT))
+ {
m_headerWin = new wxListHeaderWindow( this, -1, m_mainWin, wxPoint(0,0), wxSize(size.x,23), wxTAB_TRAVERSAL );
+ if (HasFlag(wxLC_NO_HEADER))
+ m_headerWin->Show( FALSE );
+ }
else
+ {
m_headerWin = (wxListHeaderWindow *) NULL;
+ }
SetBackgroundColour( *wxWHITE );