static int addKeyBinding(KEYBINDINGDESC *desc) { int i, len; TCHAR *sectionName; TCHAR *actionName; KeyBindingItem *item = (KeyBindingItem *)mir_alloc(sizeof(KeyBindingItem)); ZeroMemory(item, sizeof(KeyBindingItem)); if (desc->flags & KBDF_UNICODE) { #ifdef _UNICODE sectionName = mir_tstrdup(desc->ptszSection); actionName = mir_tstrdup(desc->ptszActionName); #else sectionName = u2a(desc->pwszSection); actionName = u2a(desc->pwszActionName); #endif } else { #ifdef _UNICODE sectionName = a2u(desc->pszSection); actionName = a2u(desc->pszActionName); #else sectionName = mir_tstrdup(desc->ptszSection); actionName = mir_tstrdup(desc->ptszActionName); #endif } len = _tcslen(sectionName) + _tcslen(actionName) + 2; item->fullActionName = (TCHAR *)mir_alloc(len * sizeof(TCHAR)); _tcscpy(item->fullActionName, sectionName); _tcscat(item->fullActionName, _T("/")); _tcscat(item->fullActionName, actionName); item->actionName = actionName; mir_free(sectionName); item->actionGroupName = mir_strdup(desc->pszActionGroup); item->action = desc->action; for (i = 0; i < 5; i++) { item->defaultKey[i] = desc->key[i]; item->key[i] = desc->key[i]; } item->next = keyBindingList; keyBindingList = item; if (item->next != NULL) item->next->prev = item; { DBVARIANT dbv; char *paramName = mir_t2a(item->fullActionName); if ( !DBGetContactSettingString(NULL, "KeyBindings", paramName, &dbv )) { for (i = 0; i < 5; i++) item->key[i] = 0; sscanf(dbv.pszVal, "%X,%X,%X,%X,%X", &item->key[0],&item->key[1],&item->key[2],&item->key[3],&item->key[4]); DBFreeVariant(&dbv); } mir_free(paramName); } return 0; }
// mir_free() the return value void* t2s(const TCHAR *pszStr,DWORD fUnicode,BOOL fMirCp) { if (!fUnicode) return (void*)u2a(pszStr,fMirCp); return (void*)mir_wstrdup(pszStr); }
void JabberDBAddAuthRequest( TCHAR* jid, TCHAR* nick ) { HANDLE hContact = JabberDBCreateContact( jid, NULL, FALSE, TRUE ); JDeleteSetting( hContact, "Hidden" ); //JSetStringT( hContact, "Nick", nick ); #if defined( _UNICODE ) char* szJid = u2a( jid ); char* szNick = u2a( nick ); #else char* szJid = jid; char* szNick = nick; #endif //blob is: uin( DWORD ), hContact( HANDLE ), nick( ASCIIZ ), first( ASCIIZ ), last( ASCIIZ ), email( ASCIIZ ), reason( ASCIIZ ) //blob is: 0( DWORD ), hContact( HANDLE ), nick( ASCIIZ ), ""( ASCIIZ ), ""( ASCIIZ ), email( ASCIIZ ), ""( ASCIIZ ) DBEVENTINFO dbei = {0}; dbei.cbSize = sizeof( DBEVENTINFO ); dbei.szModule = jabberProtoName; dbei.timestamp = ( DWORD )time( NULL ); dbei.flags = 0; dbei.eventType = EVENTTYPE_AUTHREQUEST; dbei.cbBlob = sizeof( DWORD )+ sizeof( HANDLE ) + strlen( szNick ) + strlen( szJid ) + 5; PBYTE pCurBlob = dbei.pBlob = ( PBYTE ) mir_alloc( dbei.cbBlob ); *(( PDWORD ) pCurBlob ) = 0; pCurBlob += sizeof( DWORD ); *(( PHANDLE ) pCurBlob ) = hContact; pCurBlob += sizeof( HANDLE ); strcpy(( char* )pCurBlob, szNick ); pCurBlob += strlen( szNick )+1; *pCurBlob = '\0'; pCurBlob++; //firstName *pCurBlob = '\0'; pCurBlob++; //lastName strcpy(( char* )pCurBlob, szJid ); pCurBlob += strlen( szJid )+1; *pCurBlob = '\0'; //reason JCallService( MS_DB_EVENT_ADD, ( WPARAM ) ( HANDLE ) NULL, ( LPARAM )&dbei ); JabberLog( "Setup DBAUTHREQUEST with nick='" TCHAR_STR_PARAM "' jid='" TCHAR_STR_PARAM "'", szNick, szJid ); #if defined( _UNICODE ) mir_free( szJid ); mir_free( szNick ); #endif }
void GetMenuItemName( PMO_IntMenuItem pMenuItem, char* pszDest, size_t cbDestSize ) { if ( pMenuItem->UniqName) mir_snprintf( pszDest, cbDestSize, "{%s}", pMenuItem->UniqName ); else { #if defined( _UNICODE ) char* name = u2a(pMenuItem->mi.pszName); mir_snprintf( pszDest, cbDestSize, "{%s}", name ); free(name); #else mir_snprintf( pszDest, cbDestSize, "{%s}", pMenuItem->mi.pszName ); #endif } }
static int GetStatusModeDescription(WPARAM wParam,LPARAM lParam) { #ifdef UNICODE if (!(lParam&CNF_UNICODE)) { static char szMode[64]={0}; TCHAR *buf1=(TCHAR*)GetStatusModeDescriptionW(wParam,lParam); char *buf2=u2a(buf1); _snprintf(szMode,sizeof(szMode),"%s",buf2); mir_free(buf2); return (int)szMode; } else #endif return GetStatusModeDescriptionW(wParam,lParam); }
INT_PTR ServiceGetTypeDescription(WPARAM wParam, LPARAM lParam) { /* shutdownType range check */ if (!wParam || (BYTE)wParam > SDSDT_MAX) return 0; /* select description */ TCHAR *pszDesc = (TCHAR*)((lParam&GSTDF_LONGDESC) ? apszLong : apszShort)[wParam - 1]; if (!(lParam&GSTDF_UNTRANSLATED)) pszDesc = TranslateTS(pszDesc); /* convert as needed */ if (!(lParam&GSTDF_UNICODE)) { static char szConvBuf[128]; char *buf = u2a(pszDesc); if (buf == NULL) return 0; mir_strncpy(szConvBuf, buf, sizeof(szConvBuf)); mir_free(buf); return (INT_PTR)szConvBuf; } return (INT_PTR)pszDesc; }
void * AddTempGroup(HWND hwnd,struct ClcData *dat,const TCHAR *szName,DWORD flags,int groupId,int calcTotalMembers) { int i=0; int f=0; TCHAR * szGroupName; DWORD groupFlags; #ifdef UNICODE char *mbuf=u2a((TCHAR *)szName); #else char *mbuf=mir_strdup((char *)szName); #endif if (WildCompare(mbuf,"* Hidden Group",0)) { mir_free(mbuf); if(ServiceExists(MS_MC_ADDTOMETA)) return NULL; else return(&dat->list); } mir_free(mbuf); for(i=1;;i++) { szGroupName=(TCHAR*)CallService(MS_CLIST_GROUPGETNAMET,i,(LPARAM)&groupFlags); if(szGroupName==NULL) break; if (!MyStrCmpiT(szGroupName,szName)) f=1; } if (!f) { char buf[20]; TCHAR b2[255]; void * res=NULL; _snprintf(buf,sizeof(buf),"%d",(i-1)); _sntprintf(b2,sizeof(b2),_T("#%s"),szName); b2[0]=1|GROUPF_EXPANDED; DBWriteContactSettingTString(NULL,"CListGroups",buf,b2); CallService(MS_CLIST_GROUPGETNAMET,i,(LPARAM)&groupFlags); res=AddGroup(hwnd,dat,szName,groupFlags,i,0); return res; } return NULL; }
void * AddTempGroup(HWND hwnd,struct ClcData *dat,const TCHAR *szName,DWORD flags,int groupId,int calcTotalMembers) { int i=0; int f=0; TCHAR * szGroupName; DWORD groupFlags; #ifdef UNICODE char *mbuf=u2a((TCHAR *)szName); #else char *mbuf=mir_strdup((char *)szName); #endif if (WildCompare(mbuf,"-@-HIDDEN-GROUP-@-",0)) { mir_free(mbuf); return NULL; } mir_free(mbuf); for(i=1;;i++) { szGroupName = pcli->pfnGetGroupName(i,&groupFlags); if(szGroupName==NULL) break; if (!mir_tstrcmpi(szGroupName,szName)) f=1; } if (!f) { char buf[20]; TCHAR b2[255]; void * res=NULL; _snprintf(buf,sizeof(buf),"%d",(i-1)); _sntprintf(b2,sizeof(b2),_T("#%s"),szName); b2[0]=1|GROUPF_EXPANDED; DBWriteContactSettingTString(NULL,"CListGroups",buf,b2); pcli->pfnGetGroupName(i,&groupFlags); res=cli_AddGroup(hwnd,dat,szName,groupFlags,i,0); return res; } return NULL; }
void moduleListWM_NOTIFY(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)// hwnd here is to the main window, NOT the treview { switch (((NMHDR *)lParam)->code) { case TVN_ITEMEXPANDINGA: case TVN_ITEMEXPANDINGW: if (populating && ((LPNMTREEVIEW)lParam)->action == TVE_EXPAND) { ModuleTreeInfoStruct *mtis = (ModuleTreeInfoStruct *)((LPNMTREEVIEW)lParam)->itemNew.lParam; if (mtis && (mtis->type == (CONTACT | EMPTY))) { TVINSERTSTRUCT tvi; HTREEITEM item = {0}; ModuleTreeInfoStruct *_lParam; HWND hwnd2Tree = GetDlgItem(hwnd2mainWindow, IDC_MODULES); ModSetLinkLinkItem *module; ModuleSettingLL modlist; MCONTACT hContact = mtis->hContact; mtis->type = CONTACT; if (!EnumModules(&modlist)) { msg(Translate("Error loading module list"), modFullname); break; } module = modlist.first; while (module && hwnd2mainWindow) { if (module->name[0] && !IsModuleEmpty(hContact, module->name)) { tvi.hParent = ((LPNMTREEVIEW)lParam)->itemNew.hItem; tvi.hInsertAfter = TVI_SORT; tvi.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; tvi.item.pszText = module->name; _lParam = (ModuleTreeInfoStruct *)mir_calloc(sizeof(ModuleTreeInfoStruct)); _lParam->hContact = hContact; tvi.item.iImage = 5; tvi.item.iSelectedImage = 6; _lParam->type = KNOWN_MODULE; tvi.item.lParam = (LPARAM)_lParam; TreeView_InsertItem(hwnd2Tree, &tvi); } module = (ModSetLinkLinkItem *)module->next; } FreeModuleSettingLL(&modlist); } } break; case TVN_SELCHANGEDA: case TVN_SELCHANGEDW: { ModuleTreeInfoStruct *mtis; LPNMTREEVIEW pnmtv = (LPNMTREEVIEW)lParam; TVITEM tvi = {0}; char text[264]; MCONTACT hContact; HWND hwnd2Settings = GetDlgItem(hwnd, IDC_SETTINGS); tvi.mask = TVIF_HANDLE | TVIF_PARAM | TVIF_TEXT; tvi.hItem = pnmtv->itemNew.hItem; tvi.pszText = text; tvi.cchTextMax = 264; TreeView_GetItem(pnmtv->hdr.hwndFrom, &tvi); if (tvi.lParam) { mtis = (ModuleTreeInfoStruct *)tvi.lParam; hContact = mtis->hContact; if (mtis->type == STUB) break; if (populating) Select = 0; if (mtis->type == MODULE) { SettingListInfo *info = (SettingListInfo *)GetWindowLongPtr(hwnd2Settings, GWLP_USERDATA); BOOL refresh = 1; if (info) { if (info->hContact == hContact && !mir_strcmp(info->module, text)) refresh = 0; } if (refresh) PopulateSettings(hwnd2Settings, hContact, text); } else if (((mtis->type & CONTACT) == CONTACT && hContact) || (mtis->type == CONTACT_ROOT_ITEM && !hContact)) { char data[32], szProto[256]; int index, loaded, multi = 0; LVITEM lvi = {0}; lvi.mask = LVIF_IMAGE | LVIF_TEXT | LVIF_PARAM; lvi.iImage = 6; ClearListview(hwnd2Settings); SetWindowLongPtr(hwnd2Settings, GWLP_USERDATA, 0); if (himl2) ListView_SetImageList(hwnd2Settings, himl2, LVSIL_SMALL); if (mtis->type == CONTACT_ROOT_ITEM && !hContact) { multi = 1; hContact = db_find_first(); } while (hContact && hwnd2mainWindow) { if (multi) { // filter if (GetValue(hContact, "Protocol", "p", szProto, SIZEOF(szProto))) loaded = IsProtocolLoaded(szProto); else loaded = 0; if ((loaded && Mode == MODE_UNLOADED) || (!loaded && Mode == MODE_LOADED)) { hContact = db_find_next(hContact); continue; } } lvi.iItem = 0; lvi.pszText = (char *)GetContactName(hContact, NULL, FALSE); index = ListView_InsertItem(hwnd2Settings, &lvi); mir_snprintf(data, SIZEOF(data), "0x%08X (%ld)", hContact, hContact); ListView_SetItemText(hwnd2Settings, index, 1, data); ListView_SetItemText(hwnd2Settings, index, 2, Translate("HANDLE")); ListView_SetItemText(hwnd2Settings, index, 3, "0x0004 (4)"); if (!multi) break; hContact = db_find_next(hContact); } } else ClearListview(hwnd2Settings); } else // clear any settings that may be there... ClearListview(hwnd2Settings); } break; //TVN_SELCHANGED: case NM_RCLICK: if (((NMHDR *)lParam)->code == NM_RCLICK) moduleListRightClick(hwnd, wParam, lParam); break; case TVN_BEGINLABELEDITA: // subclass it.. case TVN_BEGINLABELEDITW: { LPNMTVDISPINFO ptvdi = (LPNMTVDISPINFO)lParam; ModuleTreeInfoStruct *mtis = (ModuleTreeInfoStruct *)ptvdi->item.lParam; HWND hwnd2Edit = TreeView_GetEditControl(GetDlgItem(hwnd, IDC_MODULES)); if (!mtis->type || (mtis->type == CONTACT)) { SetWindowLongPtr(hwnd, DWLP_MSGRESULT, TRUE); break; } mir_subclassWindow(hwnd2Edit, ModuleTreeLabelEditSubClassProc); SetWindowLongPtr(hwnd, DWLP_MSGRESULT, FALSE); } break; case TVN_ENDLABELEDITA: case TVN_ENDLABELEDITW: LPNMTVDISPINFO ptvdi = (LPNMTVDISPINFO)lParam; TVITEM tvi = {0}; char text[264]; char *newtext; ModuleTreeInfoStruct *mtis; tvi.mask = TVIF_HANDLE | TVIF_TEXT | TVIF_PARAM; tvi.hItem = ptvdi->item.hItem; tvi.pszText = text; tvi.cchTextMax = 264; TreeView_GetItem(((LPNMHDR)lParam)->hwndFrom, &tvi); mtis = (ModuleTreeInfoStruct *)ptvdi->item.lParam; newtext = u2a((WCHAR *)ptvdi->item.pszText); if (!newtext // edit control failed || !mtis->type // its a root item || mtis->type == CONTACT // its a contact || *newtext == 0) // empty string SetWindowLongPtr(hwnd, DWLP_MSGRESULT, FALSE); else { if (mir_strcmp(tvi.pszText, newtext)) { renameModule(tvi.pszText, newtext, mtis->hContact); findAndRemoveDuplicates(((LPNMHDR)lParam)->hwndFrom, mtis->hContact, newtext); if (TreeView_GetItem(((LPNMHDR)lParam)->hwndFrom, &tvi)) { tvi.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE; tvi.iImage = 1; tvi.iSelectedImage = 2; TreeView_SetItem(((LPNMHDR)lParam)->hwndFrom, &tvi); PopulateSettings(GetDlgItem(hwnd, IDC_SETTINGS), mtis->hContact, newtext); } } SetWindowLongPtr(hwnd, DWLP_MSGRESULT, TRUE); } mir_free(newtext); break; } }