oops, previous commit was incomplete, fixed

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_2_BRANCH@7688 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2000-07-04 09:14:58 +00:00
parent 5623e844b6
commit 70e5dd6b56

View File

@@ -2064,7 +2064,7 @@ void wxListMainWindow::OnChar( wxKeyEvent &event )
case WXK_DOWN: case WXK_DOWN:
{ {
int index = m_lines.Index(*m_current); int index = m_lines.Index(*m_current);
if (index != wxNOT_FOUND && (size_t)index < m_lines.GetCount()-2) if (index != wxNOT_FOUND && (size_t)index < m_lines.GetCount()-1)
OnArrowChar( &m_lines[index+1], event.ShiftDown() ); OnArrowChar( &m_lines[index+1], event.ShiftDown() );
break; break;
} }
@@ -2080,50 +2080,59 @@ void wxListMainWindow::OnChar( wxKeyEvent &event )
OnArrowChar( &m_lines[0], event.ShiftDown() ); OnArrowChar( &m_lines[0], event.ShiftDown() );
break; break;
} }
/* case WXK_PRIOR: FIXME - finish porting case WXK_PRIOR:
{ {
int steps = 0; int steps = 0;
int index = m_lines.Index(*m_current);
if (m_mode & wxLC_REPORT) if (m_mode & wxLC_REPORT)
{ {
steps = m_visibleLines-1; steps = m_visibleLines-1;
} }
else else
{ {
int pos = 0; steps = index % m_visibleLines;
wxNode *node = m_lines.First(); }
for (;;) { if (m_current == (wxListLineData*)node->Data()) break; pos++; node = node->Next(); } if (index != wxNOT_FOUND)
steps = pos % m_visibleLines; {
index -= steps;
if (index < 0) index = 0;
OnArrowChar( &m_lines[index], event.ShiftDown() );
} }
wxNode *node = m_lines.Member( m_current );
for (int i = 0; i < steps; i++) if (node->Previous()) node = node->Previous();
if (node) OnArrowChar( (wxListLineData*)node->Data(), event.ShiftDown() );
break; break;
} }
case WXK_NEXT: case WXK_NEXT:
{ {
int steps = 0; int steps = 0;
int index = m_lines.Index(*m_current);
if (m_mode & wxLC_REPORT) if (m_mode & wxLC_REPORT)
{ {
steps = m_visibleLines-1; steps = m_visibleLines-1;
} }
else else
{ {
int pos = 0; wxNode *node = m_lines.First(); steps = m_visibleLines-(index % m_visibleLines)-1;
for (;;) { if (m_current == (wxListLineData*)node->Data()) break; pos++; node = node->Next(); } }
steps = m_visibleLines-(pos % m_visibleLines)-1;
if (index != wxNOT_FOUND)
{
index += steps;
if ((size_t)index >= m_lines.GetCount())
index = m_lines.GetCount()-1;
OnArrowChar( &m_lines[index], event.ShiftDown() );
} }
wxNode *node = m_lines.Member( m_current );
for (int i = 0; i < steps; i++) if (node->Next()) node = node->Next();
if (node) OnArrowChar( (wxListLineData*)node->Data(), event.ShiftDown() );
break; break;
} }
case WXK_LEFT: case WXK_LEFT:
{ {
if (!(m_mode & wxLC_REPORT)) if (!(m_mode & wxLC_REPORT))
{ {
wxNode *node = m_lines.Member( m_current ); int index = m_lines.Index(*m_current);
for (int i = 0; i <m_visibleLines; i++) if (node->Previous()) node = node->Previous(); if (index != wxNOT_FOUND)
if (node) OnArrowChar( (wxListLineData*)node->Data(), event.ShiftDown() ); {
index -= m_visibleLines;
if (index < 0) index = 0;
OnArrowChar( &m_lines[index], event.ShiftDown() );
}
} }
break; break;
} }
@@ -2131,9 +2140,14 @@ void wxListMainWindow::OnChar( wxKeyEvent &event )
{ {
if (!(m_mode & wxLC_REPORT)) if (!(m_mode & wxLC_REPORT))
{ {
wxNode *node = m_lines.Member( m_current ); int index = m_lines.Index(*m_current);
for (int i = 0; i <m_visibleLines; i++) if (node->Next()) node = node->Next(); if (index != wxNOT_FOUND)
if (node) OnArrowChar( (wxListLineData*)node->Data(), event.ShiftDown() ); {
index += m_visibleLines;
if ((size_t)index >= m_lines.GetCount())
index = m_lines.GetCount()-1;
OnArrowChar( &m_lines[index], event.ShiftDown() );
}
} }
break; break;
} }
@@ -2160,8 +2174,9 @@ void wxListMainWindow::OnChar( wxKeyEvent &event )
{ {
wxListLineData *oldCurrent = m_current; wxListLineData *oldCurrent = m_current;
m_current->ReverseHilight(); m_current->ReverseHilight();
wxNode *node = m_lines.Member( m_current )->Next(); int index = m_lines.Index( *m_current ) + 1;
if (node) m_current = (wxListLineData*)node->Data(); if ( (size_t)index < m_lines.GetCount() )
m_current = &m_lines[index];
RefreshLine( oldCurrent ); RefreshLine( oldCurrent );
RefreshLine( m_current ); RefreshLine( m_current );
UnfocusLine( oldCurrent ); UnfocusLine( oldCurrent );
@@ -2179,7 +2194,7 @@ void wxListMainWindow::OnChar( wxKeyEvent &event )
m_current->GetItem( 0, le.m_item ); m_current->GetItem( 0, le.m_item );
GetParent()->GetEventHandler()->ProcessEvent( le ); GetParent()->GetEventHandler()->ProcessEvent( le );
break; break;
}*/ }
default: default:
{ {
event.Skip(); event.Skip();