// common part of all ctors
void Init();
+ // free memory taken by all attributes
+ void FreeAllAttrs();
+
wxTextCtrl* m_textCtrl; // The control used for editing a label
wxImageList * m_imageListNormal; // The image list for normal icons
wxImageList * m_imageListSmall; // The image list for small icons
}
}
-wxListCtrl::~wxListCtrl()
+void wxListCtrl::FreeAllAttrs()
{
if ( m_hasAnyAttr )
{
{
delete (wxListItemAttr *)node->Data();
}
+
+ m_attrs.Destroy();
+
+ m_hasAnyAttr = FALSE;
}
+}
+wxListCtrl::~wxListCtrl()
+{
if ( m_textCtrl )
{
m_textCtrl->UnsubclassWin();
}
case LVN_DELETEALLITEMS:
- // What's the sense of generating a wxWin event for this when
- // it's absolutely not portable?
- // This is perfectly portable, RR
-#if 1
- eventType = wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS;
+ eventType = wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS;
event.m_itemIndex = -1;
-#endif // 1
- // return TRUE to suppress all additional LVN_DELETEITEM
- // notifications - this makes deleting all items from a list ctrl
- // much faster
- *result = TRUE;
+ FreeAllAttrs();
- break;
+ break;
case LVN_DELETEITEM:
{
if ( !GetEventHandler()->ProcessEvent(event) )
return FALSE;
- if (eventType == wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS)
- {
- // No postprocessing, because we want *return to
- // be TRUE so that no further DeleteItem events
- // are sent, RR.
- return TRUE;
- }
-
// post processing
// ---------------
switch ( (int)nmhdr->code )
{
+ case LVN_DELETEALLITEMS:
+ // always return TRUE to suppress all additional LVN_DELETEITEM
+ // notifications - this makes deleting all items from a list ctrl
+ // much faster
+ *result = TRUE;
+
+ return TRUE;
+
case LVN_GETDISPINFO:
{
LV_DISPINFO *info = (LV_DISPINFO *)lParam;
*result = event.IsAllowed();
return TRUE;
}
- default:
- break;
}
*result = !event.IsAllowed();