int FillFavoritesMenu (HMENU hMenu,int iLimit) { int i, iItems=0; char szBuffer[256]={0}; TCHAR *pszBuffer=NULL; for(i=0;i < iLimit; i++) { if(IsMarkedUserDefSession(i)) { mir_snprintf(szBuffer, SIZEOF(szBuffer), "%s_%u", "UserSessionDsc", i); pszBuffer = DBGetStringT(NULL, __INTERNAL_NAME, szBuffer); if ((pszBuffer = DBGetStringT(NULL, __INTERNAL_NAME, szBuffer))) { AppendMenu(hMenu,MF_STRING,i+1,pszBuffer); iItems++; //TODO: test this mir_free(pszBuffer); pszBuffer=NULL; } } } if(pszBuffer) mir_free(pszBuffer); return iItems; }
int LoadSessionToCombobox (HWND hdlg,BOOL mode,int iLimit,char* pszSetting,int iFirstNum) { int ses_count=iFirstNum,i, index; char szBuffer[256]={0}; TCHAR *pszBuffer=NULL; if(session_list_recovered[0]&&!iFirstNum&&!mode) { index = SendDlgItemMessage(hdlg, IDC_LIST, CB_ADDSTRING, 0, (LPARAM)TranslateT("Session Before Last Crash")); SendDlgItemMessage(hdlg, IDC_LIST, CB_SETITEMDATA, (WPARAM)index, (LPARAM) 256); } for(i=0;i < iLimit; i++) { mir_snprintf(szBuffer, SIZEOF(szBuffer), "%s_%u", pszSetting, i); pszBuffer = DBGetStringT(NULL, __INTERNAL_NAME, szBuffer); if (pszBuffer) { if(!IsMarkedUserDefSession(i+iFirstNum)||mode==1) { index = SendDlgItemMessage(hdlg, IDC_LIST, CB_ADDSTRING, 0, (LPARAM)pszBuffer); SendDlgItemMessage(hdlg, IDC_LIST, CB_SETITEMDATA, (WPARAM)index, (LPARAM) (DWORD)i+iFirstNum); } else { SendDlgItemMessage(hdlg, IDC_LIST, CB_INSERTSTRING, 0, (LPARAM)pszBuffer); SendDlgItemMessage(hdlg, IDC_LIST, CB_SETITEMDATA, (WPARAM)0, (LPARAM) (DWORD)i+iFirstNum); } mir_free(pszBuffer); pszBuffer=NULL; } else { if (i==0) ses_count=iLimit-iFirstNum; break; } } if(pszBuffer)mir_free(pszBuffer); return ses_count; }
struct ClcGroup *AddGroup(HWND hwnd,struct ClcData *dat,const TCHAR *szName,DWORD flags,int groupId,int calcTotalMembers) { TCHAR *pBackslash,*pNextField,szThisField[120-MAXEXTRACOLUMNS]; TCHAR *HiddenGroup=NULL; struct ClcGroup *group=&dat->list; int i,compareResult; ClearRowByIndexCache(); dat->NeedResort=1; if (GetWindowLong(hwnd,GWL_STYLE)&CLS_USEGROUPS) //groups is using if (ServiceExists(MS_MC_GETDEFAULTCONTACT)) //metacontacts dll is loaded if (DBGetContactSettingByte(NULL,"MetaContacts","Enabled",1)); //and enabled { HiddenGroup=DBGetStringT(NULL,"MetaContacts","HiddenGroupName"); //TODO: UNICODE + Hidden groupname // if (!HiddenGroup) strdup("MetaContacts Hidden Group"); if (szName && HiddenGroup) if (!lstrcmp(HiddenGroup,szName)) //group is metahidden { if (HiddenGroup) mir_free(HiddenGroup); return NULL; } } if (HiddenGroup) mir_free(HiddenGroup); if(!(GetWindowLong(hwnd,GWL_STYLE)&CLS_USEGROUPS)) return &dat->list; pNextField=(TCHAR*)szName; do { pBackslash=_tcschr(pNextField,'\\'); if(pBackslash==NULL) { lstrcpyn(szThisField,pNextField,sizeof(szThisField)); pNextField=NULL; } else { lstrcpyn(szThisField,pNextField,min(sizeof(szThisField),pBackslash-pNextField+1)); pNextField=pBackslash+1; } compareResult=1; for(i=0;i<group->contactCount;i++) { if(group->contact[i].type==CLCIT_CONTACT) break; if(group->contact[i].type!=CLCIT_GROUP) continue; compareResult=lstrcmp(szThisField,group->contact[i].szText); if(compareResult==0) { if(pNextField==NULL && flags!=(DWORD)-1) { group->contact[i].groupId=(WORD)groupId; group=group->contact[i].group; group->expanded=(flags&GROUPF_EXPANDED)!=0; group->hideOffline=(flags&GROUPF_HIDEOFFLINE)!=0; group->groupId=groupId; } else group=group->contact[i].group; break; } if(pNextField==NULL && group->contact[i].groupId==0) break; if(groupId && group->contact[i].groupId>groupId) break; } if(compareResult) { if(groupId==0) { return NULL; groupId=lastGroupId++; }//return NULL; i=AddItemToGroup(group,i); group->contact[i].type=CLCIT_GROUP; if (group->contact[i].szText) mir_free(group->contact[i].szText); group->contact[i].szText=mir_strdupT(szThisField); group->contact[i].groupId=(WORD)(pNextField?0:groupId); group->contact[i].group=(struct ClcGroup*)mir_alloc(sizeof(struct ClcGroup)); ZeroMemory(group->contact[i].group, sizeof(struct ClcGroup)); group->contact[i].group->parent=group; group=group->contact[i].group; group->allocedCount=group->contactCount=0; group->contact=NULL; if(flags==(DWORD)-1 || pNextField!=NULL) { group->expanded=0; group->hideOffline=0; } else { group->expanded=(flags&GROUPF_EXPANDED)!=0; group->hideOffline=(flags&GROUPF_HIDEOFFLINE)!=0; } group->groupId=pNextField?0:groupId; group->totalMembers=0; if(flags!=(DWORD)-1 && pNextField==NULL && calcTotalMembers) { HANDLE hContact; //DBVARIANT dbv; int tick; DWORD style=GetWindowLong(hwnd,GWL_STYLE); hContact=(HANDLE)CallService(MS_DB_CONTACT_FINDFIRST,0,0); tick=GetTickCount(); while(hContact) { pdisplayNameCacheEntry cacheEntry; cacheEntry=GetContactFullCacheEntry(hContact); if(cacheEntry->szGroup!=NULL&&lstrlen(cacheEntry->szGroup)!=0) { if(!lstrcmp(cacheEntry->szGroup,szName) && (style&CLS_SHOWHIDDEN || !cacheEntry->Hidden)) group->totalMembers++; //mir_free(dbv.pszVal); } hContact=(HANDLE)CallService(MS_DB_CONTACT_FINDNEXT,(WPARAM)hContact,0); } #ifdef _DEBUG { char buf[255]; tick=GetTickCount()-tick; sprintf(buf,"AddGroup Finds %d\r\n",tick); TRACE(buf); } #endif } } } while(pNextField); ClearRowByIndexCache(); return group; }