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++; } } } }
}