MaxGui: Clear Listbox still broken? (win32)

BlitzMax Forums/BlitzMax Programming/MaxGui: Clear Listbox still broken? (win32)

Here are the modified functions

void Win32ListBox::clear(){
	int count=SendMessage( _gadget.hwnd(),LVM_GETITEMCOUNT,0,0 );
	for (int i=0;i<count;i++){
		remove(0);
	}
}

void Win32ListBox::insert( int index,BBString *item,BBString *tip,int icon ){
	LVITEM it={LVIF_TEXT};
	it.iItem=index;
	it.pszText=cstr(item);
	if( iconStrip() && icon>=0 ){
		it.mask|=LVIF_IMAGE;
		it.iImage=icon;
	}
	SendMessage( _gadget.hwnd(),LVM_INSERTITEM,0,(LPARAM)&it );
	SendMessage(_gadget.hwnd(),LVM_SETCOLUMNWIDTH,0,-1);
	TOOLINFO ti={sizeof(ti)};
	ti.hwnd=_gadget.hwnd();
	ti.uFlags=TTF_SUBCLASS;	
	int i,count,ExistingTip,PriorExistingTip;
	char buffer[8192];
	count=SendMessage( _gadget.hwnd(),LVM_GETITEMCOUNT,0,0 )-1;
    
	// Move tips
	if (index < count) {
		for (i=count;i>index;i--) {
			ti.lpszText=buffer;
			PriorExistingTip = 0;
			ti.uId=i;
			ExistingTip = SendMessage( _tooltips,TTM_GETTOOLINFO,0,(LPARAM)&ti );
			if (i>0) {
				ti.uId=i-1;
				PriorExistingTip = SendMessage( _tooltips,TTM_GETTOOLINFO,0,(LPARAM)&ti );
			}
			ti.uId=i;
			if ((PriorExistingTip==0) && (ExistingTip==1)) {
				SendMessage( _tooltips,TTM_DELTOOL,0,(LPARAM)&ti );
			}
			else if (PriorExistingTip==1) {
				if (ExistingTip==0) {
					ti.uFlags=TTF_SUBCLASS;	
					SendMessage( _tooltips,TTM_ADDTOOL,0,(LPARAM)&ti );
				}
				else {
					SendMessage( _tooltips,TTM_SETTOOLINFO,0,(LPARAM)&ti );  
				}   
			}
		}         
    	} 
    
	ti.uId=index;
	ExistingTip =  SendMessage( _tooltips,TTM_GETTOOLINFO,0,(LPARAM)&ti );
	if (tip->length ) {
		ti.lpszText=cstr(tip);
		ti.rect.left=LVIR_SELECTBOUNDS;
		SendMessage( _gadget.hwnd(),LVM_GETITEMRECT,ti.uId,(LPARAM)&ti.rect );
		if ((ti.uId > count) || (ExistingTip==0)) {
			SendMessage( _tooltips,TTM_ADDTOOL,0,(LPARAM)&ti );
		}
		else {
			SendMessage( _tooltips,TTM_SETTOOLINFO,0,(LPARAM)&ti );  
		}
	}
	else if (ExistingTip==1){
		SendMessage( _tooltips,TTM_DELTOOL,0,(LPARAM)&ti );
	}
}

void Win32ListBox::modify( int index,BBString *item,BBString *tip,int icon ){
	int count ,ExistingTip;
	char buffer[8192];
	LVITEM it={LVIF_TEXT};
	it.iItem=index;
	it.pszText=cstr(item);
	if( iconStrip() && icon>=0 ){
		it.mask|=LVIF_IMAGE;
		it.iImage=icon;
	}
	SendMessage( _gadget.hwnd(),LVM_SETITEM,0,(LPARAM)&it );
	SendMessage(_gadget.hwnd(),LVM_SETCOLUMNWIDTH,0,-1);
	TOOLINFO ti={sizeof(ti)};
	ti.uFlags=TTF_SUBCLASS;
	ti.hwnd=_gadget.hwnd();
	ti.uId=index;
	if (tip->length) {
    	ti.lpszText=buffer;
    	ti.rect.left=LVIR_SELECTBOUNDS;
    	ExistingTip = SendMessage( _tooltips,TTM_GETTOOLINFO,0,(LPARAM)&ti );
	if (ExistingTip==1) {
    	   	SendMessage( _gadget.hwnd(),LVM_GETITEMRECT,index,(LPARAM)&ti.rect );
    		ti.lpszText=cstr(tip);
    		ti.uFlags=TTF_SUBCLASS;	
		SendMessage( _tooltips,TTM_SETTOOLINFO,0,(LPARAM)&ti );
        }
        else {
		ti.lpszText=cstr(tip); 
		SendMessage( _gadget.hwnd(),LVM_GETITEMRECT,index,(LPARAM)&ti.rect );
		SendMessage( _tooltips,TTM_ADDTOOL,0,(LPARAM)&ti );
        }
	}
	else if(ExistingTip==1) {
		SendMessage( _tooltips,TTM_DELTOOL,0,(LPARAM)&ti );
    }
}

void Win32ListBox::remove( int index ){
	int	i,count,ExistingTip ,NextExistingTip ;//(ZIL)
	char buffer[8192];
	count=SendMessage( _gadget.hwnd(),LVM_GETITEMCOUNT,0,0 );
	TOOLINFO ti={sizeof(ti)};
	ti.hwnd=_gadget.hwnd();
	if (index < count-1) {
		// Move tips
		for (i=index;i<count;i++) {
			ti.lpszText=buffer;
			ti.uId=i;
			ExistingTip = SendMessage( _tooltips,TTM_GETTOOLINFO,0,(LPARAM)&ti );
			ti.uId=i+1;
			NextExistingTip= SendMessage( _tooltips,TTM_GETTOOLINFO,0,(LPARAM)&ti );
			ti.uId=i;
			if (NextExistingTip==1) {
				if (ExistingTip==1) {
					SendMessage( _tooltips,TTM_SETTOOLINFO,0,(LPARAM)&ti );
				}
				else {
					SendMessage( _tooltips,TTM_ADDTOOL,0,(LPARAM)&ti );
				}     
			}
			else if (ExistingTip==1) {
				SendMessage( _tooltips,TTM_DELTOOL,0,(LPARAM)&ti );
			}        
		}
	}
	ti.uId=count-1;
	SendMessage( _tooltips,TTM_DELTOOL,0,(LPARAM)&ti );
	SendMessage( _gadget.hwnd(),LVM_DELETEITEM,(WPARAM)index,0 );
	SendMessage(_gadget.hwnd(),LVM_SETCOLUMNWIDTH,0,-1);
}

void Win32ListBox::adjustTips(){
	int i,count;
	char buffer[8192];
	count=SendMessage( _gadget.hwnd(),LVM_GETITEMCOUNT,0,0 );
	for (i=0;i<count;i++) {
		TOOLINFO ti={sizeof(ti)};
		ti.uFlags=TTF_SUBCLASS;
		ti.hwnd=_gadget.hwnd();
		ti.uId=i;
		ti.lpszText=buffer;
		if (SendMessage( _tooltips,TTM_GETTOOLINFO,0,(LPARAM)&ti ))
		{
			ti.rect.left=LVIR_SELECTBOUNDS;
			SendMessage( _gadget.hwnd(),LVM_GETITEMRECT,i,(LPARAM)&ti.rect );
			SendMessage( _tooltips,TTM_SETTOOLINFO,0,(LPARAM)&ti );
		}
	}
}


It looks the indents have got messed up a bit! : Edit fixed code indents

If you use this I can post the sorting code I have worked on.

Thanks