DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK)
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK)
DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_ACTIVATED)
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_LIST_CACHE_HINT)
// ----------------------------------------------------------------------------
// constants
{
public:
wxListItemData(wxListMainWindow *owner);
- ~wxListItemData() { delete m_attr; delete m_rect; }
+ ~wxListItemData();
void SetItem( const wxListItem &info );
void SetImage( int image ) { m_image = image; }
// initialize the current item if needed
void UpdateCurrent();
+ // delete all items but don't refresh: called from dtor
+ void DoDeleteAllItems();
+
// called when an item is [un]focuded, i.e. becomes [not] current
//
// currently unused
// wxListItemData
//-----------------------------------------------------------------------------
+wxListItemData::~wxListItemData()
+{
+ // in the virtual list control the attributes are managed by the main
+ // program, so don't delete them
+ if ( !m_owner->IsVirtual() )
+ {
+ delete m_attr;
+ }
+
+ delete m_rect;
+}
+
void wxListItemData::Init()
{
m_image = -1;
m_owner = owner;
- if ( owner->HasFlag(wxLC_REPORT) )
+ if ( owner->InReportView() )
{
m_rect = NULL;
}
wxListMainWindow::~wxListMainWindow()
{
- DeleteEverything();
+ DoDeleteAllItems();
delete m_highlightBrush;
wxCoord xOrig, yOrig;
CalcUnscrolledPosition(0, 0, &xOrig, &yOrig);
+ // tell the caller cache to cache the data
+ wxListEvent evCache(wxEVT_COMMAND_LIST_CACHE_HINT, GetParent()->GetId());
+ evCache.SetEventObject( GetParent() );
+ evCache.m_oldItemIndex = visibleFrom;
+ evCache.m_itemIndex = visibleTo;
+ GetParent()->GetEventHandler()->ProcessEvent( evCache );
+
for ( size_t line = visibleFrom; line <= visibleTo; line++ )
{
rectLine = GetLineRect(line);
m_selStore.SetItemCount(count);
m_countVirt = count;
- Refresh();
+ ResetVisibleLinesRange();
+
+ // scrollbars must be reset
+ m_dirty = TRUE;
}
int wxListMainWindow::GetSelectedItemCount()
void wxListMainWindow::RecalculatePositions()
{
- if ( IsEmpty() )
- return;
-
wxClientDC dc( this );
dc.SetFont( GetFont() );
m_columns.DeleteNode( node );
}
-void wxListMainWindow::DeleteAllItems()
+void wxListMainWindow::DoDeleteAllItems()
{
if ( IsEmpty() )
{
return;
}
- m_dirty = TRUE;
-
ResetCurrent();
// to make the deletion of all items faster, we don't send the
{
m_countVirt = 0;
- ResetVisibleLinesRange();
+ m_selStore.Clear();
}
if ( InReportView() )
}
m_lines.Clear();
+}
- m_selStore.Clear();
+void wxListMainWindow::DeleteAllItems()
+{
+ DoDeleteAllItems();
+
+ RecalculatePositions();
}
void wxListMainWindow::DeleteEverything()
m_mainWin->SetItemCount(count);
}
+void wxListCtrl::RefreshItem(long item)
+{
+ m_mainWin->RefreshLine(item);
+}
+
+void wxListCtrl::RefreshItems(long itemFrom, long itemTo)
+{
+ m_mainWin->RefreshLines(itemFrom, itemTo);
+}
+
#endif // wxUSE_LISTCTRL