INT_PTR CALLBACK DlgProcSoundUIPage(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { static HANDLE hContact = NULL; switch (msg) { case WM_INITDIALOG: { TranslateDialogDefault(hwndDlg); hContact = (HANDLE)lParam; char *szProto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); HWND hList = GetDlgItem(hwndDlg, IDC_INDSNDLIST); ListView_SetImageList(hList, GetStatusIconsImgList(szProto), LVSIL_SMALL); ListView_SetExtendedListViewStyleEx(hList, LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP, LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP); RECT rc = {0}; GetClientRect(hList, &rc); LV_COLUMN lvc = {0}; lvc.mask = LVCF_WIDTH | LVCF_TEXT; lvc.cx = STATUS_COLUMN; lvc.pszText = TranslateT("Status"); ListView_InsertColumn(hList, 0, &lvc); lvc.cx = rc.right - STATUS_COLUMN - GetSystemMetrics(SM_CXVSCROLL); lvc.pszText = TranslateT("Sound for the status"); ListView_InsertColumn(hList, 1, &lvc); if (szProto) { DBVARIANT dbv; TCHAR buff[MAX_PATH]; for (int i = ID_STATUS_MAX; i >= ID_STATUS_MIN; i--) { int flags = CallProtoService(szProto, PS_GETCAPS, PFLAGNUM_2, 0); if (flags == 0) flags = PF2_ONLINE|PF2_INVISIBLE|PF2_SHORTAWAY|PF2_LONGAWAY|PF2_LIGHTDND|PF2_HEAVYDND|PF2_FREECHAT|PF2_OUTTOLUNCH|PF2_ONTHEPHONE; if ((flags & Proto_Status2Flag(i)) || i == ID_STATUS_OFFLINE) { LV_ITEM lvi = {0}; lvi.mask = LVIF_TEXT | LVIF_PARAM | LVIF_IMAGE; lvi.iItem = 0; lvi.iSubItem = 0; lvi.iImage = Index(i); lvi.lParam = (LPARAM)i; lvi.pszText = TranslateTS(StatusList[Index(i)].lpzStandardText); lvi.iItem = ListView_InsertItem(hList, &lvi); if (!DBGetContactSettingTString(hContact, MODULE, StatusList[Index(i)].lpzSkinSoundName, &dbv)) { _tcscpy(buff, dbv.ptszVal); DBFreeVariant(&dbv); } else _tcscpy(buff, TranslateT(DEFAULT_SOUND)); ListView_SetItemText(hList, lvi.iItem, 1, buff); } } LV_ITEM lvi = {0}; lvi.mask = LVIF_TEXT | LVIF_PARAM | LVIF_IMAGE; lvi.iItem = 0; lvi.iSubItem = 0; lvi.iImage = Index(ID_STATUS_MAX) + 1; // additional icon lvi.lParam = (LPARAM)ID_STATUS_FROMOFFLINE; lvi.pszText = TranslateT("From offline"); lvi.iItem = ListView_InsertItem(hList, &lvi); if (!DBGetContactSettingTString(hContact, MODULE, "UserFromOffline", &dbv)) { _tcscpy(buff, dbv.ptszVal); DBFreeVariant(&dbv); } else _tcscpy(buff, TranslateT(DEFAULT_SOUND)); ListView_SetItemText(hList, lvi.iItem, 1, buff); } CheckDlgButton(hwndDlg, IDC_CHECK_NOTIFYSOUNDS, DBGetContactSettingByte(hContact, MODULE, "EnableSounds", 1)); CheckDlgButton(hwndDlg, IDC_CHECK_NOTIFYPOPUPS, DBGetContactSettingByte(hContact, MODULE, "EnablePopups", 1)); ShowWindow(GetDlgItem(hwndDlg, IDC_INDSNDLIST), opt.UseIndSnd ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hwndDlg, IDC_TEXT_ENABLE_IS), opt.UseIndSnd ? SW_HIDE : SW_SHOW); ShowWindow(GetDlgItem(hwndDlg, IDC_CHANGE), opt.UseIndSnd ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hwndDlg, IDC_PREVIEW), opt.UseIndSnd ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hwndDlg, IDC_DELETE), opt.UseIndSnd ? SW_SHOW : SW_HIDE); return TRUE; } case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_PREVIEW: { HWND hList = GetDlgItem(hwndDlg, IDC_INDSNDLIST); if (ListView_GetSelectionMark(hList) != -1) PreviewSound(hList); break; } case IDC_CHANGE: { HWND hList = GetDlgItem(hwndDlg, IDC_INDSNDLIST); int iSel = ListView_GetNextItem(GetDlgItem(hwndDlg, IDC_INDSNDLIST), -1, LVNI_SELECTED); if (iSel != -1) { TCHAR stzFilePath[MAX_PATH]; if (SelectSound(hwndDlg, stzFilePath) != NULL) { iSel = -1; while ((iSel = ListView_GetNextItem(hList, iSel, LVNI_SELECTED)) != -1) ListView_SetItemText(hList, iSel, 1, stzFilePath); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } } break; } case IDC_DELETE: { HWND hList = GetDlgItem(hwndDlg, IDC_INDSNDLIST); if (ListView_GetSelectionMark(hList) != -1) { if (RemoveSoundFromList(GetDlgItem(hwndDlg, IDC_INDSNDLIST))) SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } break; } case IDC_CHECK_NOTIFYSOUNDS: { DBWriteContactSettingByte(hContact, MODULE, "EnableSounds", IsDlgButtonChecked(hwndDlg, IDC_CHECK_NOTIFYSOUNDS) ? 1 : 0); break; } case IDC_CHECK_NOTIFYPOPUPS: { DBWriteContactSettingByte(hContact, MODULE, "EnablePopups", IsDlgButtonChecked(hwndDlg, IDC_CHECK_NOTIFYPOPUPS) ? 1 : 0); break; } } break; } case WM_NOTIFY: { LPNMHDR pParam = (LPNMHDR)lParam; if (pParam->code == PSN_APPLY) { TCHAR buff[MAX_PATH]; HWND hList = GetDlgItem(hwndDlg, IDC_INDSNDLIST); LVITEM lvi = {0}; lvi.mask = LVIF_PARAM; //Cycle through the list reading the text associated to each status. for (lvi.iItem = ListView_GetItemCount(hList) - 1; lvi.iItem >= 0; lvi.iItem--) { ListView_GetItem(hList, &lvi); ListView_GetItemText(hList, lvi.iItem, 1, buff, SIZEOF(buff)); if (!_tcscmp(buff, TranslateT(DEFAULT_SOUND))) { if (lvi.lParam == ID_STATUS_FROMOFFLINE) DBDeleteContactSetting(hContact, MODULE, "UserFromOffline"); else DBDeleteContactSetting(hContact, MODULE, StatusList[Index(lvi.lParam)].lpzSkinSoundName); } else { TCHAR stzSoundPath[MAX_PATH] = { 0 }; CallService(MS_UTILS_PATHTORELATIVET, (WPARAM)buff, (LPARAM)stzSoundPath); if (lvi.lParam == ID_STATUS_FROMOFFLINE) DBWriteContactSettingTString(hContact, MODULE, "UserFromOffline", stzSoundPath); else DBWriteContactSettingTString(hContact, MODULE, StatusList[Index(lvi.lParam)].lpzSkinSoundName, stzSoundPath); } } return TRUE; } int hlpControlID = (int)wParam; switch (hlpControlID) { case IDC_INDSNDLIST: { if (pParam->code == NM_DBLCLK) { TCHAR stzFilePath[MAX_PATH]; if (SelectSound(hwndDlg, stzFilePath) != NULL) { int iSel = -1; HWND hList = GetDlgItem(hwndDlg, IDC_INDSNDLIST); while ((iSel = ListView_GetNextItem(hList, iSel, LVNI_SELECTED)) != -1) ListView_SetItemText(hList, iSel, 1, stzFilePath); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); } return TRUE; } else if (pParam->code == LVN_KEYDOWN) { LPNMLVKEYDOWN pnkd = (LPNMLVKEYDOWN)lParam; if (pnkd->wVKey == VK_DELETE) RemoveSoundFromList(GetDlgItem(hwndDlg, IDC_INDSNDLIST)); } break; } } break; } } return FALSE; }
int CJabberProto::JGetStringT( HANDLE hContact, char* valueName, DBVARIANT* dbv ) { return DBGetContactSettingTString( hContact, m_szModuleName, valueName, dbv ); }
INT_PTR CALLBACK DlgProcRecvFile(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { struct FileDlgData *dat; dat=(struct FileDlgData*)GetWindowLongPtr(hwndDlg,GWLP_USERDATA); switch (msg) { case WM_INITDIALOG: { TCHAR *contactName; TCHAR szPath[450]; CLISTEVENT* cle = (CLISTEVENT*)lParam; TranslateDialogDefault(hwndDlg); dat=(struct FileDlgData*)mir_calloc(sizeof(struct FileDlgData)); SetWindowLongPtr(hwndDlg,GWLP_USERDATA,(LONG_PTR)dat); dat->hContact = cle->hContact; dat->hDbEvent = cle->hDbEvent; dat->hPreshutdownEvent = HookEventMessage(ME_SYSTEM_PRESHUTDOWN,hwndDlg,M_PRESHUTDOWN); dat->dwTicks = GetTickCount(); EnumChildWindows(hwndDlg,ClipSiblingsChildEnumProc,0); Window_SetIcon_IcoLib(hwndDlg, SKINICON_EVENT_FILE); Button_SetIcon_IcoLib(hwndDlg, IDC_ADD, SKINICON_OTHER_ADDCONTACT, LPGEN("Add Contact Permanently to List")); Button_SetIcon_IcoLib(hwndDlg, IDC_DETAILS, SKINICON_OTHER_USERDETAILS, LPGEN("View User's Details")); Button_SetIcon_IcoLib(hwndDlg, IDC_HISTORY, SKINICON_OTHER_HISTORY, LPGEN("View User's History")); Button_SetIcon_IcoLib(hwndDlg, IDC_USERMENU, SKINICON_OTHER_DOWNARROW, LPGEN("User Menu")); contactName = cli.pfnGetContactDisplayName( dat->hContact, 0 ); SetDlgItemText(hwndDlg,IDC_FROM,contactName); GetContactReceivedFilesDir(dat->hContact,szPath,SIZEOF(szPath),TRUE); SetDlgItemText(hwndDlg,IDC_FILEDIR,szPath); { int i; char idstr[32]; DBVARIANT dbv; if (shAutoComplete) shAutoComplete(GetWindow(GetDlgItem(hwndDlg,IDC_FILEDIR),GW_CHILD),1); for(i=0;i<MAX_MRU_DIRS;i++) { mir_snprintf(idstr, SIZEOF(idstr), "MruDir%d",i); if(DBGetContactSettingTString(NULL,"SRFile",idstr,&dbv)) break; SendDlgItemMessage(hwndDlg,IDC_FILEDIR,CB_ADDSTRING,0,(LPARAM)dbv.ptszVal); DBFreeVariant(&dbv); } } CallService(MS_DB_EVENT_MARKREAD,(WPARAM)dat->hContact,(LPARAM)dat->hDbEvent); { DBEVENTINFO dbei={0}; TCHAR datetimestr[64]; char buf[540]; dbei.cbSize=sizeof(dbei); dbei.cbBlob=CallService(MS_DB_EVENT_GETBLOBSIZE,(WPARAM)dat->hDbEvent,0); dbei.pBlob=(PBYTE)mir_alloc(dbei.cbBlob); CallService(MS_DB_EVENT_GET,(WPARAM)dat->hDbEvent,(LPARAM)&dbei); dat->fs = cle->lParam ? (HANDLE)cle->lParam : (HANDLE)*(PDWORD)dbei.pBlob; lstrcpynA(buf, (char*)dbei.pBlob+4, min(dbei.cbBlob+1,SIZEOF(buf))); TCHAR* ptszFileName = DbGetEventStringT( &dbei, buf ); SetDlgItemText(hwndDlg,IDC_FILENAMES,ptszFileName); mir_free(ptszFileName); lstrcpynA(buf, (char*)dbei.pBlob+4+strlen((char*)dbei.pBlob+4)+1, min((int)(dbei.cbBlob-4-strlen((char*)dbei.pBlob+4)),SIZEOF(buf))); TCHAR* ptszDescription = DbGetEventStringT( &dbei, buf ); SetDlgItemText(hwndDlg,IDC_MSG,ptszDescription); mir_free(ptszDescription); mir_free(dbei.pBlob); tmi.printTimeStamp(NULL, dbei.timestamp, _T("t d"), datetimestr, SIZEOF(datetimestr), 0); SetDlgItemText(hwndDlg, IDC_DATE, datetimestr); } { char* szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)dat->hContact, 0); if (szProto) { CONTACTINFO ci; int hasName = 0; char buf[128]; ZeroMemory(&ci,sizeof(ci)); ci.cbSize = sizeof(ci); ci.hContact = dat->hContact; ci.szProto = szProto; ci.dwFlag = CNF_UNIQUEID; if (!CallService(MS_CONTACT_GETCONTACTINFO,0,(LPARAM)&ci)) { switch(ci.type) { case CNFT_ASCIIZ: hasName = 1; mir_snprintf(buf, SIZEOF(buf), "%s", ci.pszVal); mir_free(ci.pszVal); break; case CNFT_DWORD: hasName = 1; mir_snprintf(buf, SIZEOF(buf),"%u",ci.dVal); break; } } if (hasName) SetDlgItemTextA(hwndDlg, IDC_NAME, buf ); else SetDlgItemText(hwndDlg, IDC_NAME, contactName); } } if(DBGetContactSettingByte(dat->hContact,"CList","NotOnList",0)) { RECT rcBtn1,rcBtn2,rcDateCtrl; GetWindowRect(GetDlgItem(hwndDlg,IDC_ADD),&rcBtn1); GetWindowRect(GetDlgItem(hwndDlg,IDC_USERMENU),&rcBtn2); GetWindowRect(GetDlgItem(hwndDlg,IDC_DATE),&rcDateCtrl); SetWindowPos(GetDlgItem(hwndDlg,IDC_DATE),0,0,0,rcDateCtrl.right-rcDateCtrl.left-(rcBtn2.left-rcBtn1.left),rcDateCtrl.bottom-rcDateCtrl.top,SWP_NOZORDER|SWP_NOMOVE); } else if(DBGetContactSettingByte(NULL,"SRFile","AutoAccept",0)) { //don't check auto-min here to fix BUG#647620 PostMessage(hwndDlg,WM_COMMAND,MAKEWPARAM(IDOK,BN_CLICKED),(LPARAM)GetDlgItem(hwndDlg,IDOK)); } if(!DBGetContactSettingByte(dat->hContact,"CList","NotOnList",0)) ShowWindow(GetDlgItem(hwndDlg, IDC_ADD),SW_HIDE); return TRUE; } case WM_MEASUREITEM: return CallService(MS_CLIST_MENUMEASUREITEM,wParam,lParam); case WM_DRAWITEM: { LPDRAWITEMSTRUCT dis=(LPDRAWITEMSTRUCT)lParam; if(dis->hwndItem==GetDlgItem(hwndDlg, IDC_PROTOCOL)) { char *szProto; szProto=(char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,(WPARAM)dat->hContact,0); if (szProto) { HICON hIcon; hIcon=(HICON)CallProtoService(szProto,PS_LOADICON,PLI_PROTOCOL|PLIF_SMALL,0); if (hIcon) { DrawIconEx(dis->hDC,dis->rcItem.left,dis->rcItem.top,hIcon,GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),0,NULL,DI_NORMAL); DestroyIcon(hIcon); } } } } return CallService(MS_CLIST_MENUDRAWITEM,wParam,lParam); case WM_COMMAND: if ( CallService(MS_CLIST_MENUPROCESSCOMMAND, MAKEWPARAM(LOWORD(wParam),MPCF_CONTACTMENU), (LPARAM)dat->hContact )) break; switch ( LOWORD( wParam )) { case IDC_FILEDIRBROWSE: { TCHAR szDirName[MAX_PATH],szExistingDirName[MAX_PATH]; GetDlgItemText(hwndDlg,IDC_FILEDIR,szDirName,SIZEOF(szDirName)); GetLowestExistingDirName(szDirName,szExistingDirName,SIZEOF(szExistingDirName)); if(BrowseForFolder(hwndDlg,szExistingDirName)) SetDlgItemText(hwndDlg,IDC_FILEDIR,szExistingDirName); } break; case IDOK: { //most recently used directories TCHAR szRecvDir[MAX_PATH],szDefaultRecvDir[MAX_PATH]; GetDlgItemText(hwndDlg,IDC_FILEDIR,szRecvDir,SIZEOF(szRecvDir)); RemoveInvalidPathChars(szRecvDir); GetContactReceivedFilesDir(NULL,szDefaultRecvDir,SIZEOF(szDefaultRecvDir),TRUE); if(_tcsnicmp(szRecvDir,szDefaultRecvDir,lstrlen(szDefaultRecvDir))) { char idstr[32]; int i; DBVARIANT dbv; for(i=MAX_MRU_DIRS-2;i>=0;i--) { mir_snprintf(idstr, SIZEOF(idstr), "MruDir%d",i); if(DBGetContactSettingTString(NULL,"SRFile",idstr,&dbv)) continue; mir_snprintf(idstr, SIZEOF(idstr), "MruDir%d",i+1); DBWriteContactSettingTString(NULL,"SRFile",idstr,dbv.ptszVal); DBFreeVariant(&dbv); } DBWriteContactSettingTString(NULL,"SRFile",idstr,szRecvDir); } } EnableWindow(GetDlgItem(hwndDlg,IDC_FILENAMES),FALSE); EnableWindow(GetDlgItem(hwndDlg,IDC_MSG),FALSE); EnableWindow(GetDlgItem(hwndDlg,IDC_FILEDIR),FALSE); EnableWindow(GetDlgItem(hwndDlg,IDC_FILEDIRBROWSE),FALSE); GetDlgItemText(hwndDlg,IDC_FILEDIR,dat->szSavePath,SIZEOF(dat->szSavePath)); GetDlgItemText(hwndDlg,IDC_FILE,dat->szFilenames,SIZEOF(dat->szFilenames)); GetDlgItemText(hwndDlg,IDC_MSG,dat->szMsg,SIZEOF(dat->szMsg)); dat->hwndTransfer = FtMgr_AddTransfer(dat); SetWindowLongPtr( hwndDlg, GWLP_USERDATA, 0); //check for auto-minimize here to fix BUG#647620 if(DBGetContactSettingByte(NULL,"SRFile","AutoAccept",0) && DBGetContactSettingByte(NULL,"SRFile","AutoMin",0)) { ShowWindow(hwndDlg,SW_HIDE); ShowWindow(hwndDlg,SW_SHOWMINNOACTIVE); } DestroyWindow(hwndDlg); break; case IDCANCEL: if (dat->fs) CallContactService(dat->hContact,PSS_FILEDENYT,(WPARAM)dat->fs,(LPARAM)TranslateT("Cancelled")); dat->fs=NULL; /* the protocol will free the handle */ DestroyWindow(hwndDlg); break; case IDC_ADD: { ADDCONTACTSTRUCT acs={0}; acs.handle=dat->hContact; acs.handleType=HANDLE_CONTACT; acs.szProto=""; CallService(MS_ADDCONTACT_SHOW,(WPARAM)hwndDlg,(LPARAM)&acs); if(!DBGetContactSettingByte(dat->hContact,"CList","NotOnList",0)) ShowWindow(GetDlgItem(hwndDlg,IDC_ADD), SW_HIDE); } break; case IDC_USERMENU: { RECT rc; HMENU hMenu=(HMENU)CallService(MS_CLIST_MENUBUILDCONTACT,(WPARAM)dat->hContact,0); GetWindowRect((HWND)lParam,&rc); TrackPopupMenu(hMenu,0,rc.left,rc.bottom,0,hwndDlg,NULL); DestroyMenu(hMenu); } break; case IDC_DETAILS: CallService(MS_USERINFO_SHOWDIALOG,(WPARAM)dat->hContact,0); break; case IDC_HISTORY: CallService(MS_HISTORY_SHOWCONTACTHISTORY,(WPARAM)dat->hContact,0); break; } break; case WM_DESTROY: Window_FreeIcon_IcoLib(hwndDlg); Button_FreeIcon_IcoLib(hwndDlg,IDC_ADD); Button_FreeIcon_IcoLib(hwndDlg,IDC_DETAILS); Button_FreeIcon_IcoLib(hwndDlg,IDC_HISTORY); Button_FreeIcon_IcoLib(hwndDlg,IDC_USERMENU); if ( dat ) FreeFileDlgData( dat ); break; } return FALSE; }
int LoadSkinIcons(void) { SKINICONDESC sid; int i, j = 0; char iconName[MAX_PATH], moduleName[MAX_PATH]; TCHAR modulePath[MAX_PATH]; DBVARIANT dbv; // // Perform "1st-time running import" for ( i = 0; i < SIZEOF(mainIcons); i++ ) { _itoa( mainIcons[i].id, moduleName, 10 ); if ( DBGetContactSettingTString( NULL, "Icons", moduleName, &dbv )) break; mir_snprintf( iconName, SIZEOF(iconName), "%s%d", mainIconsFmt, i ); DBWriteContactSettingTString( NULL, "SkinIcons", iconName, dbv.ptszVal ); DBFreeVariant( &dbv ); DBDeleteContactSetting( NULL, "Icons", moduleName ); } for ( ;; ) { // get the next protocol name moduleName[0] = 'p'; moduleName[1] = 0; _itoa( j++, moduleName+1, 100 ); if ( DBGetContactSettingTString( NULL, "Icons", moduleName, &dbv )) break; DBDeleteContactSetting( NULL, "Icons", moduleName ); // make old skinicons' prefix mir_snprintf( moduleName, SIZEOF(moduleName), TCHAR_STR_PARAM, dbv.ptszVal ); // make IcoLib's prefix mir_snprintf( iconName, SIZEOF(iconName), "%s" TCHAR_STR_PARAM, statusIconsFmt, dbv.ptszVal ); convertOneProtocol( moduleName, iconName ); DBFreeVariant( &dbv ); } moduleName[0] = 0; strcpy(iconName, "core_status_" GLOBAL_PROTO_NAME); convertOneProtocol( moduleName, iconName ); CreateServiceFunction( MS_SKIN_LOADICON, sttLoadSkinIcon ); CreateServiceFunction( MS_SKIN_LOADPROTOICON, sttLoadSkinProtoIcon ); CreateServiceFunction( MS_SKIN_LOADPROTOICONBIG, sttLoadSkinProtoIconBig ); ZeroMemory( &sid, sizeof(sid) ); sid.cbSize = sizeof(sid); GetModuleFileName(NULL, modulePath, SIZEOF(modulePath)); sid.ptszDefaultFile = modulePath; sid.flags = SIDF_PATH_TCHAR; sid.pszName = iconName; // // Add main icons to list // for ( i = 0; i < SIZEOF(mainIcons); i++ ) { mir_snprintf( iconName, SIZEOF(iconName), "%s%d", mainIconsFmt, i ); sid.pszSection = mainIcons[i].section == NULL ? "Main Icons" : (char*)mainIcons[i].section; sid.pszDescription = (char*)mainIcons[i].description; sid.iDefaultIndex = mainIcons[i].resource_id; hMainIcons[i] = IcoLib_AddNewIcon( &sid ); } // // Add global icons to list // sid.pszSection = PROTOCOLS_PREFIX "Global"; // // Asterisk is used, to avoid conflict with proto-plugins // 'coz users can't rename it to name with '*' for ( i = 0; i < SIZEOF(statusIcons); i++ ) { mir_snprintf( iconName, SIZEOF(iconName), "%s%s%d", statusIconsFmt, GLOBAL_PROTO_NAME, i ); sid.pszName = iconName; sid.pszDescription = (char*)statusIcons[i].description; sid.iDefaultIndex = statusIcons[i].resource_id; hStatusIcons[i] = IcoLib_AddNewIcon( &sid ); } return 0; }
INT_PTR cfg::getTString(const HANDLE hContact, const char *szModule, const char *szSetting, DBVARIANT *dbv) { return(DBGetContactSettingTString(hContact, szModule, szSetting, dbv)); }
static int BuildTree(HWND hwndDlg,int MenuObjectId, BOOL bReread) { char menuItemName[256],MenuNameItems[256]; char buf[256]; FreeTreeData( hwndDlg ); TreeView_DeleteAllItems(GetDlgItem(hwndDlg,IDC_MENUITEMS)); int menupos = GetMenuObjbyId( MenuObjectId ); if ( menupos == -1 ) return FALSE; TIntMenuObject* pimo = g_menus[menupos]; if ( pimo->m_items.first == NULL ) return FALSE; mir_snprintf( MenuNameItems, sizeof(MenuNameItems), "%s_Items", pimo->Name ); int count = 0; { for ( PMO_IntMenuItem p = pimo->m_items.first; p != NULL; p = p->next ) if ( p->mi.root == ( HGENMENU )-1 || p->mi.root == NULL ) count++; } lpMenuItemOptData *PDar = ( lpMenuItemOptData* )mir_alloc( sizeof( lpMenuItemOptData )*count ); count = 0; { for ( PMO_IntMenuItem p = pimo->m_items.first; p != NULL; p = p->next ) { if ( p->mi.root != ( HGENMENU )-1 && p->mi.root != NULL ) continue; MenuItemOptData *PD = ( MenuItemOptData* )mir_calloc( sizeof( MenuItemOptData )); GetMenuItemName( p, menuItemName, sizeof( menuItemName )); { DBVARIANT dbv; mir_snprintf(buf, SIZEOF(buf), "%s_name", menuItemName); if ( !DBGetContactSettingTString( NULL, MenuNameItems, buf, &dbv )) { PD->name = mir_tstrdup( dbv.ptszVal ); DBFreeVariant( &dbv ); } else PD->name = mir_tstrdup( p->mi.ptszName ); } PD->pimi = p; PD->defname = mir_tstrdup( p->mi.ptszName ); mir_snprintf( buf, SIZEOF(buf), "%s_visible", menuItemName ); PD->show = DBGetContactSettingByte( NULL, MenuNameItems, buf, 1 ); if ( bReread ) { mir_snprintf( buf, SIZEOF(buf), "%s_pos", menuItemName ); PD->pos = DBGetContactSettingDword( NULL, MenuNameItems, buf, 1 ); } else PD->pos = ( PD->pimi ) ? PD->pimi->originalPosition : 0; PD->id = p->iCommand; if ( p->UniqName ) PD->uniqname = mir_strdup( p->UniqName ); PDar[ count ] = PD; count++; } } qsort( PDar, count, sizeof( lpMenuItemOptData ), sortfunc ); SendDlgItemMessage(hwndDlg, IDC_MENUITEMS, WM_SETREDRAW, FALSE, 0); int lastpos = 0; bool first = TRUE; TVINSERTSTRUCT tvis; tvis.hParent = NULL; tvis.hInsertAfter = TVI_LAST; tvis.item.mask = TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE; for ( int i=0; i < count; i++ ) { if ( PDar[i]->pos - lastpos >= SEPARATORPOSITIONINTERVAL ) { MenuItemOptData *PD = ( MenuItemOptData* )mir_calloc( sizeof( MenuItemOptData )); PD->id = -1; PD->name = mir_tstrdup( STR_SEPARATOR ); PD->pos = PDar[i]->pos - 1; PD->show = TRUE; tvis.item.lParam = ( LPARAM )PD; tvis.item.pszText = PD->name; tvis.item.iImage = tvis.item.iSelectedImage = PD->show; SendDlgItemMessage(hwndDlg, IDC_MENUITEMS, TVM_INSERTITEM, 0, (LPARAM)&tvis); } tvis.item.lParam = ( LPARAM )PDar[i]; tvis.item.pszText = PDar[i]->name; tvis.item.iImage = tvis.item.iSelectedImage = PDar[i]->show; HTREEITEM hti = (HTREEITEM)SendDlgItemMessage(hwndDlg, IDC_MENUITEMS, TVM_INSERTITEM, 0, (LPARAM)&tvis); if ( first ) { TreeView_SelectItem(GetDlgItem(hwndDlg,IDC_MENUITEMS),hti); first=FALSE; } lastpos = PDar[i]->pos; } SendDlgItemMessage( hwndDlg, IDC_MENUITEMS, WM_SETREDRAW, TRUE, 0 ); mir_free( PDar ); ShowWindow( GetDlgItem( hwndDlg, IDC_NOTSUPPORTWARNING ),( pimo->m_bUseUserDefinedItems ) ? SW_HIDE : SW_SHOW ); EnableWindow( GetDlgItem( hwndDlg, IDC_MENUITEMS ), pimo->m_bUseUserDefinedItems ); EnableWindow( GetDlgItem( hwndDlg, IDC_INSERTSEPARATOR ), pimo->m_bUseUserDefinedItems ); return 1; }
HANDLE CList_AddRoom(const char* pszModule, const TCHAR* pszRoom, const TCHAR* pszDisplayName, int iType) { HANDLE hContact = CList_FindRoom(pszModule, pszRoom); DBVARIANT dbv; TCHAR pszGroup[50]; *pszGroup = '\0'; if ( !DBGetContactSettingTString( NULL, "Chat", "AddToGroup", &dbv )) { if ( lstrlen( dbv.ptszVal ) > 0 ) lstrcpyn( pszGroup, dbv.ptszVal, 50); DBFreeVariant(&dbv); } else lstrcpyn( pszGroup, _T("Chat rooms"), 50); if ( pszGroup[0] ) CList_CreateGroup( pszGroup ); if ( hContact ) { //contact exist, make sure it is in the right group DBVARIANT dbv; DBVARIANT dbv2; char str[50]; int i; if ( pszGroup[0] ) { for (i = 0;; i++) { _itoa( i, str, 10 ); if ( DBGetContactSettingTString( NULL, "CListGroups", str, &dbv )) { DBWriteContactSettingTString(hContact, "CList", "Group", pszGroup); goto END_GROUPLOOP; } if ( !DBGetContactSettingTString( hContact, "CList", "Group", &dbv2 )) { if ( dbv.ptszVal[0] != '\0' && dbv2.ptszVal[0] != '\0' && !lstrcmpi( dbv.ptszVal + 1, dbv2.ptszVal )) { DBFreeVariant( &dbv ); DBFreeVariant( &dbv2 ); goto END_GROUPLOOP; } DBFreeVariant(&dbv2); } DBFreeVariant(&dbv); } } END_GROUPLOOP: DBWriteContactSettingWord( hContact, pszModule, "Status", ID_STATUS_OFFLINE ); DBWriteContactSettingTString(hContact, pszModule, "Nick", pszDisplayName ); /* if ( iType != GCW_SERVER ) DBWriteContactSettingByte(hContact, "CList", "Hidden", 1);*/ return hContact; } // here we create a new one since no one is to be found if (( hContact = (HANDLE) CallService(MS_DB_CONTACT_ADD, 0, 0)) == NULL ) return NULL; CallService( MS_PROTO_ADDTOCONTACT, (WPARAM) hContact, (LPARAM) pszModule ); if ( pszGroup && lstrlen( pszGroup ) > 0 ) DBWriteContactSettingTString(hContact, "CList", "Group", pszGroup ); else DBDeleteContactSetting( hContact, "CList", "Group" ); DBWriteContactSettingTString( hContact, pszModule, "Nick", pszDisplayName ); DBWriteContactSettingTString( hContact, pszModule, "ChatRoomID", pszRoom ); DBWriteContactSettingByte( hContact, pszModule, "ChatRoom", (BYTE)iType ); DBWriteContactSettingWord( hContact, pszModule, "Status", ID_STATUS_OFFLINE ); // if (iType == GCW_SERVER) // DBWriteContactSettingByte(hContact, "CList", "Hidden", 1); return hContact; }
INT_PTR CALLBACK MainOptDlg(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam) { static bool s_fRedraw; switch (msg) { case WM_INITDIALOG: { TranslateDialogDefault(hwndDlg); g_fOptionsOpen = true; s_fRedraw = false; extern PWTSRegisterSessionNotification wtsRegisterSessionNotification; if (wtsRegisterSessionNotification == 0) EnableWindow(GetDlgItem(hwndDlg, IDC_MAINOPT_HIDEIFLOCK), SW_HIDE); // set icon and tooltip for variables help button if (ServiceExists(MS_VARS_GETSKINITEM)) { HICON hIcon = (HICON)CallService(MS_VARS_GETSKINITEM, 0, (LPARAM)VSI_HELPICON); if (hIcon != NULL) SendMessage(GetDlgItem(hwndDlg, IDC_MAINOPT_VARHELP), BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)hIcon); SendMessage(GetDlgItem(hwndDlg, IDC_MAINOPT_VARHELP), BUTTONADDTOOLTIP, (WPARAM)TranslateT("Open String Formatting Help"), BATF_TCHAR); SendDlgItemMessage(hwndDlg, IDC_MAINOPT_VARHELP, BUTTONSETASFLATBTN, 0, 0); } SendDlgItemMessage(hwndDlg,IDC_MAINOPT_PASS,EM_LIMITTEXT,MAXPASSLEN,0); // limit password length DBVARIANT dbVar; if (!DBGetContactSettingString(NULL,MOD_NAME,"password",&dbVar)) { CallService( MS_DB_CRYPT_DECODESTRING, strlen( dbVar.pszVal )+1, ( LPARAM )dbVar.pszVal ); SetDlgItemTextA(hwndDlg,IDC_MAINOPT_PASS,dbVar.pszVal); DBFreeVariant(&dbVar); } CheckDlgButton(hwndDlg,IDC_MAINOPT_SETONLINEBACK,(g_wMask & OPT_SETONLINEBACK) ? (BST_CHECKED) : (BST_UNCHECKED)); CheckDlgButton(hwndDlg,IDC_MAINOPT_CHANGESTATUSBOX,(g_wMask & OPT_CHANGESTATUS) ? (BST_CHECKED) : (BST_UNCHECKED)); CheckDlgButton(hwndDlg,IDC_MAINOPT_DISABLESNDS,(g_wMask & OPT_DISABLESNDS) ? (BST_CHECKED) : (BST_UNCHECKED)); CheckDlgButton(hwndDlg,IDC_MAINOPT_REQPASS,(g_wMask & OPT_REQPASS) ? (BST_CHECKED) : (BST_UNCHECKED)); CheckDlgButton(hwndDlg,IDC_MAINOPT_ONLINEONLY,(g_wMask & OPT_ONLINEONLY) ? (BST_CHECKED) : (BST_UNCHECKED)); CheckDlgButton(hwndDlg,IDC_MAINOPT_USEDEFMSG,(g_wMask & OPT_USEDEFMSG) ? (BST_CHECKED) : (BST_UNCHECKED)); CheckDlgButton(hwndDlg,IDC_MAINOPT_TRAYICON,(g_wMask & OPT_TRAYICON) ? (BST_CHECKED) : (BST_UNCHECKED)); const TCHAR *STATUS_ARR_TO_NAME[8] = { _T("Offline"), _T("Online"), _T("Away"), _T("NA"), _T("Occupied"), _T("DND"), _T("Free for chat"), _T("Invisible") }; for (BYTE i = 0;i < 8; i++) SendDlgItemMessage(hwndDlg,IDC_MAINOPT_CHGSTS,CB_INSERTSTRING,-1,(LPARAM)TranslateTS(STATUS_ARR_TO_NAME[i])); SendDlgItemMessage(hwndDlg,IDC_MAINOPT_CHGSTS,CB_SETCURSEL,DBGetContactSettingByte(NULL,MOD_NAME,"stattype",4),0); SendMessage(hwndDlg,WM_USER + 60,0,0); SendMessage(hwndDlg,WM_USER + 50,0,0); s_fRedraw = true; return(true); } break; case WM_NOTIFY: { NMHDR* nmhdr = (NMHDR*)lParam; switch (nmhdr->code) { case PSN_APPLY: { WORD wMask = 0; // we apply changes here // this plugin ain't that big, no need for a seperate routine // write down status type if (IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_CHANGESTATUSBOX) == BST_CHECKED) { DBWriteContactSettingByte(NULL,MOD_NAME,"stattype",(BYTE)SendDlgItemMessage(hwndDlg,IDC_MAINOPT_CHGSTS,CB_GETCURSEL,0,0)); // status msg, if needed if (IsWindowEnabled(GetDlgItem(hwndDlg,IDC_MAINOPT_STATMSG))) // meaning we should save it { TCHAR tszMsg[1025]; GetDlgItemText(hwndDlg,IDC_MAINOPT_STATMSG,tszMsg,1024); if (lstrlen(tszMsg) != 0) DBWriteContactSettingTString(NULL,MOD_NAME,"statmsg",tszMsg); else // delete current setting DBDeleteContactSetting(NULL,MOD_NAME,"statmsg"); } wMask |= OPT_CHANGESTATUS; } // checkbox if (IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_REQPASS) == BST_CHECKED) { char szPass[MAXPASSLEN+1]; GetDlgItemTextA(hwndDlg,IDC_MAINOPT_PASS,szPass,MAXPASSLEN+1); if (strlen(szPass) != 0){ CallService( MS_DB_CRYPT_ENCODESTRING, MAXPASSLEN+1, ( LPARAM )szPass ); DBWriteContactSettingString(NULL,MOD_NAME,"password",szPass); wMask |= OPT_REQPASS; } } if (IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_SETONLINEBACK) == BST_CHECKED) wMask |= OPT_SETONLINEBACK; if (IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_DISABLESNDS) == BST_CHECKED) wMask |= OPT_DISABLESNDS; if (IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_ONLINEONLY) == BST_CHECKED) wMask |= OPT_ONLINEONLY; if (IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_USEDEFMSG) == BST_CHECKED) wMask |= OPT_USEDEFMSG; if (IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_TRAYICON) == BST_CHECKED) wMask |= OPT_TRAYICON; DBWriteContactSettingWord(NULL,MOD_NAME,"optsmask",wMask); g_wMask = wMask; return(true); } break; } } break; case WM_USER+50: // we're told to checkout the selection state of the combobox, and enable/disable accordingly { BYTE bSelection = (BYTE)SendDlgItemMessage(hwndDlg,IDC_MAINOPT_CHGSTS,CB_GETCURSEL,0,0); WORD wMode = STATUS_ARR_TO_ID[bSelection]; if (IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_USEDEFMSG) == BST_CHECKED) { TCHAR *ptszDefMsg = GetDefStatusMsg(wMode, 0); SetDlgItemText(hwndDlg, IDC_MAINOPT_STATMSG, ptszDefMsg); if(ptszDefMsg) mir_free(ptszDefMsg); } else { DBVARIANT dbVar; SendDlgItemMessage(hwndDlg,IDC_MAINOPT_STATMSG,EM_LIMITTEXT,1024,0); if (!DBGetContactSettingTString(NULL,MOD_NAME,"statmsg",&dbVar)) { SetDlgItemText(hwndDlg,IDC_MAINOPT_STATMSG,dbVar.ptszVal); DBFreeVariant(&dbVar); } } EnableWindow(GetDlgItem(hwndDlg,IDC_MAINOPT_STATMSG),(IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_CHANGESTATUSBOX) == BST_CHECKED) && (IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_USEDEFMSG) != BST_CHECKED)); ShowWindow(GetDlgItem(hwndDlg, IDC_MAINOPT_VARHELP), IsWindowEnabled(GetDlgItem(hwndDlg,IDC_MAINOPT_STATMSG)) && ServiceExists(MS_VARS_FORMATSTRING)); return(true); } break; case WM_USER+60: { bool fEnable = IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_CHANGESTATUSBOX) == BST_CHECKED; EnableWindow(GetDlgItem(hwndDlg,IDC_MAINOPT_CHGSTS),fEnable); EnableWindow(GetDlgItem(hwndDlg,IDC_MAINOPT_SETONLINEBACK),fEnable); EnableWindow(GetDlgItem(hwndDlg,IDC_MAINOPT_ONLINEONLY),fEnable); EnableWindow(GetDlgItem(hwndDlg,IDC_MAINOPT_USEDEFMSG),fEnable); EnableWindow(GetDlgItem(hwndDlg,IDC_MAINOPT_PASS),IsDlgButtonChecked(hwndDlg,IDC_MAINOPT_REQPASS) == BST_CHECKED); return(true); } break; case WM_COMMAND: { switch (HIWORD(wParam)) { case CBN_SELCHANGE: { // check the type // if type doesn't require a msg, we don't use one if (LOWORD(wParam) == IDC_MAINOPT_CHGSTS) { SendMessage(hwndDlg,WM_USER + 50,0,0); } SendMessage(GetParent(hwndDlg),PSM_CHANGED,(WPARAM)hwndDlg,0); return(0); } break; case BN_CLICKED: { switch(LOWORD(wParam)) { case IDC_MAINOPT_DISABLESNDS: case IDC_MAINOPT_SETONLINEBACK: case IDC_MAINOPT_ONLINEONLY: case IDC_MAINOPT_TRAYICON: { SendMessage(GetParent(hwndDlg),PSM_CHANGED,(WPARAM)hwndDlg,0); return(true); } break; case IDC_MAINOPT_USEDEFMSG: { SendMessage(hwndDlg,WM_USER + 50,0,0); SendMessage(GetParent(hwndDlg),PSM_CHANGED,(WPARAM)hwndDlg,0); return(true); } break; case IDC_MAINOPT_CHANGESTATUSBOX: { SendMessage(hwndDlg,WM_USER + 60,0,0); SendMessage(hwndDlg,WM_USER + 50,0,0); SendMessage(GetParent(hwndDlg),PSM_CHANGED,(WPARAM)hwndDlg,0); return(true); } break; case IDC_MAINOPT_REQPASS: { SendMessage(hwndDlg,WM_USER + 60,0,0); SendMessage(GetParent(hwndDlg),PSM_CHANGED,(WPARAM)hwndDlg,0); return(true); } break; case IDC_MAINOPT_VARHELP: { variables_showhelp(hwndDlg, IDC_MAINOPT_STATMSG, VHF_INPUT|VHF_HELP, 0, 0); SendMessage(GetParent(hwndDlg),PSM_CHANGED,(WPARAM)hwndDlg,0); return(true); } break; case IDC_MAINOPT_LNK_HOTKEY: { OPENOPTIONSDIALOG ood = {0}; ood.cbSize = sizeof(ood); ood.pszGroup = "Customize"; ood.pszPage = "Hotkeys"; CallService( MS_OPT_OPENOPTIONS, 0, (LPARAM)&ood ); return (true); } break; } return(0); } break; case EN_UPDATE: { switch( LOWORD( wParam )) { case IDC_MAINOPT_STATMSG: case IDC_MAINOPT_PASS: if (s_fRedraw) SendMessage(GetParent(hwndDlg),PSM_CHANGED,(WPARAM)hwndDlg,0); } } break; default:break; } } break; case WM_DESTROY: { g_fOptionsOpen = false; return(0); } break; } return(false); }