wxListCtrl::DeleteAllItems() doesn't send notification events (as documented)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4588 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 1999-11-16 13:14:06 +00:00
parent bbdc9a8780
commit bffa1c7746
2 changed files with 135 additions and 122 deletions

View File

@ -140,7 +140,10 @@ Deletes all items and all columns.
\func{bool}{DeleteItem}{\param{long }{item}}
Deletes the specified item.
Deletes the specified item. This function sends the
{\tt wxEVT\_COMMAND\_LIST\_DELETE\_ITEM} event for the item being deleted.
See also: \helpref{DeleteAllItems}{wxlistctrldeleteallitems}
\membersection{wxListCtrl::DeleteAllItems}\label{wxlistctrldeleteallitems}
@ -148,6 +151,11 @@ Deletes the specified item.
Deletes all the items in the list control.
{\bf NB:} This function does {\it not} send the
{\tt wxEVT\_COMMAND\_LIST\_DELETE\_ITEM} event because deleting many items
from the control would be too slow then (unlike
\helpref{DeleteItem}{wxlistctrldeleteitem})
\membersection{wxListCtrl::DeleteColumn}\label{wxlistctrldeletecolumn}
\func{bool}{DeleteColumn}{\param{int }{col}}

View File

@ -311,9 +311,9 @@ void wxListLineData::CalculateSize( wxDC *dc, int spacing )
int w = 0;
int h = 0;
m_owner->GetImageSize( item->GetImage(), w, h );
m_bound_all.width += 4 + w;
if (h > m_bound_all.height) m_bound_all.height = h;
}
m_bound_all.width += 4 + w;
if (h > m_bound_all.height) m_bound_all.height = h;
}
}
break;
}
@ -410,18 +410,18 @@ void wxListLineData::SetPosition( wxDC *dc, int x, int y, int window_width )
{
wxListItemData *item = (wxListItemData*)node->Data();
if (item->HasImage())
{
{
m_bound_icon.x = m_bound_all.x + 2;
m_bound_icon.y = m_bound_all.y + 2;
int w;
int h;
int w;
int h;
m_owner->GetImageSize( item->GetImage(), w, h );
m_bound_icon.width = w;
m_bound_icon.height = h;
m_bound_label.x += 4 + w;
m_bound_label.width -= 4 + w;
}
}
m_bound_label.x += 4 + w;
m_bound_label.width -= 4 + w;
}
}
break;
}
case wxLC_REPORT:
@ -441,23 +441,23 @@ void wxListLineData::SetPosition( wxDC *dc, int x, int y, int window_width )
wxListItemData *item = (wxListItemData*)node->Data();
wxString s;
item->GetText( s );
if (s.IsEmpty()) s = wxT("H");
if (s.IsEmpty()) s = wxT("H");
long lw,lh;
dc->GetTextExtent( s, &lw, &lh );
m_bound_label.width = lw;
m_bound_label.height = lh;
if (item->HasImage())
{
m_bound_label.width = lw;
m_bound_label.height = lh;
if (item->HasImage())
{
m_bound_icon.x = m_bound_all.x + 2;
m_bound_icon.y = m_bound_all.y + 2;
int w;
int h;
int w;
int h;
m_owner->GetImageSize( item->GetImage(), w, h );
m_bound_icon.width = w;
m_bound_icon.height = h;
m_bound_label.x += 4 + w;
}
}
m_bound_label.x += 4 + w;
}
}
break;
}
}
@ -787,15 +787,15 @@ void wxListHeaderWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
wxPaintDC dc( this );
PrepareDC( dc );
#if wxUSE_GENERIC_LIST_EXTENSIONS
if ( m_owner->GetMode() & wxLC_REPORT )
{
int x , y ;
int xpix , ypix ;
m_owner->GetScrollPixelsPerUnit( &xpix , &ypix ) ;
m_owner->ViewStart( &x, &y ) ;
dc.SetDeviceOrigin( -x * xpix, 0 );
}
if ( m_owner->GetMode() & wxLC_REPORT )
{
int x , y ;
int xpix , ypix ;
m_owner->GetScrollPixelsPerUnit( &xpix , &ypix ) ;
m_owner->ViewStart( &x, &y ) ;
dc.SetDeviceOrigin( -x * xpix, 0 );
}
#endif
dc.BeginDrawing();
@ -820,8 +820,8 @@ void wxListHeaderWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
m_owner->GetColumn( i, item );
int cw = item.m_width-2;
#if wxUSE_GENERIC_LIST_EXTENSIONS
if ((i+1 == numColumns) || ( dc.LogicalToDeviceX(x+item.m_width) > w-5))
cw = dc.DeviceToLogicalX(w)-x-1;
if ((i+1 == numColumns) || ( dc.LogicalToDeviceX(x+item.m_width) > w-5))
cw = dc.DeviceToLogicalX(w)-x-1;
#else
if ((i+1 == numColumns) || (x+item.m_width > w-5)) cw = w-x-1;
#endif
@ -905,31 +905,31 @@ void wxListHeaderWindow::OnMouse( wxMouseEvent &event )
hit_border = TRUE;
break;
}
if (x-xpos < 0)
{
break;
}
if (x-xpos < 0)
{
break;
}
m_minX = xpos;
}
if (event.LeftDown())
{
if (hit_border)
{
{
m_isDragging = TRUE;
m_currentX = x;
DrawCurrent();
CaptureMouse();
return;
}
else
{
}
else
{
wxListEvent le( wxEVT_COMMAND_LIST_COL_CLICK, GetParent()->GetId() );
le.SetEventObject( GetParent() );
le.m_col = m_column;
le.m_col = m_column;
GetParent()->GetEventHandler()->ProcessEvent( le );
return;
}
return;
}
}
if (event.Moving())
@ -1003,14 +1003,14 @@ void wxListTextCtrl::OnChar( wxKeyEvent &event )
{
(*m_accept) = TRUE;
(*m_res) = GetValue();
m_owner->SetFocus();
m_owner->SetFocus();
return;
}
if (event.m_keyCode == WXK_ESCAPE)
{
(*m_accept) = FALSE;
(*m_res) = "";
m_owner->SetFocus();
m_owner->SetFocus();
return;
}
event.Skip();
@ -1040,7 +1040,7 @@ BEGIN_EVENT_TABLE(wxListMainWindow,wxScrolledWindow)
EVT_KEY_DOWN (wxListMainWindow::OnKeyDown)
EVT_SET_FOCUS (wxListMainWindow::OnSetFocus)
EVT_KILL_FOCUS (wxListMainWindow::OnKillFocus)
EVT_SCROLLWIN (wxListMainWindow::OnScroll)
EVT_SCROLLWIN (wxListMainWindow::OnScroll)
END_EVENT_TABLE()
wxListMainWindow::wxListMainWindow()
@ -1161,18 +1161,18 @@ void wxListMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
int dummy = 0;
line->GetSize( dummy, lineSpacing );
lineSpacing += 1;
int y_s = m_yScroll*GetScrollPos( wxVERTICAL );
wxNode *node = m_lines.Nth( y_s / lineSpacing );
for (int i = 0; i < m_visibleLines+2; i++)
{
if (!node) break;
for (int i = 0; i < m_visibleLines+2; i++)
{
if (!node) break;
line = (wxListLineData*)node->Data();
line->Draw( &dc );
node = node->Next();
}
}
}
else
{
@ -1335,21 +1335,21 @@ void wxListMainWindow::OnMouse( wxMouseEvent &event )
if (event.Dragging())
{
if (m_dragCount == 0)
m_dragStart = wxPoint(x,y);
m_dragStart = wxPoint(x,y);
m_dragCount++;
if (m_dragCount != 3) return;
int command = wxEVT_COMMAND_LIST_BEGIN_DRAG;
if (event.RightIsDown()) command = wxEVT_COMMAND_LIST_BEGIN_RDRAG;
if (m_dragCount != 3) return;
int command = wxEVT_COMMAND_LIST_BEGIN_DRAG;
if (event.RightIsDown()) command = wxEVT_COMMAND_LIST_BEGIN_RDRAG;
wxListEvent le( command, GetParent()->GetId() );
le.SetEventObject( GetParent() );
le.m_pointDrag = m_dragStart;
GetParent()->GetEventHandler()->ProcessEvent( le );
return;
le.m_pointDrag = m_dragStart;
GetParent()->GetEventHandler()->ProcessEvent( le );
return;
}
else
{
@ -1416,7 +1416,7 @@ void wxListMainWindow::OnMouse( wxMouseEvent &event )
else if (event.ControlDown())
{
m_current = line;
int numOfCurrent = -1;
node = m_lines.First();
while (node)
@ -1426,7 +1426,7 @@ void wxListMainWindow::OnMouse( wxMouseEvent &event )
if (test_line == oldCurrent) break;
node = node->Next();
}
int numOfLine = -1;
node = m_lines.First();
while (node)
@ -1439,11 +1439,11 @@ void wxListMainWindow::OnMouse( wxMouseEvent &event )
if (numOfLine < numOfCurrent)
{
int i = numOfLine;
numOfLine = numOfCurrent;
numOfCurrent = i;
}
int i = numOfLine;
numOfLine = numOfCurrent;
numOfCurrent = i;
}
wxNode *node = m_lines.Nth( numOfCurrent );
for (int i = 0; i <= numOfLine-numOfCurrent; i++)
{
@ -1601,9 +1601,9 @@ void wxListMainWindow::OnChar( wxKeyEvent &event )
{
int steps = 0;
if (m_mode & wxLC_REPORT)
{
steps = m_visibleLines-1;
}
{
steps = m_visibleLines-1;
}
else
{
int pos = 0;
@ -1620,9 +1620,9 @@ void wxListMainWindow::OnChar( wxKeyEvent &event )
{
int steps = 0;
if (m_mode & wxLC_REPORT)
{
steps = m_visibleLines-1;
}
{
steps = m_visibleLines-1;
}
else
{
int pos = 0; wxNode *node = m_lines.First();
@ -1860,25 +1860,25 @@ void wxListMainWindow::SetColumnWidth( int col, int width )
if (n)
{
wxListItemData *item = (wxListItemData*)n->Data();
int current = 0, ix = 0, iy = 0;
long lx = 0, ly = 0;
if (item->HasImage())
{
int current = 0, ix = 0, iy = 0;
long lx = 0, ly = 0;
if (item->HasImage())
{
GetImageSize( item->GetImage(), ix, iy );
current = ix + 5;
}
if (item->HasText())
{
wxString str;
item->GetText( str );
dc.GetTextExtent( str, &lx, &ly );
current += lx;
}
if (current > max) max = current;
current = ix + 5;
}
if (item->HasText())
{
wxString str;
item->GetText( str );
dc.GetTextExtent( str, &lx, &ly );
current += lx;
}
if (current > max) max = current;
}
node = node->Next();
}
width = max+10;
width = max+10;
}
node = m_columns.Nth( col );
@ -1998,11 +1998,11 @@ void wxListMainWindow::SetItemState( long item, long state, long stateMask )
if (oldCurrent) RefreshLine( oldCurrent );
}
bool on = state & wxLIST_STATE_SELECTED;
if (on != line->IsHilighted())
{
if (on != line->IsHilighted())
{
line->Hilight( on );
RefreshLine( line );
}
}
}
}
}
@ -2191,9 +2191,9 @@ void wxListMainWindow::CalculatePositions()
y += lineSpacing; // one pixel blank line between items
node = node->Next();
}
m_visibleLines = clientHeight / lineSpacing;
m_visibleLines = clientHeight / lineSpacing;
#if wxUSE_GENERIC_LIST_EXTENSIONS
SetScrollbars( m_xScroll, m_yScroll, entireWidth / m_xScroll , (entireHeight+15) / m_yScroll, x_scroll_pos , scroll_pos, TRUE );
SetScrollbars( m_xScroll, m_yScroll, entireWidth / m_xScroll , (entireHeight+15) / m_yScroll, x_scroll_pos , scroll_pos, TRUE );
#endif
}
else
@ -2203,7 +2203,7 @@ void wxListMainWindow::CalculatePositions()
// approximated 15 pt for the horizontal scrollbar
GetSize( &clientWidth, &clientHeight );
clientHeight -= 4; // sunken frame
clientHeight -= 4; // sunken frame
int entireWidth = 0;
@ -2214,22 +2214,22 @@ void wxListMainWindow::CalculatePositions()
int y = 5; // painting is done at y-2
int maxWidth = 0;
m_visibleLines = 0;
int m_currentVisibleLines = 0;
int m_currentVisibleLines = 0;
wxNode *node = m_lines.First();
while (node)
{
m_currentVisibleLines++;
m_currentVisibleLines++;
wxListLineData *line = (wxListLineData*)node->Data();
line->CalculateSize( &dc, iconSpacing );
line->SetPosition( &dc, x, y, clientWidth );
line->GetSize( lineWidth, lineHeight );
if (lineWidth > maxWidth) maxWidth = lineWidth;
y += lineSpacing;
if (m_currentVisibleLines > m_visibleLines)
m_visibleLines = m_currentVisibleLines;
if (m_currentVisibleLines > m_visibleLines)
m_visibleLines = m_currentVisibleLines;
if (y+lineSpacing-6 >= clientHeight) // -6 for earlier "line breaking"
{
m_currentVisibleLines = 0;
m_currentVisibleLines = 0;
y = 5;
x += maxWidth+6;
entireWidth += maxWidth+6;
@ -2241,13 +2241,13 @@ void wxListMainWindow::CalculatePositions()
{
clientHeight -= 15; // scrollbar height
m_visibleLines = 0;
m_currentVisibleLines = 0;
m_currentVisibleLines = 0;
break;
}
if (!node) tries = 1; // everything fits, no second try required
}
}
int scroll_pos = GetScrollPos( wxHORIZONTAL );
SetScrollbars( m_xScroll, m_yScroll, (entireWidth+15) / m_xScroll, 0, scroll_pos, 0, TRUE );
}
@ -2316,7 +2316,12 @@ void wxListMainWindow::DeleteAllItems( void )
while (node)
{
wxListLineData *line = (wxListLineData*)node->Data();
DeleteLine( line );
// to make the deletion of all items faster, we don't send the
// notifications in this case: this is compatible with wxMSW and
// documented in DeleteAllItems() description
//DeleteLine( line );
node = node->Next();
}
m_lines.Clear();
@ -2485,19 +2490,19 @@ void wxListMainWindow::SortItems( wxListCtrlCompare fn, long data )
void wxListMainWindow::OnScroll(wxScrollWinEvent& event)
{
wxScrolledWindow::OnScroll( event ) ;
wxScrolledWindow::OnScroll( event ) ;
#if wxUSE_GENERIC_LIST_EXTENSIONS
if (event.GetOrientation() == wxHORIZONTAL && ( m_mode & wxLC_REPORT ))
{
wxListCtrl* lc = wxDynamicCast( GetParent() , wxListCtrl ) ;
if ( lc )
{
lc->m_headerWin->Refresh() ;
wxListCtrl* lc = wxDynamicCast( GetParent() , wxListCtrl ) ;
if ( lc )
{
lc->m_headerWin->Refresh() ;
#ifdef __WXMAC__
lc->m_headerWin->MacUpdateImmediately() ;
lc->m_headerWin->MacUpdateImmediately() ;
#endif
}
}
}
#endif
}
@ -2659,15 +2664,15 @@ void wxListCtrl::SetWindowStyleFlag( long flag )
if (!m_headerWin)
{
m_headerWin = new wxListHeaderWindow( this, -1, m_mainWin,
wxPoint(0,0), wxSize(width,23), wxTAB_TRAVERSAL );
if (HasFlag(wxLC_NO_HEADER))
m_headerWin->Show( FALSE );
wxPoint(0,0), wxSize(width,23), wxTAB_TRAVERSAL );
if (HasFlag(wxLC_NO_HEADER))
m_headerWin->Show( FALSE );
}
else
{
if (flag & wxLC_NO_HEADER)
m_headerWin->Show( FALSE );
else
if (flag & wxLC_NO_HEADER)
m_headerWin->Show( FALSE );
else
m_headerWin->Show( TRUE );
}
}
@ -2678,7 +2683,7 @@ void wxListCtrl::SetWindowStyleFlag( long flag )
{
m_headerWin->Show( FALSE );
}
}
}
}
wxWindow::SetWindowStyleFlag( flag );
@ -2901,7 +2906,7 @@ bool wxListCtrl::DeleteAllColumns()
{
for ( size_t n = 0; n < m_mainWin->m_columns.GetCount(); n++ )
DeleteColumn(n);
return TRUE;
}