rendered paste bodystatic 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++; } } } } }