All pastes #503214 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-05-22 19:53 UTC
rendered paste body
static BOOL CALLBACK JabberMucJidListDlgProc( HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam )
{
	switch( msg ) {
	case WM_INITDIALOG:
		{
			// lParam is ( JABBER_MUC_JIDLIST_INFO * )
			LVCOLUMN lvc;
			RECT rc;
			HWND hwndList;

			TranslateDialogDefault( hwndDlg );
			hwndList = GetDlgItem( hwndDlg, IDC_LIST );
			GetClientRect( hwndList, &rc );
			rc.right -= GetSystemMetrics( SM_CXVSCROLL );
			lvc.mask = LVCF_WIDTH;
			lvc.cx = rc.right - 20;
			ListView_InsertColumn( hwndList, 0, &lvc );
			lvc.cx = 20;
			ListView_InsertColumn( hwndList, 1, &lvc );
			//added
			lvc.cx = 40;
			ListView_InsertColumn( hwndList, 2, &lvc );
			// ~added
			SendMessage( hwndDlg, WM_JABBER_REFRESH, 0, lParam );
		}
		return TRUE;
	case WM_JABBER_REFRESH:
		{
			// lParam is ( JABBER_MUC_JIDLIST_INFO * )
			JABBER_MUC_JIDLIST_INFO *jidListInfo;
			XmlNode *iqNode, *queryNode, *itemNode;
			TCHAR* from, *jid, *nick, *localFrom, *jidnick;
			LVITEM lvi;
			HWND hwndList;
			int count, i;
			TCHAR title[256];

			// Clear current GWL_USERDATA, if any
			jidListInfo = ( JABBER_MUC_JIDLIST_INFO * ) GetWindowLong( hwndDlg, GWL_USERDATA );
			if ( jidListInfo != NULL ) {
				if ( jidListInfo->roomJid != NULL )
					mir_free( jidListInfo->roomJid );
				if ( jidListInfo->iqNode != NULL )
					delete jidListInfo->iqNode;
				mir_free( jidListInfo );
			}

			// Clear current displayed list
			hwndList = GetDlgItem( hwndDlg, IDC_LIST );
			count = ListView_GetItemCount( hwndList );
			lvi.mask = LVIF_PARAM;
			lvi.iSubItem = 0;
			for ( i=0; i<count; i++ ) {
				lvi.iItem = i;
				if ( ListView_GetItem( hwndList, &lvi ) == TRUE ) {
					if ( lvi.lParam!=( LPARAM )( -1 ) && lvi.lParam!=( LPARAM )( NULL )) {
						mir_free(( void * ) lvi.lParam );
					}
				}
			}
			ListView_DeleteAllItems( hwndList );

			// Set new GWL_USERDATA
			jidListInfo = ( JABBER_MUC_JIDLIST_INFO * ) lParam;
			SetWindowLong( hwndDlg, GWL_USERDATA, ( LONG ) jidListInfo );

			// Populate displayed list from iqNode
			lstrcpyn( title, TranslateT( "JID List" ), SIZEOF( title ));
			if (( jidListInfo=( JABBER_MUC_JIDLIST_INFO * ) lParam ) != NULL ) {
				if (( iqNode = jidListInfo->iqNode ) != NULL ) {
					if (( from = JabberXmlGetAttrValue( iqNode, "from" )) != NULL ) {
						jidListInfo->roomJid = mir_tstrdup( from );
						localFrom = mir_tstrdup( from );
						mir_sntprintf( title, SIZEOF( title ), _T("%s ( %s )"),
							( jidListInfo->type==MUC_VOICELIST ) ? TranslateT( "Voice List" ) :
							( jidListInfo->type==MUC_MEMBERLIST ) ? TranslateT( "Member List" ) :
							( jidListInfo->type==MUC_MODERATORLIST ) ? TranslateT( "Moderator List" ) :
							( jidListInfo->type==MUC_BANLIST ) ? TranslateT( "Ban List" ) :
							( jidListInfo->type==MUC_ADMINLIST ) ? TranslateT( "Admin List" ) :
							( jidListInfo->type==MUC_OWNERLIST ) ? TranslateT( "Owner List" ) :
							TranslateT( "JID List" ),
							localFrom );
						mir_free( localFrom );
						if (( queryNode=JabberXmlGetChild( iqNode, "query" )) != NULL ) {
							lvi.mask = LVIF_TEXT | LVIF_PARAM;
							lvi.iSubItem = 0;
							lvi.iItem = 0;
							for ( i=0; i<queryNode->numChild; i++ ) {
								if (( itemNode=queryNode->child[i] ) != NULL ) {
									if (( jid=JabberXmlGetAttrValue( itemNode, "jid" )) != NULL ) {
										lvi.pszText = jid;
										lvi.lParam = ( LPARAM )mir_tstrdup( jid );
										ListView_InsertItem( hwndList, &lvi );
									} if (jidListInfo->type==MUC_VOICELIST ) { if (( nick=JabberXmlGetAttrValue( itemNode, "nick" )) != NULL) { mir_sntprintf( jidnick, SIZEOF( jidnick ), _T("%s ( %s )") , jid, nick ); lvi.pszText = jidnick; } } lvi.iItem++; }	}	}	} 
}