/* * Getting Status message (Away message) * -1 for XStatus, 1 for Status */ int GetStatusMessage(TCHAR *text, int text_size, PDNCE pdnce, BOOL xstatus_has_priority) { DBVARIANT dbv={0}; BOOL noAwayMsg=FALSE; WORD wStatus=pdnce___GetStatus( pdnce ); text[0] = '\0'; // Hide status text if Offline /// no offline if (wStatus==ID_STATUS_OFFLINE || wStatus==0) noAwayMsg=TRUE; // Get XStatusMsg if (!noAwayMsg &&xstatus_has_priority && pdnce->m_cache_hContact && pdnce->m_cache_cszProto) { // Try to get XStatusMsg if (!ModernGetSettingTString(pdnce->m_cache_hContact, pdnce->m_cache_cszProto, "XStatusMsg", &dbv)) { //lstrcpyn(text, dbv.pszVal, text_size); CopySkipUnprintableChars(text, dbv.ptszVal, text_size-1); ModernDBFreeVariant(&dbv); if (text[0] != '\0') return -1; } } // Get StatusMsg if (pdnce->m_cache_hContact && text[0] == '\0') { if (!ModernGetSettingTString(pdnce->m_cache_hContact, "CList", "StatusMsg", &dbv)) { //lstrcpyn(text, dbv.pszVal, text_size); CopySkipUnprintableChars(text, dbv.ptszVal, text_size-1); ModernDBFreeVariant(&dbv); if (text[0] != '\0') return 1; } } // Get XStatusMsg if (!noAwayMsg && !xstatus_has_priority && pdnce->m_cache_hContact && pdnce->m_cache_cszProto && text[0] == '\0') { // Try to get XStatusMsg if (!ModernGetSettingTString(pdnce->m_cache_hContact, pdnce->m_cache_cszProto, "XStatusMsg", &dbv)) { //lstrcpyn(text, dbv.pszVal, text_size); CopySkipUnprintableChars(text, dbv.ptszVal, text_size-1); ModernDBFreeVariant(&dbv); if (text[0] != '\0') return -1; } } return 1; }
/* * Getting Status name * -1 for XStatus, 1 for Status */ int GetStatusName(TCHAR *text, int text_size, PDNCE pdnce, BOOL xstatus_has_priority) { BOOL noAwayMsg=FALSE; BOOL noXstatus=FALSE; // Hide status text if Offline /// no offline WORD nStatus=pdnce___GetStatus( pdnce ); if ((nStatus==ID_STATUS_OFFLINE || nStatus==0) && g_CluiData.bRemoveAwayMessageForOffline) noAwayMsg=TRUE; if (nStatus==ID_STATUS_OFFLINE || nStatus==0) noXstatus=TRUE; text[0] = '\0'; // Get XStatusName if (!noAwayMsg&& !noXstatus&& xstatus_has_priority && pdnce->m_cache_hContact && pdnce->m_cache_cszProto) { DBVARIANT dbv={0}; if (!ModernGetSettingTString(pdnce->m_cache_hContact, pdnce->m_cache_cszProto, "XStatusName", &dbv)) { //lstrcpyn(text, dbv.pszVal, text_size); CopySkipUnprintableChars(text, dbv.ptszVal, text_size-1); ModernDBFreeVariant(&dbv); if (text[0] != '\0') return -1; } } // Get Status name { TCHAR *tmp = (TCHAR *)CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION, (WPARAM)nStatus, GSMDF_TCHAR_MY); lstrcpyn(text, tmp, text_size); //CopySkipUnprintableChars(text, dbv.pszVal, text_size-1); if (text[0] != '\0') return 1; } // Get XStatusName if (!noAwayMsg && !noXstatus && !xstatus_has_priority && pdnce->m_cache_hContact && pdnce->m_cache_cszProto) { DBVARIANT dbv={0}; if (!ModernGetSettingTString(pdnce->m_cache_hContact, pdnce->m_cache_cszProto, "XStatusName", &dbv)) { //lstrcpyn(text, dbv.pszVal, text_size); CopySkipUnprintableChars(text, dbv.ptszVal, text_size-1); ModernDBFreeVariant(&dbv); if (text[0] != '\0') return -1; } } return 1; }
char* __cdecl ModernGetStringA( HANDLE hContact, const char *szModule, const char *szSetting ) { char *str=NULL; DBVARIANT dbv={0}; ModernGetSettingString(hContact,szModule,szSetting,&dbv); if(dbv.type==DBVT_ASCIIZ) str=mir_strdup(dbv.pszVal); ModernDBFreeVariant(&dbv); return str; }
/* * Get Listening to information */ void GetListeningTo(TCHAR *text, int text_size, PDNCE pdnce) { DBVARIANT dbv={0}; WORD wStatus=pdnce___GetStatus( pdnce ); text[0] = _T('\0'); if (wStatus==ID_STATUS_OFFLINE || wStatus==0) return; if (!ModernGetSettingTString(pdnce->m_cache_hContact, pdnce->m_cache_cszProto, "ListeningTo", &dbv)) { CopySkipUnprintableChars(text, dbv.ptszVal, text_size-1); ModernDBFreeVariant(&dbv); } }
/* * Get the text for First Line */ void Cache_GetFirstLineText(struct ClcData *dat, struct ClcContact *contact) { if (GetCurrentThreadId()!=g_dwMainThreadID) return; PDNCE pdnce=(PDNCE)pcli->pfnGetCacheEntry(contact->hContact); TCHAR *name = pcli->pfnGetContactDisplayName(contact->hContact,0); if (dat->first_line_append_nick && (!dat->force_in_dialog)) { DBVARIANT dbv = {0}; if (!ModernGetSettingTString(pdnce->m_cache_hContact, pdnce->m_cache_cszProto, "Nick", &dbv)) { TCHAR nick[SIZEOF(contact->szText)]; lstrcpyn(nick, dbv.ptszVal, SIZEOF(contact->szText)); ModernDBFreeVariant(&dbv); if (_tcsnicmp(name, nick, lstrlen(name)) == 0) { // They are the same -> use the nick to keep the case lstrcpyn(contact->szText, nick, SIZEOF(contact->szText)); } else if (_tcsnicmp(name, nick, lstrlen(nick)) == 0) { // They are the same -> use the nick to keep the case lstrcpyn(contact->szText, name, SIZEOF(contact->szText)); } else { // Append then mir_sntprintf(contact->szText, SIZEOF(contact->szText), _T("%s - %s"), name, nick); } } else { lstrcpyn(contact->szText, name, SIZEOF(contact->szText)); } } else { lstrcpyn(contact->szText, name, SIZEOF(contact->szText)); } if (!dat->force_in_dialog) { struct SHORTDATA data={0}; Sync(CLUI_SyncGetShortData,(WPARAM)pcli->hwndContactTree,(LPARAM)&data); contact->ssText.ReplaceSmileys(&data, pdnce, contact->szText, dat->first_line_draw_smileys); } }
static int ehhToolBarBackgroundSettingsChanged(WPARAM wParam, LPARAM lParam) { if(tbdat.mtb_hBmpBackground) { DeleteObject(tbdat.mtb_hBmpBackground); tbdat.mtb_hBmpBackground=NULL; } if (g_CluiData.fDisableSkinEngine) { DBVARIANT dbv; tbdat.mtb_bkColour=sttGetColor("ToolBar","BkColour",CLCDEFAULT_BKCOLOUR); if(ModernGetSettingByte(NULL,"ToolBar","UseBitmap",CLCDEFAULT_USEBITMAP)) { if(!ModernGetSettingString(NULL,"ToolBar","BkBitmap",&dbv)) { tbdat.mtb_hBmpBackground=(HBITMAP)CallService(MS_UTILS_LOADBITMAP,0,(LPARAM)dbv.pszVal); ModernDBFreeVariant(&dbv); } } tbdat.mtb_useWinColors = ModernGetSettingByte(NULL, "ToolBar", "UseWinColours", CLCDEFAULT_USEWINDOWSCOLOURS); tbdat.mtb_backgroundBmpUse = ModernGetSettingWord(NULL, "ToolBar", "BkBmpUse", CLCDEFAULT_BKBMPUSE); } PostMessage(pcli->hwndContactList,WM_SIZE,0,0); return 0; }
void Cache_GetAvatar(struct ClcData *dat, struct ClcContact *contact) { int old_pos=contact->avatar_pos; if (g_CluiData.bSTATE!=STATE_NORMAL || (dat->use_avatar_service && !ServiceExists(MS_AV_GETAVATARBITMAP)) ) // workaround for avatar service and other wich destroys service on OK_TOEXIT { contact->avatar_pos = AVATAR_POS_DONT_HAVE; contact->avatar_data = NULL; return; } if (dat->use_avatar_service && ServiceExists(MS_AV_GETAVATARBITMAP)) { if (dat->avatars_show && !ModernGetSettingByte(contact->hContact, "CList", "HideContactAvatar", 0)) { contact->avatar_data = (struct avatarCacheEntry *)CallService(MS_AV_GETAVATARBITMAP, (WPARAM)contact->hContact, 0); if (contact->avatar_data == NULL || contact->avatar_data->cbSize != sizeof(struct avatarCacheEntry) || contact->avatar_data->dwFlags == AVS_BITMAP_EXPIRED) { contact->avatar_data = NULL; } if (contact->avatar_data != NULL) { contact->avatar_data->t_lastAccess = (DWORD)time(NULL); } } else { contact->avatar_data = NULL; } Cache_ProceedAvatarInList(dat, contact); } else { contact->avatar_pos = AVATAR_POS_DONT_HAVE; if (dat->avatars_show && !ModernGetSettingByte(contact->hContact, "CList", "HideContactAvatar", 0)) { DBVARIANT dbv; if (!ModernGetSettingTString(contact->hContact, "ContactPhoto", "File", &dbv)) { HBITMAP hBmp = (HBITMAP) CallService(MS_UTILS_LOADBITMAPT, 0, (LPARAM)dbv.ptszVal); if (hBmp != NULL) { // Make bounds BITMAP bm; if (GetObject(hBmp,sizeof(BITMAP),&bm)) { // Create data... HDC hdc; HBITMAP hDrawBmp,oldBmp; // Make bounds -> keep aspect radio LONG width_clip; LONG height_clip; RECT rc = {0}; // Clipping width and height width_clip = dat->avatars_maxheight_size; height_clip = dat->avatars_maxheight_size; if (height_clip * bm.bmWidth / bm.bmHeight <= width_clip) { width_clip = height_clip * bm.bmWidth / bm.bmHeight; } else { height_clip = width_clip * bm.bmHeight / bm.bmWidth; } // Create objs hdc = CreateCompatibleDC(dat->avatar_cache.hdc); hDrawBmp = ske_CreateDIB32(width_clip, height_clip); oldBmp=(HBITMAP)SelectObject(hdc, hDrawBmp); SetBkMode(hdc,TRANSPARENT); { POINT org; GetBrushOrgEx(hdc, &org); SetStretchBltMode(hdc, HALFTONE); SetBrushOrgEx(hdc, org.x, org.y, NULL); } rc.right = width_clip - 1; rc.bottom = height_clip - 1; // Draw bitmap 8//8 { HDC dcMem = CreateCompatibleDC(hdc); HBITMAP obmp=(HBITMAP)SelectObject(dcMem, hBmp); StretchBlt(hdc, 0, 0, width_clip, height_clip,dcMem, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY); SelectObject(dcMem,obmp); mod_DeleteDC(dcMem); } { RECT rtr={0}; rtr.right=width_clip+1; rtr.bottom=height_clip+1; ske_SetRectOpaque(hdc,&rtr); } hDrawBmp = (HBITMAP)GetCurrentObject(hdc, OBJ_BITMAP); SelectObject(hdc,oldBmp); mod_DeleteDC(hdc); // Add to list if (old_pos >= 0) { ImageArray_ChangeImage(&dat->avatar_cache, hDrawBmp, old_pos); contact->avatar_pos = old_pos; } else { contact->avatar_pos = ImageArray_AddImage(&dat->avatar_cache, hDrawBmp, -1); } DeleteObject(hDrawBmp); } // if (GetObject(hBmp,sizeof(BITMAP),&bm)) DeleteObject(hBmp); } //if (hBmp != NULL) } ModernDBFreeVariant(&dbv); } // Remove avatar if needed if (old_pos >= 0 && contact->avatar_pos == AVATAR_POS_DONT_HAVE) { ImageArray_RemoveImage(&dat->avatar_cache, old_pos); // Update all items ExecuteOnAllContacts(dat, ReduceAvatarPosition, (void *)&old_pos); } if (old_pos==AVATAR_POS_ANIMATED && contact->avatar_pos != AVATAR_POS_ANIMATED) { AniAva_RemoveAvatar( contact->hContact ); } } }
/* * Get the text for specified lines */ int Cache_GetLineText(PDNCE pdnce, int type, LPTSTR text, int text_size, TCHAR *variable_text, BOOL xstatus_has_priority, BOOL show_status_if_no_away, BOOL show_listening_if_no_away, BOOL use_name_and_message_for_xstatus, BOOL pdnce_time_show_only_if_different) { text[0] = '\0'; switch(type) { case TEXT_STATUS: { if (GetStatusName(text, text_size, pdnce, xstatus_has_priority) == -1 && use_name_and_message_for_xstatus) { DBVARIANT dbv={0}; // Try to get XStatusMsg if (!ModernGetSettingTString(pdnce->m_cache_hContact, pdnce->m_cache_cszProto, "XStatusMsg", &dbv)) { if (dbv.ptszVal != NULL && dbv.ptszVal[0] != 0) { TCHAR *tmp = mir_tstrdup(text); mir_sntprintf(text, text_size, TEXT("%s: %s"), tmp, dbv.pszVal); mir_free_and_nill(tmp); CopySkipUnprintableChars(text, text, text_size-1); } ModernDBFreeVariant(&dbv); } } return TEXT_STATUS; } case TEXT_NICKNAME: { if (pdnce->m_cache_hContact && pdnce->m_cache_cszProto) { DBVARIANT dbv={0}; if (!ModernGetSettingTString(pdnce->m_cache_hContact, pdnce->m_cache_cszProto, "Nick", &dbv)) { lstrcpyn(text, dbv.ptszVal, text_size); ModernDBFreeVariant(&dbv); CopySkipUnprintableChars(text, text, text_size-1); } } return TEXT_NICKNAME; } case TEXT_STATUS_MESSAGE: { if (GetStatusMessage(text, text_size, pdnce, xstatus_has_priority) == -1 && use_name_and_message_for_xstatus) { DBVARIANT dbv={0}; // Try to get XStatusName if (!ModernGetSettingTString(pdnce->m_cache_hContact, pdnce->m_cache_cszProto, "XStatusName", &dbv)) { if (dbv.pszVal != NULL && dbv.pszVal[0] != 0) { TCHAR *tmp = mir_tstrdup(text); mir_sntprintf(text, text_size, TEXT("%s: %s"), dbv.pszVal, tmp); mir_free_and_nill(tmp); } CopySkipUnprintableChars(text, text, text_size-1); ModernDBFreeVariant(&dbv); } } else if (use_name_and_message_for_xstatus && xstatus_has_priority) { DBVARIANT dbv={0}; // Try to get XStatusName if (!ModernGetSettingTString(pdnce->m_cache_hContact, pdnce->m_cache_cszProto, "XStatusName", &dbv)) { if (dbv.pszVal != NULL && dbv.pszVal[0] != 0) mir_sntprintf(text, text_size, TEXT("%s"), dbv.pszVal); CopySkipUnprintableChars(text, text, text_size-1); ModernDBFreeVariant(&dbv); } } if (text[0] == '\0') { if (show_listening_if_no_away) { Cache_GetLineText(pdnce, TEXT_LISTENING_TO, text, text_size, variable_text, xstatus_has_priority, 0, 0, use_name_and_message_for_xstatus, pdnce_time_show_only_if_different); if (text[0] != '\0') return TEXT_LISTENING_TO; } if (show_status_if_no_away) { //re-request status if no away return Cache_GetLineText(pdnce, TEXT_STATUS, text, text_size, variable_text, xstatus_has_priority, 0, 0, use_name_and_message_for_xstatus, pdnce_time_show_only_if_different); } } return TEXT_STATUS_MESSAGE; } case TEXT_LISTENING_TO: { GetListeningTo(text, text_size, pdnce); return TEXT_LISTENING_TO; } case TEXT_TEXT: { TCHAR *tmp = variables_parsedup(variable_text, pdnce->m_cache_tcsName, pdnce->m_cache_hContact); lstrcpyn(text, tmp, text_size); if (tmp) free(tmp); CopySkipUnprintableChars(text, text, text_size-1); return TEXT_TEXT; } case TEXT_CONTACT_TIME: { if (pdnce->hTimeZone) { // Get pdnce time text[0] = 0; tmi.printDateTime( pdnce->hTimeZone, _T("t"), text, text_size, 0); } return TEXT_CONTACT_TIME; } } return TEXT_EMPTY; }
void ExtraImage_SetAllExtraIcons(HWND hwndList,HANDLE hContact) { HANDLE hItem; int locApparentMode=0; char * locApparentModeProto=NULL; boolean hcontgiven=FALSE; char *szProto; char *(ImgIndex[64]); int maxpr,count,i; PROTOACCOUNT **accs; pdisplayNameCacheEntry pdnce; int em,pr,sms,a1,a2,w1,c1; int tick=0; g_mutex_bSetAllExtraIconsCycle=1; hcontgiven=(hContact!=0); if (pcli->hwndContactTree==0){return;}; tick=GetTickCount(); if (ImageCreated==FALSE) ExtraImage_ReloadExtraIcons(); SetNewExtraColumnCount(); BOOL hasExtraIconsService = HasExtraIconsService(); if (!hasExtraIconsService) { em=ExtraImage_ExtraIDToColumnNum(EXTRA_ICON_EMAIL); pr=ExtraImage_ExtraIDToColumnNum(EXTRA_ICON_PROTO); sms=ExtraImage_ExtraIDToColumnNum(EXTRA_ICON_SMS); a1=ExtraImage_ExtraIDToColumnNum(EXTRA_ICON_ADV1); a2=ExtraImage_ExtraIDToColumnNum(EXTRA_ICON_ADV2); w1=ExtraImage_ExtraIDToColumnNum(EXTRA_ICON_WEB); c1=ExtraImage_ExtraIDToColumnNum(EXTRA_ICON_CLIENT); memset( ImgIndex, 0, sizeof( ImgIndex ) ); ProtoEnumAccounts( &count, &accs ); maxpr=0; //calc only needed protocols for(i=0;i<count;i++) { if ( !IsAccountEnabled( accs[i] ) || CallProtoService(accs[i]->szModuleName,PS_GETCAPS,PFLAGNUM_2,0)==0) continue; ImgIndex[maxpr]=accs[i]->szModuleName; maxpr++; } } if (hContact==NULL) { hContact=(HANDLE)CallService(MS_DB_CONTACT_FINDFIRST,0,0); } do { szProto=NULL; hItem=hContact; if (hItem==0){continue;}; pdnce=(pdisplayNameCacheEntry)pcli->pfnGetCacheEntry(hItem); if (pdnce==NULL) {continue;}; // szProto=(char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,(WPARAM)hContact,0); szProto=pdnce->m_cache_cszProto; if (!hasExtraIconsService) { { boolean showweb; showweb=FALSE; if (ExtraImage_ExtraIDToColumnNum(EXTRA_ICON_WEB)!=-1) { if (szProto != NULL) { char *homepage; homepage= ModernGetStringA(pdnce->m_cache_hContact,"UserInfo", "Homepage"); if (!homepage) homepage= ModernGetStringA(pdnce->m_cache_hContact,pdnce->m_cache_cszProto, "Homepage"); if (homepage!=NULL) { showweb=TRUE; mir_free_and_nill(homepage); } } SendMessage(hwndList,CLM_SETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(ExtraImage_ExtraIDToColumnNum(EXTRA_ICON_WEB),(showweb)?2:0xFF)); } } { DBVARIANT dbv={0}; boolean showemail; showemail=TRUE; if (ExtraImage_ExtraIDToColumnNum(EXTRA_ICON_EMAIL)!=-1) { if (szProto == NULL || ModernGetSettingString(hContact, szProto, "e-mail",&dbv)) { ModernDBFreeVariant(&dbv); if (ModernGetSettingString(hContact, "UserInfo", "Mye-mail0", &dbv)) showemail=FALSE; } SendMessage(hwndList,CLM_SETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(ExtraImage_ExtraIDToColumnNum(EXTRA_ICON_EMAIL),(showemail)?0:0xFF)); ModernDBFreeVariant(&dbv); } } { DBVARIANT dbv={0}; boolean showsms; showsms=TRUE; if (ExtraImage_ExtraIDToColumnNum(EXTRA_ICON_SMS)!=-1) { if (szProto == NULL || ModernGetSettingString(hContact, szProto, "Cellular",&dbv)) { ModernDBFreeVariant(&dbv); if (ModernGetSettingString(hContact, "UserInfo", "MyPhone0", &dbv)) showsms=FALSE; } SendMessage(hwndList,CLM_SETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(ExtraImage_ExtraIDToColumnNum(EXTRA_ICON_SMS),(showsms)?1:0xFF)); ModernDBFreeVariant(&dbv); } } if(ExtraImage_ExtraIDToColumnNum(EXTRA_ICON_PROTO)!=-1) { for (i=0;i<maxpr;i++) { if(!mir_strcmp(ImgIndex[i],szProto)) { SendMessage(hwndList,CLM_SETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(ExtraImage_ExtraIDToColumnNum(EXTRA_ICON_PROTO),i+3)); break; }; }; }; if(ExtraImage_ExtraIDToColumnNum(EXTRA_ICON_VISMODE)!=-1) { BYTE iconIndex=0xFF; if (szProto != NULL) { if (!ModernGetSettingByte(hContact, szProto, "ChatRoom", 0)) { if (pdnce->ApparentMode==ID_STATUS_OFFLINE) iconIndex=ExtraImageIconsIndex[4]; else if (pdnce->ApparentMode==ID_STATUS_ONLINE) { if (szProto!=locApparentModeProto) { locApparentModeProto=szProto; locApparentMode=CallProtoService(locApparentModeProto,PS_GETSTATUS,0,0); } if(locApparentMode == ID_STATUS_INVISIBLE || ModernGetSettingByte(NULL,"CList","AlwaysShowAlwaysVisIcon",SETTING_ALWAYSVISICON_DEFAULT) == 1) iconIndex=ExtraImageIconsIndex[3]; } } else { if (pdnce->ApparentMode==ID_STATUS_OFFLINE) iconIndex=ExtraImageIconsIndex[5]; else iconIndex=255; } } SendMessage(hwndList,CLM_SETEXTRAIMAGE,(WPARAM)hItem,MAKELPARAM(ExtraImage_ExtraIDToColumnNum(EXTRA_ICON_VISMODE),iconIndex)); } } NotifyEventHooks(g_CluiData.hEventExtraImageApplying,(WPARAM)hContact,0); if (hcontgiven) break; Sleep(0); } while(hContact=(HANDLE)CallService(MS_DB_CONTACT_FINDNEXT,(WPARAM)hContact,0)); tick=GetTickCount()-tick; g_mutex_bSetAllExtraIconsCycle=0; CLUI__cliInvalidateRect(hwndList,NULL,FALSE); Sleep(0); }