void ItemFound(HWND hwnd, MCONTACT hContact, const char *module, const char *setting, TCHAR* value, int type) { TCHAR name[NAME_SIZE]; TCHAR* mode; if (type & F_REPLACED) mode = TranslateT("Replaced"); else if (type & F_DELETED) mode = TranslateT("Deleted"); else mode = TranslateT("Found"); GetContactName(hContact, NULL, name, _countof(name)); LVITEM lvi = {0}; lvi.mask = LVIF_PARAM; lvi.lParam = (LPARAM)hContact; int index = ListView_InsertItem(hwnd, &lvi); ListView_SetItemText(hwnd, index, 0, mode); ListView_SetItemText(hwnd, index, 1, name); ListView_SetItemTextA(hwnd, index, 2, module); int F_type = type & 0xFF; if (F_type == F_SETNAME || F_type == F_SETVAL) ListView_SetItemTextA(hwnd, index, 3, setting); if (F_type == F_SETVAL && value) ListView_SetItemText(hwnd, index, 4, value); }
char *NickFromHContact(HANDLE hContact) { static char nick[512] = ""; if (hContact) { char szProto[256]; int loaded = 0; if (GetValue(hContact,"Protocol","p",szProto,SIZEOF(szProto))) loaded = IsProtocolLoaded(szProto); if (!szProto[0] || !loaded) { char name[256]; if (szProto[0]) { if (GetValue(hContact,szProto,"Nick",name,SIZEOF(name))) mir_snprintf(nick, SIZEOF(nick),"%s (%s)", name, szProto); else mir_snprintf(nick, SIZEOF(nick),"(UNKNOWN) (%s)", szProto); } else mir_snprintf(nick, SIZEOF(nick),"(UNKNOWN)"); } else { char *uid; char szUID[256]; uid = (char*)CallProtoService(szProto,PS_GETCAPS,PFLAG_UNIQUEIDSETTING,0); if ((int)uid!=CALLSERVICE_NOTFOUND && uid) { GetValue(hContact, szProto, uid, szUID, SIZEOF(szUID)); mir_snprintf(nick, SIZEOF(nick), "%s *(%s)*<%s>*{%s}*", (char*)GetContactName(hContact,szProto,0), szProto, uid, szUID); } else mir_snprintf(nick, SIZEOF(nick), "%s (%s)", (char*)GetContactName(hContact,szProto,0), szProto); } } return nick; }
void popupWatchedVar(MCONTACT hContact,const char* module,const char* setting) { HICON hIcon = LoadIcon(hInst, MAKEINTRESOURCE(ICO_REGEDIT)); char lpzContactName[MAX_CONTACTNAME]; char lpzText[MAX_SECONDLINE]; COLORREF colorBack = db_get_dw(NULL,modname,"PopupColour",RGB(255,0,0)); COLORREF colorText = RGB(0,0,0); int timeout = db_get_b(NULL,modname,"PopupDelay",3); if (hContact) { // contacts nick char szProto[256]; if (GetValue(hContact,"Protocol","p",szProto,SIZEOF(szProto))) mir_snprintf(lpzContactName, MAX_SECONDLINE, "%s (%s)", (char*)GetContactName(hContact, szProto, 0), szProto); else mir_snprintf(lpzContactName, MAX_SECONDLINE, nick_unknown); } else strcpy(lpzContactName,Translate("Settings")); // 2nd line DBVARIANT dbv; if ( GetSetting(hContact, module, setting, &dbv)) return; switch (dbv.type) { case DBVT_BYTE: mir_snprintf(lpzText, SIZEOF(lpzText), Translate("Database Setting Changed: \nModule: \"%s\" , Setting: \"%s\"\nNew Value: (BYTE) %d"), module, setting, dbv.bVal); break; case DBVT_WORD: mir_snprintf(lpzText, SIZEOF(lpzText), Translate("Database Setting Changed: \nModule: \"%s\" , Setting: \"%s\"\nNew Value: (WORD) %d"), module, setting, dbv.wVal); break; case DBVT_DWORD: mir_snprintf(lpzText, SIZEOF(lpzText), Translate("Database Setting Changed: \nModule: \"%s\" , Setting: \"%s\"\nNew Value: (DWORD) 0x%X"), module, setting, dbv.dVal); break; case DBVT_ASCIIZ: mir_snprintf(lpzText, SIZEOF(lpzText), Translate("Database Setting Changed: \nModule: \"%s\" , Setting: \"%s\"\nNew Value: \"%s\""), module, setting, dbv.pszVal); break; case DBVT_UTF8: mir_snprintf(lpzText, SIZEOF(lpzText), Translate("Database Setting Changed: \nModule: \"%s\" , Setting: \"%s\"\nNew Value (UTF8): \"%s\""), module, setting, dbv.pszVal); break; default: return; } db_free(&dbv); POPUPDATA ppd = { 0 }; ppd.lchContact = (MCONTACT)hContact; ppd.lchIcon = hIcon; lstrcpyn(ppd.lpzContactName, lpzContactName,MAX_CONTACTNAME); lstrcpyn(ppd.lpzText, lpzText,MAX_SECONDLINE); ppd.colorBack = colorBack; ppd.colorText = colorText; ppd.iSeconds = timeout ? timeout : -1; PUAddPopup(&ppd); }
void ItemFound(HWND hwnd, HANDLE hContact,const char *module,const char *setting,const char* value,int type) { ItemInfo *ii = (ItemInfo*)mir_calloc(sizeof(ItemInfo)); int index; char text[256] = ""; int result = 0; char szValue[256]; char *name, *mode; if (!ii) return; if (type & FW_REPLACED) mode = Translate("Replaced with"); else if (type & FW_DELETED) mode = Translate("Deleted"); else mode = Translate("Found"); name = hContact?(char*)GetContactName(hContact,NULL,0):Translate("Settings"); switch (type & 0xFF) { case FW_MODULE: ii->type = FW_MODULE; mir_snprintf(text, SIZEOF(text), Translate("%s Module \"%s\" in contact \"%s\""), mode, module, name); break; case FW_SETTINGNAME: mir_strncpy(ii->setting,setting,256); ii->type = FW_SETTINGNAME; if (GetValue(hContact,module,setting, szValue, SIZEOF(szValue))) mir_snprintf(text, SIZEOF(text), Translate("%s Setting \"%s\" in module \"%s\" in contact \"%s\" - \"%s\""), mode, setting, module, name, szValue); else mir_snprintf(text, SIZEOF(text), Translate("%s Setting \"%s\" in module \"%s\" in contact \"%s\""), mode, setting, module, name); break; case FW_SETTINGVALUE: mir_strncpy(ii->setting,setting,256); ii->type = FW_SETTINGVALUE; mir_snprintf(text, SIZEOF(text), Translate("%s \"%s\" in Setting \"%s\" in module \"%s\" in contact \"%s\""), mode, value, setting, module, name); break; } index = SendMessage(hwnd,LB_ADDSTRING,0,(LPARAM)text); if (type & FW_DELETED) { SendMessage(hwnd,LB_SETITEMDATA,index,0); mir_free(ii); } else { ii->hContact= hContact; mir_strncpy(ii->module,module,256); SendMessage(hwnd,LB_SETITEMDATA,index,(LPARAM)ii); } }
static INT_PTR CALLBACK AddModDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: SetWindowLongPtr(hwnd, GWLP_USERDATA, lParam); TranslateDialogDefault(hwnd); wchar_t msg[MSG_SIZE], name[NAME_SIZE]; GetContactName((MCONTACT)lParam, nullptr, name, _countof(name)); mir_snwprintf(msg, TranslateT("Add module to \"%s\""), name); SetWindowText(hwnd, msg); break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: if (GetWindowTextLength(GetDlgItem(hwnd, IDC_MODNAME))) { char modulename[FLD_SIZE]; GetDlgItemTextA(hwnd, IDC_MODNAME, modulename, _countof(modulename)); if (IsDlgButtonChecked(hwnd, CHK_ADD2ALL)) { // null contact db_set_b(NULL, modulename, "(Default)", 0); for (auto &hContact : Contacts()) db_set_b(hContact, modulename, "(Default)", 0); } else db_set_b((MCONTACT)GetWindowLongPtr(hwnd, GWLP_USERDATA), modulename, "(Default)", 0); refreshTree(1); } __fallthrough; case IDCANCEL: DestroyWindow(hwnd); break; } } return 0; }
INT_PTR CALLBACK copyModDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { ModuleAndContact *mac = (ModuleAndContact *)GetWindowLongPtr(hwnd,GWLP_USERDATA); if (msg == WM_INITDIALOG) { int index, loaded; char szProto[256]; for (MCONTACT hContact = db_find_first(); hContact; hContact = db_find_next(hContact)) { if (GetValue(hContact,"Protocol","p",szProto,SIZEOF(szProto))) loaded = IsProtocolLoaded(szProto); else loaded = 0; // filter if ((loaded && Mode == MODE_UNLOADED) || (!loaded && Mode == MODE_LOADED)) continue; // contacts name DBVARIANT dbv ={0}; WCHAR nick[256]; WCHAR protoW[256]; // unicode proto if (szProto[0]) a2u(szProto, protoW, SIZEOF(protoW)); else protoW[0] = 0; if (!szProto[0] || !loaded) { if (protoW) { if (Order) mir_snwprintf(nick, SIZEOF(nick), L"(%s) %s %s", protoW, GetContactName(hContact, szProto, 1), L"(UNLOADED)"); else mir_snwprintf(nick, SIZEOF(nick), L"%s (%s) %s", GetContactName(hContact, szProto, 1), protoW, L"(UNLOADED)"); } else wcscpy(nick, nick_unknownW); } else { if (Order) mir_snwprintf(nick, SIZEOF(nick), L"(%s) %s", protoW, GetContactName(hContact, szProto, 1)); else mir_snwprintf(nick, SIZEOF(nick), L"%s (%s)", GetContactName(hContact, szProto, 1), protoW); } index = SendMessageW(GetDlgItem(hwnd, IDC_CONTACTS), CB_ADDSTRING, 0, (LPARAM)nick); SendMessageW(GetDlgItem(hwnd, IDC_CONTACTS), CB_SETITEMDATA, index, hContact); } index = (int)SendMessage(GetDlgItem(hwnd, IDC_CONTACTS), CB_INSERTSTRING, 0, (LPARAM)(char*)Translate("Settings")); SendMessage(GetDlgItem(hwnd, IDC_CONTACTS), CB_SETITEMDATA, index, 0); SendMessage(GetDlgItem(hwnd, IDC_CONTACTS), CB_SETCURSEL, index, 0); SetWindowLongPtr(hwnd,GWLP_USERDATA,lParam); TranslateDialogDefault(hwnd); } else if (msg == WM_COMMAND) { switch(LOWORD(wParam)) { case CHK_COPY2ALL: EnableWindow(GetDlgItem(hwnd, IDC_CONTACTS),!IsDlgButtonChecked(hwnd,CHK_COPY2ALL)); break; case IDOK: if (!IsDlgButtonChecked(hwnd,CHK_COPY2ALL)) { MCONTACT hContact = (MCONTACT)SendMessage(GetDlgItem(hwnd, IDC_CONTACTS), CB_GETITEMDATA, SendMessage(GetDlgItem(hwnd, IDC_CONTACTS), CB_GETCURSEL, 0, 0), 0); copyModule(mac->module, mac->hContact, hContact); } else { SetCursor(LoadCursor(NULL,IDC_WAIT)); for (MCONTACT hContact = db_find_first(); hContact; hContact = db_find_next(hContact)) copyModule(mac->module, mac->hContact, hContact); SetCursor(LoadCursor(NULL,IDC_ARROW)); } mir_free(mac); refreshTree(1); DestroyWindow(hwnd); break; case IDCANCEL: mir_free(mac); DestroyWindow(hwnd); break; } } return 0; }
int doContacts(HWND hwnd2Tree, HTREEITEM contactsRoot, ModuleSettingLL *modlist, MCONTACT hSelectedContact, char *SelectedModule, char *SelectedSetting) { TVINSERTSTRUCT tvi; HTREEITEM contact; ModuleTreeInfoStruct *lParam; ModSetLinkLinkItem *module; int count = CallService(MS_DB_CONTACT_GETCOUNT, 0, 0); int itemscount = 0; int loaded, i = 0, icon = 0; HWND hwnd = GetParent(hwnd2Tree); int hItem = -1; SetWindowText(hwnd2mainWindow, Translate("Loading contacts...")); tvi.hInsertAfter = TVI_SORT; tvi.item.cChildren = 1; for (MCONTACT hContact = db_find_first(); hContact && hwnd2mainWindow; hContact = db_find_next(hContact)) { char szProto[100]; if (DBGetContactSettingStringStatic(hContact, "Protocol", "p", szProto, SIZEOF(szProto))) { icon = GetProtoIcon(szProto); loaded = (icon != DEF_ICON); } else { icon = DEF_ICON; loaded = 0; } i++; // filter if ((loaded && Mode == MODE_UNLOADED) || (!loaded && Mode == MODE_LOADED)) continue; // add the contact lParam = (ModuleTreeInfoStruct *)mir_calloc(sizeof(ModuleTreeInfoStruct)); lParam->hContact = hContact; lParam->type = CONTACT; tvi.item.mask = TVIF_TEXT | TVIF_CHILDREN | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE; tvi.item.lParam = (LPARAM)lParam; tvi.hParent = contactsRoot; if (hSelectedContact != hContact) lParam->type |= EMPTY; // contacts name DBVARIANT dbv = {0}; WCHAR nick[256]; WCHAR protoW[256]; // unicode proto if (szProto) a2u(szProto, protoW, SIZEOF(protoW)); else protoW[0] = 0; if (!szProto || !loaded) { tvi.item.iSelectedImage = (tvi.item.iImage = 4); if (protoW) { if (Order) mir_snwprintf(nick, SIZEOF(nick), L"(%s) %s %s", protoW, GetContactName(hContact, szProto, 1), L"(UNLOADED)"); else mir_snwprintf(nick, SIZEOF(nick), L"%s (%s) %s", GetContactName(hContact, szProto, 1), protoW, L"(UNLOADED)"); } else wcscpy(nick, nick_unknownW); } else { tvi.item.iSelectedImage = (tvi.item.iImage = icon); //GetProtoIcon(szProto, 7)); if (Order) mir_snwprintf(nick, SIZEOF(nick), L"(%s) %s", protoW, GetContactName(hContact, szProto, 1)); else mir_snwprintf(nick, SIZEOF(nick), L"%s (%s)", GetContactName(hContact, szProto, 1), protoW); } tvi.item.pszText = (char *)nick; contact = TreeView_InsertItemW(hwnd2Tree, &tvi); itemscount++; if (hSelectedContact == hContact) { module = modlist->first; while (module && hwnd2mainWindow) { if (module->name[0] && !IsModuleEmpty(hContact, module->name)) { tvi.hParent = contact; 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 = 1; tvi.item.iSelectedImage = 2; lParam->type = KNOWN_MODULE; tvi.item.lParam = (LPARAM)lParam; TreeView_InsertItem(hwnd2Tree, &tvi); } module = (ModSetLinkLinkItem *)module->next; } hItem = findItemInTree(hwnd2Tree, hSelectedContact, SelectedModule); } } if (hItem != -1) { TreeView_SelectItem(hwnd2Tree, (HTREEITEM)hItem); TreeView_Expand(hwnd2Tree, hItem, TVE_EXPAND); if (SelectedSetting[0]) SelectSetting(SelectedSetting); } return itemscount; }
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; } }
void addwatchtolist(HWND hwnd2list, struct DBsetting *lParam) { LVITEM lvItem; int index; char data[32], tmp[32]; DBVARIANT *dbv = &(lParam->dbv); MCONTACT hContact = lParam->hContact; char *module = lParam->module; char *setting = lParam->setting; if (!module) return; lvItem.lParam = (LPARAM)lParam->hContact; lvItem.mask = LVIF_TEXT|LVIF_PARAM; lvItem.iItem = 0; lvItem.iSubItem = 0; if (!setting || (int)(lParam->setting) == WATCH_MODULE) // add every item in the module and return { ModuleSettingLL settinglist; struct DBsetting dummy; ModSetLinkLinkItem *setting; if (!EnumSettings(hContact,module,&settinglist)) return; dummy.hContact = hContact; dummy.module = mir_tstrdup(module); setting = settinglist.first; while (setting) { dummy.setting = setting->name; addwatchtolist(hwnd2list, &dummy); setting = (ModSetLinkLinkItem *)setting->next; } mir_free(dummy.module); FreeModuleSettingLL(&settinglist); return; } db_free(&(lParam->dbv)); if (GetSetting(hContact, module, setting, &(lParam->dbv))) return; if (!hContact) lvItem.pszText = "NULL"; else lvItem.pszText = (char*)GetContactName(hContact, NULL, 1); index = ListView_InsertItem(hwnd2list,&lvItem); WCHAR* ptszText = mir_a2u(lvItem.pszText); ListView_SetItemTextW(hwnd2list, index, 0, ptszText); mir_free(ptszText); ListView_SetItemText(hwnd2list,index,1,module); ListView_SetItemText(hwnd2list,index,2,setting); switch (dbv->type) { case DBVT_BLOB: { int j; char *data = NULL; if (!(data = (char*)mir_realloc(data, 3*(dbv->cpbVal+1)) )) return; data[0] = '\0'; for (j=0; j<dbv->cpbVal; j++) { char tmp[16]; mir_snprintf(tmp, SIZEOF(tmp), "%02X ", (BYTE)dbv->pbVal[j]); strcat(data, tmp); } ListView_SetItemText(hwnd2list,index,4,data); ListView_SetItemText(hwnd2list,index,3,"BLOB"); mir_free(data); } break; case DBVT_BYTE: mir_snprintf(data, 32, "0x%02X (%s)", dbv->bVal, itoa(dbv->bVal,tmp,10)); ListView_SetItemText(hwnd2list,index,4,data); ListView_SetItemText(hwnd2list,index,3,"BYTE"); break; case DBVT_WORD: mir_snprintf(data, 32, "0x%04X (%s)", dbv->wVal, itoa(dbv->wVal,tmp,10)); ListView_SetItemText(hwnd2list,index,4,data); ListView_SetItemText(hwnd2list,index,3,"WORD"); break; case DBVT_DWORD: mir_snprintf(data, 32, "0x%08X (%s)", dbv->dVal, itoa(dbv->dVal,tmp,10)); ListView_SetItemText(hwnd2list,index,4,data); ListView_SetItemText(hwnd2list,index,3,"DWORD"); break; case DBVT_ASCIIZ: ListView_SetItemText(hwnd2list,index,4,dbv->pszVal); ListView_SetItemText(hwnd2list,index,3,"STRING"); break; case DBVT_UTF8: int length = (int)strlen(dbv->pszVal) + 1; WCHAR *wc = (WCHAR*)_alloca(length*sizeof(WCHAR)); MultiByteToWideChar(CP_UTF8, 0, dbv->pszVal, -1, wc, length); ListView_SetItemTextW(hwnd2list,index,4,wc); ListView_SetItemText(hwnd2list,index,3,"UNICODE"); break; } }
INT_PTR CALLBACK QuoteInfoDlgProcImpl(MCONTACT hContact, HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: assert(hContact); TranslateDialogDefault(hdlg); { tstring sDescription = GetContactName(hContact); ::SetDlgItemText(hdlg, IDC_STATIC_QUOTE_NAME, sDescription.c_str()); double dRate = 0.0; if (true == Quotes_DBReadDouble(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_PREV_VALUE, dRate)) { tostringstream o; o.imbue(GetSystemLocale()); o << dRate; ::SetDlgItemText(hdlg, IDC_EDIT_PREVIOUS_RATE, o.str().c_str()); } dRate = 0.0; if (true == Quotes_DBReadDouble(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_CURR_VALUE, dRate)) { tostringstream o; o.imbue(GetSystemLocale()); o << dRate; ::SetDlgItemText(hdlg, IDC_EDIT_RATE, o.str().c_str()); } time_t nFetchTime; if (true == get_fetch_time(nFetchTime, hContact)) { TCHAR szTime[50] = { 0 }; if (0 == _tctime_s(szTime, 50, &nFetchTime)) { ::SetDlgItemText(hdlg, IDC_EDIT_RATE_FETCH_TIME, szTime); } } CQuotesProviders::TQuotesProviderPtr pProvider = CModuleInfo::GetQuoteProvidersPtr()->GetContactProviderPtr(hContact); const IQuotesProvider::CProviderInfo& pi = pProvider->GetInfo(); tostringstream o; o << TranslateT("Info provided by") << _T(" <a href=\"") << pi.m_sURL << _T("\">") << pi.m_sName << _T("</a>"); ::SetDlgItemText(hdlg, IDC_SYSLINK_PROVIDER, o.str().c_str()); } return TRUE; case WM_NOTIFY: LPNMHDR pNMHDR = reinterpret_cast<LPNMHDR>(lParam); switch (pNMHDR->code) { case NM_CLICK: if (IDC_SYSLINK_PROVIDER == wParam) { PNMLINK pNMLink = reinterpret_cast<PNMLINK>(pNMHDR); ::ShellExecute(hdlg, _T("open"), pNMLink->item.szUrl, NULL, NULL, SW_SHOWNORMAL); } break; } break; } return FALSE; }
bool ExportManager::Export(IExport::ExportType type) { exp = NULL; UINT cp; std::wstring encoding; bool isBin = false; switch(type) { case IExport::Txt: exp = new TxtExport(); cp = Options::instance->codepageTxt; encoding = Options::instance->encodingTxt; isFlat = true; break; case IExport::PlainHtml: exp = new PlainHtmlExport(); cp = Options::instance->codepageHtml1; encoding = Options::instance->encodingHtml1; break; case IExport::RichHtml: exp = new RichHtmlExport(); cp = Options::instance->codepageHtml2; encoding = Options::instance->encodingHtml2; break; case IExport::Binary: exp = new BinaryExport(); cp = CP_UTF8; encoding = L"UTF8"; isFlat = true; oldOnTop = true; isBin = true; break; case IExport::Dat: exp = new DatExport(); cp = CP_UTF8; encoding = L"UTF8"; isFlat = true; oldOnTop = true; isBin = true; break; default: return false; } std::wstring fileName; if (file.empty()) fileName = GetFile(exp->GetExt(), hwnd, false); else fileName = ReplaceExt(file, exp->GetExt()); if (fileName.empty()) return false; std::wofstream* stream; if (!isBin) { stream = new std::wofstream (fileName.c_str()); if (!stream->is_open()) return false; std::locale filelocale(std::locale(), new codecvt_CodePage<wchar_t>(cp)); stream->imbue(filelocale); exp->SetStream(stream); } else { std::ofstream* cstream = new std::ofstream (fileName.c_str(), std::ios_base::binary); if (!cstream->is_open()) return false; stream = (std::wofstream*)cstream; exp->SetStream(stream); } exp->WriteHeader(fileName, GetFilterName(), GetMyName(), GetMyId(), GetContactName(), GetProtocolName(), GetContactId(), GetBaseProtocol(), encoding); RefreshEventList(); exp->WriteFooter(); if (!isBin) { stream->close(); delete stream; } else { std::ofstream* cstream = (std::ofstream*)stream; cstream->close(); delete cstream; } delete exp; return true; }