currentItem = null;
void releaseWidget () {	int hwndHeader =  OS.SendMessage (handle, OS.LVM_GETHEADER, 0, 0);	int columnCount = OS.SendMessage (hwndHeader, OS.HDM_GETITEMCOUNT, 0, 0);	if (columnCount == 1 && columns [0] == null) columnCount = 0;	for (int i=0; i<columnCount; i++) {		TableColumn column = columns [i];		if (!column.isDisposed ()) column.releaseResources ();	}	columns = null;	int itemCount = OS.SendMessage (handle, OS.LVM_GETITEMCOUNT, 0, 0);	/*	* Feature in Windows 98.  When there are a large number	* of columns and items in a table (>1000) where each	* of the subitems in the table has a string, it is much	* faster to delete each item with LVM_DELETEITEM rather	* than using LVM_DELETEALLITEMS.  The fix is to detect	* this case and delete the items, one by one.  The fact	* that the fix is only necessary on Windows 98 was	* confirmed using version 5.81 of COMCTL32.DLL on both	* Windows 98 and NT.	*	* NOTE: LVM_DELETEALLITEMS is also sent by the table	* when the table is destroyed.	*/		if (OS.IsWin95 && columnCount > 1) {		/* Turn off redraw and leave it off */		OS.SendMessage (handle, OS.WM_SETREDRAW, 0, 0);		for (int i=itemCount-1; i>=0; --i) {			TableItem item = items [i];			ignoreSelect = ignoreShrink = true;			OS.SendMessage (handle, OS.LVM_DELETEITEM, i, 0);			ignoreSelect = ignoreShrink = false;			if (item != null && !item.isDisposed ()) item.releaseResources ();		}	} else {			for (int i=0; i<itemCount; i++) {			TableItem item = items [i];			if (item != null && !item.isDisposed ()) item.releaseResources ();		}	}	customDraw = false;	items = null;	if (imageList != null) {		OS.SendMessage (handle, OS.LVM_SETIMAGELIST, OS.LVSIL_SMALL, 0);		display.releaseImageList (imageList);	}	imageList = null;	int hOldList = OS.SendMessage (handle, OS.LVM_GETIMAGELIST, OS.LVSIL_STATE, 0);	OS.SendMessage (handle, OS.LVM_SETIMAGELIST, OS.LVSIL_STATE, 0);	if (hOldList != 0) OS.ImageList_Destroy (hOldList);	super.releaseWidget ();}