From e3cefc7b6ca803e3f87dbadae54a110332778490 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 5 Jul 2012 22:41:06 +0000 Subject: - first of the /Core standard plugins; - code cleaning git-svn-id: http://svn.miranda-ng.org/main/trunk@778 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- src/modules/userinfo/contactinfo.cpp | 515 ---------------------------- src/modules/userinfo/stdinfo.cpp | 612 --------------------------------- src/modules/userinfo/userinfo.cpp | 634 ----------------------------------- 3 files changed, 1761 deletions(-) delete mode 100644 src/modules/userinfo/contactinfo.cpp delete mode 100644 src/modules/userinfo/stdinfo.cpp delete mode 100644 src/modules/userinfo/userinfo.cpp (limited to 'src/modules/userinfo') diff --git a/src/modules/userinfo/contactinfo.cpp b/src/modules/userinfo/contactinfo.cpp deleted file mode 100644 index 64c84cf221..0000000000 --- a/src/modules/userinfo/contactinfo.cpp +++ /dev/null @@ -1,515 +0,0 @@ -/* - -Miranda IM: the free IM client for Microsoft* Windows* - -Copyright 2000-2009 Miranda ICQ/IM project, -all portions of this codebase are copyrighted to the people -listed in contributors.txt. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -#include "..\..\core\commonheaders.h" - -static HFONT hEmailFont=NULL; -static HCURSOR hHandCursor=NULL; - -static INT_PTR CALLBACK EditUserEmailDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch(msg) { - case WM_INITDIALOG: - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)lParam); - if (*(char*)lParam) SetWindowText(hwndDlg, TranslateT("Edit E-Mail Address")); - TranslateDialogDefault(hwndDlg); - SetDlgItemTextA(hwndDlg, IDC_EMAIL, (char*)lParam); - EnableWindow(GetDlgItem(hwndDlg, IDOK), *(char*)lParam); - return TRUE; - case WM_COMMAND: - switch(LOWORD(wParam)) { - case IDOK: - GetDlgItemTextA(hwndDlg, IDC_EMAIL, (char*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA), 256); - //fall through - case IDCANCEL: - EndDialog(hwndDlg, wParam); - case IDC_EMAIL: - if (HIWORD(wParam) == EN_CHANGE) - EnableWindow(GetDlgItem(hwndDlg, IDOK), GetWindowTextLength(GetDlgItem(hwndDlg, IDC_EMAIL))); - break; - } - break; - } - return FALSE; -} - -static INT_PTR CALLBACK EditUserPhoneDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - static int noRecursion=0; - - switch(msg) { - case WM_INITDIALOG: - { char *szText=(char*)lParam; - int i, item, countryCount; - struct CountryListEntry *countries; - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)lParam); - if (szText[0]) SetWindowText(hwndDlg, TranslateT("Edit Phone Number")); - TranslateDialogDefault(hwndDlg); - if (lstrlenA(szText)>4 && !lstrcmpA(szText+lstrlenA(szText)-4, " SMS")) { - CheckDlgButton(hwndDlg, IDC_SMS, BST_CHECKED); - szText[lstrlenA(szText)-4]='\0'; - } - EnableWindow(GetDlgItem(hwndDlg, IDOK), szText[0]); - SendDlgItemMessage(hwndDlg, IDC_AREA, EM_LIMITTEXT, 31, 0); - SendDlgItemMessage(hwndDlg, IDC_NUMBER, EM_LIMITTEXT, 63, 0); - CallService(MS_UTILS_GETCOUNTRYLIST, (WPARAM)&countryCount, (LPARAM)&countries); - for (i=0;i 4) - isValid = 0; - else { - for (i = SendDlgItemMessage(hwndDlg, IDC_COUNTRY, CB_GETCOUNT, 0, 0)-1; i >= 0; i--) - if (country == SendDlgItemMessage(hwndDlg, IDC_COUNTRY, CB_GETITEMDATA, i, 0)) { - SendDlgItemMessage(hwndDlg, IDC_COUNTRY, CB_SETCURSEL, i, 0); - break; - } - if (i < 0) - isValid = 0; - } - } - if (isValid) { - pArea = pText+strcspn(pText, "0123456789"); - pText = pArea+strspn(pArea, "0123456789"); - if (*pText) { - *pText='\0'; - pNumber = pText+1+strcspn(pText+1, "0123456789"); - SetDlgItemTextA(hwndDlg, IDC_NUMBER, pNumber); - } - SetDlgItemTextA(hwndDlg, IDC_AREA, pArea); - } - if ( !isValid) { - SendDlgItemMessage(hwndDlg, IDC_COUNTRY, CB_SETCURSEL, -1, 0); - SetDlgItemTextA(hwndDlg, IDC_AREA, ""); - SetDlgItemTextA(hwndDlg, IDC_NUMBER, ""); - } - } - noRecursion=0; - EnableWindow(GetDlgItem(hwndDlg, IDOK), GetWindowTextLength(GetDlgItem(hwndDlg, IDC_PHONE))); - break; - } - break; - } - return FALSE; -} - -static int IsOverEmail(HWND hwndDlg, TCHAR* szEmail, int cchEmail) -{ - RECT rc; - HWND hwndEmails; - TCHAR szText[256]; - HDC hdc; - SIZE textSize; - LVHITTESTINFO hti; - - hwndEmails=GetDlgItem(hwndDlg, IDC_EMAILS); - GetCursorPos(&hti.pt); - ScreenToClient(hwndEmails, &hti.pt); - GetClientRect(hwndEmails, &rc); - if ( !PtInRect(&rc, hti.pt)) return 0; - if (ListView_SubItemHitTest(hwndEmails, &hti) == -1) return 0; - if (hti.iSubItem != 1) return 0; - if ( !(hti.flags&LVHT_ONITEMLABEL)) return 0; - ListView_GetSubItemRect(hwndEmails, hti.iItem, 1, LVIR_LABEL, &rc); - szText[0] = 0; - ListView_GetItemText(hwndEmails, hti.iItem, 1, szText, SIZEOF(szText)); - hdc=GetDC(hwndEmails); - SelectObject(hdc, hEmailFont); - GetTextExtentPoint32(hdc, szText, lstrlen(szText), &textSize); - ReleaseDC(hwndEmails, hdc); - if (hti.pt.x4 && !lstrcmpA(dbv.pszVal+lstrlenA(dbv.pszVal)-4, " SMS")) { - ListView_SetItemText(GetDlgItem(hwndDlg, IDC_PHONES), lvi.iItem, 2, _T("y")); - dbv.ptszVal[lstrlen(dbv.ptszVal)-4]='\0'; - } - ListView_SetItemText(GetDlgItem(hwndDlg, IDC_PHONES), lvi.iItem, 1, dbv.ptszVal); - DBFreeVariant(&dbv); - lvi.iItem++; - } - if ( !DBGetContactSettingTString(hContact, szProto, "CompanyPhone", &dbv)) { - lvi.pszText=TranslateT("Work Phone"); - ListView_InsertItem(GetDlgItem(hwndDlg, IDC_PHONES), &lvi); - ListView_SetItemText(GetDlgItem(hwndDlg, IDC_PHONES), lvi.iItem, 1, dbv.ptszVal); - DBFreeVariant(&dbv); - lvi.iItem++; - } - if ( !DBGetContactSettingTString(hContact, szProto, "CompanyFax", &dbv)) { - lvi.pszText=TranslateT("Work Fax"); - ListView_InsertItem(GetDlgItem(hwndDlg, IDC_PHONES), &lvi); - ListView_SetItemText(GetDlgItem(hwndDlg, IDC_PHONES), lvi.iItem, 1, dbv.ptszVal); - DBFreeVariant(&dbv); - lvi.iItem++; - } - lvi.iSubItem=0; - for (i=0;;i++) { - lvi.lParam=i; - mir_snprintf(idstr, SIZEOF(idstr), "MyPhone%d", i); - if (DBGetContactSettingTString(hContact, "UserInfo", idstr, &dbv)) - break; - lvi.pszText=idstr2; - mir_sntprintf(idstr2, SIZEOF(idstr2), TranslateT("Custom %d"), i+1); - ListView_InsertItem(GetDlgItem(hwndDlg, IDC_PHONES), &lvi); - if (lstrlen(dbv.ptszVal)>4 && !lstrcmp(dbv.ptszVal+lstrlen(dbv.ptszVal)-4, _T(" SMS"))) { - ListView_SetItemText(GetDlgItem(hwndDlg, IDC_PHONES), lvi.iItem, 2, _T("y")); - dbv.ptszVal[lstrlen(dbv.ptszVal)-4]='\0'; - } - ListView_SetItemText(GetDlgItem(hwndDlg, IDC_PHONES), lvi.iItem, 1, dbv.ptszVal); - DBFreeVariant(&dbv); - lvi.iItem++; - } - lvi.mask=LVIF_PARAM; - lvi.lParam=(LPARAM)(-2); - ListView_InsertItem(GetDlgItem(hwndDlg, IDC_PHONES), &lvi); - } - break; - } - case WM_NOTIFY: - switch (((LPNMHDR)lParam)->idFrom) { - case 0: - switch (((LPNMHDR)lParam)->code) { - case PSN_INFOCHANGED: - SendMessage(hwndDlg, M_REMAKELISTS, 0, 0); - break; - } - break; - case IDC_EMAILS: - case IDC_PHONES: - switch (((LPNMHDR)lParam)->code) { - case NM_CUSTOMDRAW: - { NMLVCUSTOMDRAW *nm=(NMLVCUSTOMDRAW*)lParam; - switch(nm->nmcd.dwDrawStage) { - case CDDS_PREPAINT: - case CDDS_ITEMPREPAINT: - SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, CDRF_NOTIFYSUBITEMDRAW); - return TRUE; - case CDDS_SUBITEM|CDDS_ITEMPREPAINT: - { - RECT rc; - ListView_GetSubItemRect(nm->nmcd.hdr.hwndFrom, nm->nmcd.dwItemSpec, nm->iSubItem, LVIR_LABEL, &rc); - if (nm->iSubItem == 1 && nm->nmcd.hdr.idFrom == IDC_EMAILS) { - HFONT hoFont; - TCHAR szText[256] = {0}; - ListView_GetItemText(nm->nmcd.hdr.hwndFrom, nm->nmcd.dwItemSpec, nm->iSubItem, szText, SIZEOF(szText)); - hoFont=(HFONT)SelectObject(nm->nmcd.hdc, hEmailFont); - SetTextColor(nm->nmcd.hdc, RGB(0, 0, 255)); - DrawText(nm->nmcd.hdc, szText, -1, &rc, DT_END_ELLIPSIS|DT_LEFT|DT_NOPREFIX|DT_SINGLELINE|DT_TOP); - SelectObject(nm->nmcd.hdc, hoFont); - SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, CDRF_SKIPDEFAULT); - return TRUE; - } - - HICON hIcon = NULL; - if (nm->nmcd.lItemlParam == (LPARAM)(-2) && nm->iSubItem-3 == (nm->nmcd.hdr.idFrom == IDC_PHONES)) - hIcon = LoadSkinIcon(SKINICON_OTHER_ADDCONTACT); - else if (nm->iSubItem>1 && nm->nmcd.lItemlParam != (LPARAM)(-1) && nm->nmcd.lItemlParam != (LPARAM)(-2)) { - static int iconResources[3]={SKINICON_OTHER_RENAME, SKINICON_OTHER_DELETE}; - if (nm->iSubItem == 2 && nm->nmcd.hdr.idFrom == IDC_PHONES) { - TCHAR szText[2]; - ListView_GetItemText(nm->nmcd.hdr.hwndFrom, nm->nmcd.dwItemSpec, nm->iSubItem, szText, SIZEOF(szText)); - if (szText[0]) hIcon = LoadSkinIcon(SKINICON_OTHER_SMS); - } - else hIcon = LoadSkinIcon(iconResources[nm->iSubItem-3+(nm->nmcd.hdr.idFrom == IDC_EMAILS)]); - } - else break; - DrawIconEx(nm->nmcd.hdc, (rc.left+rc.right-GetSystemMetrics(SM_CXSMICON))/2, (rc.top+rc.bottom-GetSystemMetrics(SM_CYSMICON))/2, hIcon, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0, NULL, DI_NORMAL); - IconLib_ReleaseIcon(hIcon, 0); - SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, CDRF_SKIPDEFAULT); - return TRUE; - } - } - break; - } - case NM_CLICK: - { NMLISTVIEW *nm=(NMLISTVIEW*)lParam; - LVITEM lvi; - TCHAR szEmail[256]; - HANDLE hContact=(HANDLE)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); - char *szIdTemplate=nm->hdr.idFrom == IDC_PHONES?"MyPhone%d":"Mye-mail%d"; - LVHITTESTINFO hti; - - if (IsOverEmail(hwndDlg, szEmail, SIZEOF(szEmail))) { - TCHAR szExec[264]; - mir_sntprintf(szExec, SIZEOF(szExec), _T("mailto:%s"), szEmail); - ShellExecute(hwndDlg, _T("open"), szExec, NULL, NULL, SW_SHOW); - break; - } - if (nm->iSubItem<2) break; - hti.pt.x=(short)LOWORD(GetMessagePos()); - hti.pt.y=(short)HIWORD(GetMessagePos()); - ScreenToClient(nm->hdr.hwndFrom, &hti.pt); - if (ListView_SubItemHitTest(nm->hdr.hwndFrom, &hti) == -1) break; - lvi.mask=LVIF_PARAM; - lvi.iItem=hti.iItem; - lvi.iSubItem=0; - ListView_GetItem(nm->hdr.hwndFrom, &lvi); - if (lvi.lParam == (LPARAM)(-1)) break; - if (lvi.lParam == (LPARAM)(-2)) { - if (hti.iSubItem-3 == (nm->hdr.idFrom == IDC_PHONES)) { - //add - char szNewData[256]="", idstr[33]; - int i; - DBVARIANT dbv; - if (IDOK != DialogBoxParam(hInst, MAKEINTRESOURCE(nm->hdr.idFrom == IDC_PHONES?IDD_ADDPHONE:IDD_ADDEMAIL), hwndDlg, nm->hdr.idFrom == IDC_PHONES?EditUserPhoneDlgProc:EditUserEmailDlgProc, (LPARAM)szNewData)) - break; - for (i=0;;i++) { - mir_snprintf(idstr, SIZEOF(idstr), szIdTemplate, i); - if (DBGetContactSettingString(hContact, "UserInfo", idstr, &dbv)) break; - DBFreeVariant(&dbv); - } - DBWriteContactSettingString(hContact, "UserInfo", idstr, szNewData); - SendMessage(hwndDlg, M_REMAKELISTS, 0, 0); - } - } - else { - if (hti.iSubItem-3 == (nm->hdr.idFrom == IDC_PHONES)) { - //delete - int i; - char idstr[33]; - DBVARIANT dbv; - for (i=lvi.lParam;;i++) { - mir_snprintf(idstr, SIZEOF(idstr), szIdTemplate, i+1); - if (DBGetContactSettingString(hContact, "UserInfo", idstr, &dbv)) break; - mir_snprintf(idstr, SIZEOF(idstr), szIdTemplate, i); - DBWriteContactSettingString(hContact, "UserInfo", idstr, dbv.pszVal); - DBFreeVariant(&dbv); - } - mir_snprintf(idstr, SIZEOF(idstr), szIdTemplate, i); - DBDeleteContactSetting(hContact, "UserInfo", idstr); - SendMessage(hwndDlg, M_REMAKELISTS, 0, 0); - } - else if (hti.iSubItem-2 == (nm->hdr.idFrom == IDC_PHONES)) { - //edit - char szText[256], idstr[33]; - DBVARIANT dbv; - mir_snprintf(idstr, SIZEOF(idstr), szIdTemplate, lvi.lParam); - if (DBGetContactSettingString(hContact, "UserInfo", idstr, &dbv)) break; - lstrcpynA(szText, dbv.pszVal, SIZEOF(szText)); - DBFreeVariant(&dbv); - if (IDOK != DialogBoxParam(hInst, MAKEINTRESOURCE(nm->hdr.idFrom == IDC_PHONES?IDD_ADDPHONE:IDD_ADDEMAIL), hwndDlg, nm->hdr.idFrom == IDC_PHONES?EditUserPhoneDlgProc:EditUserEmailDlgProc, (LPARAM)szText)) - break; - DBWriteContactSettingString(hContact, "UserInfo", idstr, szText); - SendMessage(hwndDlg, M_REMAKELISTS, 0, 0); - } - } - break; - } - } - break; - } - break; - case WM_SETCURSOR: - if (LOWORD(lParam) != HTCLIENT) break; - if (GetForegroundWindow() == GetParent(hwndDlg)) { - POINT pt; - GetCursorPos(&pt); - ScreenToClient(hwndDlg, &pt); -// SetFocus(ChildWindowFromPoint(hwndDlg, pt)); //ugly hack because listviews ignore their first click - } - if (IsOverEmail(hwndDlg, NULL, 0)) { - SetCursor(hHandCursor); - SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, TRUE); - return TRUE; - } - break; - case WM_COMMAND: - switch(LOWORD(wParam)) { - case IDCANCEL: - SendMessage(GetParent(hwndDlg), msg, wParam, lParam); - break; - } - break; - } - return FALSE; -} diff --git a/src/modules/userinfo/stdinfo.cpp b/src/modules/userinfo/stdinfo.cpp deleted file mode 100644 index 42f2b3241d..0000000000 --- a/src/modules/userinfo/stdinfo.cpp +++ /dev/null @@ -1,612 +0,0 @@ -/* - -Miranda IM: the free IM client for Microsoft* Windows* - -Copyright 2000-2009 Miranda ICQ/IM project, -all portions of this codebase are copyrighted to the people -listed in contributors.txt. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -#include "..\..\core\commonheaders.h" - -INT_PTR CALLBACK ContactDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); - -#define SVS_NORMAL 0 -#define SVS_GENDER 1 -#define SVS_ZEROISUNSPEC 2 -#define SVS_IP 3 -#define SVS_COUNTRY 4 -#define SVS_MONTH 5 -#define SVS_SIGNED 6 -#define SVS_TIMEZONE 7 - -static int Proto_GetContactInfoSetting(HANDLE hContact, const char *szProto, const char *szModule, const char *szSetting, DBVARIANT *dbv, const int nType) -{ - DBCONTACTGETSETTING cgs={szModule, szSetting, dbv}; - dbv->type=(BYTE)nType; - - return CallProtoServiceInt(NULL,szProto, PS_GETINFOSETTING, (WPARAM)hContact, (LPARAM)&cgs); -} - -static void Proto_FreeInfoVariant(DBVARIANT *dbv) -{ - switch (dbv->type) { - case DBVT_ASCIIZ: - case DBVT_UTF8: - case DBVT_WCHAR: - { - mir_free(dbv->pszVal); - dbv->pszVal=0; - break; - } - case DBVT_BLOB: - { - mir_free(dbv->pbVal); - dbv->pbVal=0; - break; - } - } - dbv->type=0; -} - -static void SetValue(HWND hwndDlg, int idCtrl, HANDLE hContact, char *szModule, char *szSetting, int special) -{ - DBVARIANT dbv = { 0 }; - char str[80], *pstr = NULL; - TCHAR* ptstr = NULL; - int unspecified=0; - char* szProto = (char *) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); - bool proto_service = szProto && (CallProtoServiceInt(NULL,szProto, PS_GETCAPS, PFLAGNUM_4, 0) & PF4_INFOSETTINGSVC); - - dbv.type=DBVT_DELETED; - if (szModule == NULL) unspecified=1; - else if (proto_service) unspecified=Proto_GetContactInfoSetting(hContact, szProto, szModule, szSetting, &dbv, 0); - else unspecified=DBGetContactSettingW(hContact, szModule, szSetting, &dbv); - if ( !unspecified) { - switch(dbv.type) { - case DBVT_BYTE: - if (special == SVS_GENDER) { - if (dbv.cVal == 'M') ptstr=TranslateT("Male"); - else if (dbv.cVal == 'F') ptstr=TranslateT("Female"); - else unspecified=1; - } - else if (special == SVS_MONTH) { - if (dbv.bVal>0 && dbv.bVal<=12) { - pstr=str; - GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SABBREVMONTHNAME1-1+dbv.bVal, str, SIZEOF(str)); - } - else unspecified=1; - } - else if (special == SVS_TIMEZONE) { - if (dbv.cVal == -100) unspecified=1; - else { - pstr=str; - mir_snprintf(str, SIZEOF(str), dbv.cVal?"UTC%+d:%02d":"UTC", -dbv.cVal/2, (dbv.cVal&1)*30); - } - } - else { - unspecified=(special == SVS_ZEROISUNSPEC && dbv.bVal == 0); - pstr=_itoa(special == SVS_SIGNED?dbv.cVal:dbv.bVal, str, 10); - } - break; - case DBVT_WORD: - if (special == SVS_COUNTRY) { - WORD wSave = dbv.wVal; - if (wSave == (WORD)-1) { - char szSettingName[100]; - mir_snprintf(szSettingName, SIZEOF(szSettingName), "%sName", szSetting); - if ( !DBGetContactSettingTString(hContact, szModule, szSettingName, &dbv)) { - ptstr = dbv.ptszVal; - unspecified = false; - break; - } - } - - pstr = Translate((char*)CallService(MS_UTILS_GETCOUNTRYBYNUMBER, wSave, 0)); - unspecified=pstr == NULL; - } - else { - unspecified=(special == SVS_ZEROISUNSPEC && dbv.wVal == 0); - pstr=_itoa(special == SVS_SIGNED?dbv.sVal:dbv.wVal, str, 10); - } - break; - case DBVT_DWORD: - unspecified=(special == SVS_ZEROISUNSPEC && dbv.dVal == 0); - if (special == SVS_IP) { - struct in_addr ia; - ia.S_un.S_addr=htonl(dbv.dVal); - pstr=inet_ntoa(ia); - if (dbv.dVal == 0) unspecified=1; - } - else pstr=_itoa(special == SVS_SIGNED?dbv.lVal:dbv.dVal, str, 10); - break; - case DBVT_ASCIIZ: - unspecified=(special == SVS_ZEROISUNSPEC && dbv.pszVal[0] == '\0'); - pstr=dbv.pszVal; - break; - case DBVT_UTF8: - unspecified=(special == SVS_ZEROISUNSPEC && dbv.pszVal[0] == '\0'); - if ( !unspecified) - { WCHAR* wszStr; - Utf8Decode(dbv.pszVal, &wszStr); - SetDlgItemTextW(hwndDlg, idCtrl, TranslateTS(wszStr)); - mir_free(wszStr); - goto LBL_Exit; - } - - pstr=dbv.pszVal; - Utf8Decode(dbv.pszVal, NULL); - break; - default: pstr=str; lstrcpyA(str, "???"); break; - } } - - if (unspecified) - SetDlgItemText(hwndDlg, idCtrl, TranslateT("")); - else if (ptstr != NULL) - SetDlgItemText(hwndDlg, idCtrl, ptstr); - else - SetDlgItemTextA(hwndDlg, idCtrl, pstr); - - -LBL_Exit: - - EnableWindow(GetDlgItem(hwndDlg, idCtrl), !unspecified); - if (proto_service) - Proto_FreeInfoVariant(&dbv); - else - DBFreeVariant(&dbv); -} - -static INT_PTR CALLBACK SummaryDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch(msg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - break; - - case WM_NOTIFY: - switch (((LPNMHDR)lParam)->idFrom) { - case 0: - if (((LPNMHDR)lParam)->code == PSN_INFOCHANGED) - { char *szProto; - HANDLE hContact=(HANDLE)((LPPSHNOTIFY)lParam)->lParam; - if (hContact != NULL) { - szProto=(char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); - if (szProto == NULL) break; - SetValue(hwndDlg, IDC_NICK, hContact, szProto, "Nick", 0); - SetValue(hwndDlg, IDC_FIRSTNAME, hContact, szProto, "FirstName", 0); - SetValue(hwndDlg, IDC_LASTNAME, hContact, szProto, "LastName", 0); - SetValue(hwndDlg, IDC_EMAIL, hContact, szProto, "e-mail", 0); - SetValue(hwndDlg, IDC_AGE, hContact, szProto, "Age", SVS_ZEROISUNSPEC); - SetValue(hwndDlg, IDC_GENDER, hContact, szProto, "Gender", SVS_GENDER); - SetValue(hwndDlg, IDC_DOBDAY, hContact, szProto, "BirthDay", 0); - SetValue(hwndDlg, IDC_DOBMONTH, hContact, szProto, "BirthMonth", SVS_MONTH); - SetValue(hwndDlg, IDC_DOBYEAR, hContact, szProto, "BirthYear", 0); - SetValue(hwndDlg, IDC_MARITAL, hContact, szProto, "MaritalStatus", 0); - } } - break; - } - break; - case WM_COMMAND: - switch(LOWORD(wParam)) { - case IDCANCEL: - SendMessage(GetParent(hwndDlg), msg, wParam, lParam); - break; - case IDC_EMAIL: - if (IsWindowEnabled(GetDlgItem(hwndDlg, IDC_EMAIL))) { - TCHAR szExec[264], szEmail[256]; - GetDlgItemText(hwndDlg, IDC_EMAIL, szEmail, SIZEOF(szEmail)); - mir_sntprintf(szExec, SIZEOF(szExec), _T("mailto:%s"), szEmail); - ShellExecute(hwndDlg, _T("open"), szExec, NULL, NULL, SW_SHOW); - } - break; - } - break; - } - return FALSE; -} - -static INT_PTR CALLBACK LocationDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch(msg) { - case WM_INITDIALOG: - - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, lParam); - TranslateDialogDefault(hwndDlg); - SetTimer(hwndDlg, 1, 1000, NULL); - - tmi.prepareList((HANDLE)lParam, GetDlgItem(hwndDlg, IDC_TIMEZONESELECT), TZF_PLF_CB); - SendMessage(hwndDlg, WM_TIMER, 0, 0); - break; - - case WM_TIMER: - { - HANDLE hContact = (HANDLE)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); - - if (hContact != NULL) - { - TCHAR szTime[80]; - - if (tmi.printDateTimeByContact(hContact, _T("s"), szTime, SIZEOF(szTime), TZF_KNOWNONLY)) - { - EnableWindow(GetDlgItem(hwndDlg, IDC_LOCALTIME), FALSE); - SetDlgItemText(hwndDlg, IDC_LOCALTIME, TranslateT("")); - } - else - { - EnableWindow(GetDlgItem(hwndDlg, IDC_LOCALTIME), TRUE); - SetDlgItemText(hwndDlg, IDC_LOCALTIME, szTime); - } - } - break; - } - case WM_NOTIFY: - switch (((LPNMHDR)lParam)->idFrom) { - case 0: - if (((LPNMHDR)lParam)->code == PSN_INFOCHANGED) - { char *szProto; - HANDLE hContact=(HANDLE)((LPPSHNOTIFY)lParam)->lParam; - if (hContact != NULL) { - szProto=(char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); - if (szProto == NULL) break; - SetValue(hwndDlg, IDC_STREET, hContact, szProto, "Street", SVS_ZEROISUNSPEC); - SetValue(hwndDlg, IDC_CITY, hContact, szProto, "City", SVS_ZEROISUNSPEC); - SetValue(hwndDlg, IDC_STATE, hContact, szProto, "State", SVS_ZEROISUNSPEC); - SetValue(hwndDlg, IDC_ZIP, hContact, szProto, "ZIP", SVS_ZEROISUNSPEC); - SetValue(hwndDlg, IDC_COUNTRY, hContact, szProto, "Country", SVS_COUNTRY); - SetValue(hwndDlg, IDC_LANGUAGE1, hContact, szProto, "Language1", SVS_ZEROISUNSPEC); - SetValue(hwndDlg, IDC_LANGUAGE2, hContact, szProto, "Language2", SVS_ZEROISUNSPEC); - SetValue(hwndDlg, IDC_LANGUAGE3, hContact, szProto, "Language3", SVS_ZEROISUNSPEC); - SetValue(hwndDlg, IDC_TIMEZONE, hContact, szProto, "Timezone", SVS_TIMEZONE); - } - } - break; - } - break; - case WM_COMMAND: - switch(LOWORD(wParam)) { - case IDCANCEL: - SendMessage(GetParent(hwndDlg), msg, wParam, lParam); - break; - case IDC_TIMEZONESELECT: - if (HIWORD(wParam) == CBN_SELCHANGE) { - HANDLE hContact = (HANDLE)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); - - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - tmi.storeListResults(hContact, GetDlgItem(hwndDlg, IDC_TIMEZONESELECT), TZF_PLF_CB); - } - break; - } - break; - } - return FALSE; -} - -static INT_PTR CALLBACK WorkDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch(msg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - break; - case WM_NOTIFY: - switch (((LPNMHDR)lParam)->idFrom) { - case 0: - if (((LPNMHDR)lParam)->code == PSN_INFOCHANGED) - { char *szProto; - HANDLE hContact=(HANDLE)((LPPSHNOTIFY)lParam)->lParam; - if (hContact != NULL) { - szProto=(char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); - if (szProto == NULL) break; - SetValue(hwndDlg, IDC_COMPANY, hContact, szProto, "Company", SVS_ZEROISUNSPEC); - SetValue(hwndDlg, IDC_DEPARTMENT, hContact, szProto, "CompanyDepartment", SVS_ZEROISUNSPEC); - SetValue(hwndDlg, IDC_POSITION, hContact, szProto, "CompanyPosition", SVS_ZEROISUNSPEC); - SetValue(hwndDlg, IDC_STREET, hContact, szProto, "CompanyStreet", SVS_ZEROISUNSPEC); - SetValue(hwndDlg, IDC_CITY, hContact, szProto, "CompanyCity", SVS_ZEROISUNSPEC); - SetValue(hwndDlg, IDC_STATE, hContact, szProto, "CompanyState", SVS_ZEROISUNSPEC); - SetValue(hwndDlg, IDC_ZIP, hContact, szProto, "CompanyZIP", SVS_ZEROISUNSPEC); - SetValue(hwndDlg, IDC_COUNTRY, hContact, szProto, "CompanyCountry", SVS_COUNTRY); - SetValue(hwndDlg, IDC_WEBPAGE, hContact, szProto, "CompanyHomepage", SVS_ZEROISUNSPEC); - } } - break; - } - break; - case WM_COMMAND: - switch(LOWORD(wParam)) { - case IDCANCEL: - SendMessage(GetParent(hwndDlg), msg, wParam, lParam); - break; - case IDC_WEBPAGE: - if (IsWindowEnabled(GetDlgItem(hwndDlg, IDC_WEBPAGE))) { - char szPage[256]; - GetDlgItemTextA(hwndDlg, IDC_WEBPAGE, szPage, SIZEOF(szPage)); - CallService(MS_UTILS_OPENURL, 1, (LPARAM)szPage); - } - break; - } - break; - } - return FALSE; -} - -// Resizes all columns in a listview (report style) -// to make all text visible -void ResizeColumns(HWND hwndLV) -{ - int nCol = 0; LVCOLUMN lvCol; - lvCol.mask = LVCF_WIDTH; - while (ListView_GetColumn(hwndLV, nCol++, &lvCol)) - ListView_SetColumnWidth(hwndLV, nCol-1, LVSCW_AUTOSIZE); -} - -static INT_PTR CALLBACK BackgroundDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch(msg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - { LVCOLUMN lvc; - RECT rc; - GetClientRect(GetDlgItem(hwndDlg, IDC_PAST), &rc); - rc.right-=GetSystemMetrics(SM_CXVSCROLL); - lvc.mask=LVCF_WIDTH; - lvc.cx=rc.right/3; - ListView_InsertColumn(GetDlgItem(hwndDlg, IDC_PAST), 0, &lvc); - ListView_InsertColumn(GetDlgItem(hwndDlg, IDC_INTERESTS), 0, &lvc); - lvc.cx=rc.right-rc.right/3; - ListView_InsertColumn(GetDlgItem(hwndDlg, IDC_PAST), 1, &lvc); - ListView_InsertColumn(GetDlgItem(hwndDlg, IDC_INTERESTS), 1, &lvc); - } - ListView_SetExtendedListViewStyleEx(GetDlgItem(hwndDlg, IDC_PAST), LVS_EX_LABELTIP, LVS_EX_LABELTIP); - ListView_SetExtendedListViewStyleEx(GetDlgItem(hwndDlg, IDC_INTERESTS), LVS_EX_LABELTIP, LVS_EX_LABELTIP); - break; - - case WM_NOTIFY: - switch (((LPNMHDR)lParam)->idFrom) { - case 0: - if (((LPNMHDR)lParam)->code == PSN_INFOCHANGED) - { LVITEM lvi; - int i; - char idstr[33]; - DBVARIANT dbv, dbvText; - HANDLE hContact=(HANDLE)((LPPSHNOTIFY)lParam)->lParam; - - if (hContact != NULL) { - char *szProto=(char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); - if (szProto == NULL) break; - bool proto_service = (CallProtoServiceInt(NULL,szProto, PS_GETCAPS, PFLAGNUM_4, 0) & PF4_INFOSETTINGSVC) == PF4_INFOSETTINGSVC; - SetValue(hwndDlg, IDC_WEBPAGE, hContact, szProto, "Homepage", SVS_ZEROISUNSPEC); - - //past - ListView_DeleteAllItems(GetDlgItem(hwndDlg, IDC_PAST)); - lvi.mask=LVIF_TEXT; - lvi.iSubItem=0; - lvi.iItem=0; - for (i=0;;i++) { - mir_snprintf(idstr, SIZEOF(idstr), "Past%d", i); - if ((proto_service && Proto_GetContactInfoSetting(hContact, szProto, szProto, idstr, &dbv, DBVT_TCHAR)) || - ( !proto_service && DBGetContactSettingTString(hContact, szProto, idstr, &dbv))) - break; - mir_snprintf(idstr, SIZEOF(idstr), "Past%dText", i); - if (DBGetContactSettingTString(hContact, szProto, idstr, &dbvText)) - {if (proto_service) Proto_FreeInfoVariant(&dbv); else DBFreeVariant(&dbv); break;} - lvi.pszText=dbv.ptszVal; - ListView_InsertItem(GetDlgItem(hwndDlg, IDC_PAST), &lvi); - ListView_SetItemText(GetDlgItem(hwndDlg, IDC_PAST), lvi.iItem, 1, dbvText.ptszVal); - DBFreeVariant(&dbvText); - if (proto_service) - Proto_FreeInfoVariant(&dbv); - else - DBFreeVariant(&dbv); - lvi.iItem++; - } - - for (i=0;;i++) { - mir_snprintf(idstr, SIZEOF(idstr), "Affiliation%d", i); - if ((proto_service && Proto_GetContactInfoSetting(hContact, szProto, szProto, idstr, &dbv, DBVT_TCHAR)) || - ( !proto_service && DBGetContactSettingTString(hContact, szProto, idstr, &dbv))) - break; - mir_snprintf(idstr, SIZEOF(idstr), "Affiliation%dText", i); - if (DBGetContactSettingTString(hContact, szProto, idstr, &dbvText)) - {if (proto_service) Proto_FreeInfoVariant(&dbv); else DBFreeVariant(&dbv); break;} - lvi.pszText=dbv.ptszVal; - ListView_InsertItem(GetDlgItem(hwndDlg, IDC_PAST), &lvi); - ListView_SetItemText(GetDlgItem(hwndDlg, IDC_PAST), lvi.iItem, 1, dbvText.ptszVal); - DBFreeVariant(&dbvText); - if (proto_service) - Proto_FreeInfoVariant(&dbv); - else - DBFreeVariant(&dbv); - lvi.iItem++; - } - - ResizeColumns(GetDlgItem(hwndDlg, IDC_PAST)); - - //interests - ListView_DeleteAllItems(GetDlgItem(hwndDlg, IDC_INTERESTS)); - lvi.mask=LVIF_TEXT; - lvi.iSubItem=0; - lvi.iItem=0; - for (i=0;;i++) { - mir_snprintf(idstr, SIZEOF(idstr), "Interest%dCat", i); - if ((proto_service && Proto_GetContactInfoSetting(hContact, szProto, szProto, idstr, &dbv, DBVT_TCHAR)) || - ( !proto_service && DBGetContactSettingTString(hContact, szProto, idstr, &dbv))) - break; - mir_snprintf(idstr, SIZEOF(idstr), "Interest%dText", i); - if (DBGetContactSettingTString(hContact, szProto, idstr, &dbvText)) - {if (proto_service) Proto_FreeInfoVariant(&dbv); else DBFreeVariant(&dbv); break;} - lvi.pszText=dbv.ptszVal; - ListView_InsertItem(GetDlgItem(hwndDlg, IDC_INTERESTS), &lvi); - ListView_SetItemText(GetDlgItem(hwndDlg, IDC_INTERESTS), lvi.iItem, 1, dbvText.ptszVal); - DBFreeVariant(&dbvText); - if (proto_service) - Proto_FreeInfoVariant(&dbv); - else - DBFreeVariant(&dbv); - lvi.iItem++; - } - ResizeColumns(GetDlgItem(hwndDlg, IDC_INTERESTS)); - } } - break; - } - break; - case WM_COMMAND: - switch(LOWORD(wParam)) { - case IDCANCEL: - SendMessage(GetParent(hwndDlg), msg, wParam, lParam); - break; - case IDC_WEBPAGE: - if (IsWindowEnabled(GetDlgItem(hwndDlg, IDC_WEBPAGE))) { - char szPage[256]; - GetDlgItemTextA(hwndDlg, IDC_WEBPAGE, szPage, SIZEOF(szPage)); - CallService(MS_UTILS_OPENURL, 1, (LPARAM)szPage); - } - break; - } - break; - } - return FALSE; -} - -static INT_PTR CALLBACK NotesDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch(msg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - { DBVARIANT dbv; - HFONT hFont; - LOGFONT lf; - HDC hDC = GetDC(hwndDlg); - lf.lfHeight = -MulDiv(10, GetDeviceCaps(hDC, LOGPIXELSY), 72); - ReleaseDC(hwndDlg, hDC); - lf.lfWidth = 0; - lf.lfEscapement = 0; - lf.lfOrientation = 0; - lf.lfWeight = FW_NORMAL; - lf.lfItalic = 0; - lf.lfUnderline = 0; - lf.lfStrikeOut = 0; - lf.lfOutPrecision = OUT_DEFAULT_PRECIS; - lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; - lf.lfQuality = DEFAULT_QUALITY; - lf.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE; - lstrcpy(lf.lfFaceName, _T("Courier New")); - lf.lfCharSet = DEFAULT_CHARSET; -// hFont = (HFONT) GetStockObject(ANSI_FIXED_FONT); - hFont = CreateFontIndirect(&lf); - SendDlgItemMessage(hwndDlg, IDC_ABOUT, WM_SETFONT, (WPARAM) hFont, MAKELPARAM(TRUE, 0)); - - if ( !DBGetContactSettingString((HANDLE)lParam, "UserInfo", "MyNotes", &dbv)) { - SetDlgItemTextA(hwndDlg, IDC_MYNOTES, dbv.pszVal); - DBFreeVariant(&dbv); - } - } - SendDlgItemMessage(hwndDlg, IDC_MYNOTES, EM_LIMITTEXT, 2048, 0); - break; - case WM_NOTIFY: - switch (((LPNMHDR)lParam)->idFrom) { - case 0: - switch (((LPNMHDR)lParam)->code) { - case PSN_INFOCHANGED: - { char *szProto; - HANDLE hContact=(HANDLE)((LPPSHNOTIFY)lParam)->lParam; - if (hContact != NULL) { - szProto=(char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); - if (szProto == NULL) break; - SetValue(hwndDlg, IDC_ABOUT, hContact, szProto, "About", 0); - } - break; - } - case PSN_APPLY: - { HANDLE hContact=(HANDLE)((LPPSHNOTIFY)lParam)->lParam; - if (GetWindowTextLength(GetDlgItem(hwndDlg, IDC_MYNOTES))) { - char text[2048]; - GetDlgItemTextA(hwndDlg, IDC_MYNOTES, text, SIZEOF(text)); - DBWriteContactSettingString(hContact, "UserInfo", "MyNotes", text); - } - else DBDeleteContactSetting(hContact, "UserInfo", "MyNotes"); - break; - } - } - break; - } - break; - case WM_COMMAND: - if (wParam == MAKEWPARAM(IDC_MYNOTES, EN_CHANGE)) - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - else if (LOWORD(wParam) == IDCANCEL) - SendMessage(GetParent(hwndDlg), msg, wParam, lParam); - break; - case WM_DESTROY: - { - HFONT hFont = (HFONT)SendDlgItemMessage(hwndDlg, IDC_ABOUT, WM_GETFONT, 0, 0); - DeleteObject(hFont); - } - break; - } - return FALSE; -} - -int DetailsInit(WPARAM wParam, LPARAM lParam) -{ - OPTIONSDIALOGPAGE odp; - - if ((HANDLE)lParam == NULL) - return 0; - - if (CallService(MS_PROTO_GETCONTACTBASEPROTO, lParam, 0) == 0) - return 0; - - odp.cbSize = sizeof(odp); - odp.hIcon = NULL; - odp.hInstance = hInst; - odp.flags = 0; - - odp.pfnDlgProc = SummaryDlgProc; - odp.position = -2100000000; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_INFO_SUMMARY); - odp.pszTitle = LPGEN("Summary"); - UserInfo_AddPage(wParam, &odp); - - odp.pfnDlgProc = ContactDlgProc; - odp.position = -1800000000; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_INFO_CONTACT); - odp.pszTitle = LPGEN("Contact"); - UserInfo_AddPage(wParam, &odp); - - odp.pfnDlgProc = LocationDlgProc; - odp.position = -1500000000; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_INFO_LOCATION); - odp.pszTitle = LPGEN("Location"); - UserInfo_AddPage(wParam, &odp); - - odp.pfnDlgProc = WorkDlgProc; - odp.position = -1200000000; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_INFO_WORK); - odp.pszTitle = LPGEN("Work"); - UserInfo_AddPage(wParam, &odp); - - odp.pfnDlgProc = BackgroundDlgProc; - odp.position = -900000000; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_INFO_BACKGROUND); - odp.pszTitle = LPGEN("Background info"); - UserInfo_AddPage(wParam, &odp); - - odp.pfnDlgProc = NotesDlgProc; - odp.position = 0; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_INFO_NOTES); - odp.pszTitle = LPGEN("Notes"); - UserInfo_AddPage(wParam, &odp); - return 0; -} diff --git a/src/modules/userinfo/userinfo.cpp b/src/modules/userinfo/userinfo.cpp deleted file mode 100644 index 237c1bdee5..0000000000 --- a/src/modules/userinfo/userinfo.cpp +++ /dev/null @@ -1,634 +0,0 @@ -/* - -Miranda IM: the free IM client for Microsoft* Windows* - -Copyright 2000-2009 Miranda ICQ/IM project, -all portions of this codebase are copyrighted to the people -listed in contributors.txt. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -#include "..\..\core\commonheaders.h" -#define UPDATEANIMFRAMES 20 - -int DetailsInit(WPARAM wParam, LPARAM lParam); -static INT_PTR CALLBACK DlgProcDetails(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); -static HANDLE hWindowList=NULL; -static HANDLE hDetailsInitEvent; - -struct DetailsPageInit { - int pageCount; - OPTIONSDIALOGPAGE *odp; -}; - -struct DetailsPageData { - DLGTEMPLATE *pTemplate; - HINSTANCE hInst; - DLGPROC dlgProc; - LPARAM dlgParam; - HWND hwnd; - HTREEITEM hItem; - int changed; - TCHAR *ptszTitle, *ptszTab; -}; - -struct DetailsData { - HANDLE hContact; - HANDLE hProtoAckEvent; - HINSTANCE hInstIcmp; - HFONT hBoldFont; - int pageCount; - int currentPage; - struct DetailsPageData *opd; - RECT rcDisplay, rcDisplayTab; - int updateAnimFrame; - TCHAR szUpdating[64]; - int *infosUpdated; -}; - -static int PageSortProc(OPTIONSDIALOGPAGE *item1, OPTIONSDIALOGPAGE *item2) -{ - int res; - if ( !lstrcmp(item1->ptszTitle, TranslateT("Summary"))) return -1; - if ( !lstrcmp(item2->ptszTitle, TranslateT("Summary"))) return 1; - if (res = lstrcmp(item1->ptszTitle, item2->ptszTitle)) return res; - if (item1->ptszTab && !item2->ptszTab) return -1; - if ( !item1->ptszTab && item2->ptszTab) return 1; - if ( !item1->ptszTab && !item2->ptszTab) return 0; - if (item1->ptszTab && !lstrcmp(item1->ptszTab, TranslateT("General"))) return -1; - if (item2->ptszTab && !lstrcmp(item2->ptszTab, TranslateT("General"))) return 1; - return lstrcmp(item1->ptszTab, item2->ptszTab); -} - -static INT_PTR ShowDetailsDialogCommand(WPARAM wParam, LPARAM) -{ - HWND hwnd; - PROPSHEETHEADER psh; - struct DetailsPageInit opi; - int i; - - if (hwnd=WindowList_Find(hWindowList, (HANDLE)wParam)) { - SetForegroundWindow(hwnd); - SetFocus(hwnd); - return 0; - } - - opi.pageCount=0; - opi.odp=NULL; - NotifyEventHooks(hDetailsInitEvent, (WPARAM)&opi, wParam); - if (opi.pageCount == 0) return 0; - qsort(opi.odp, opi.pageCount, sizeof(OPTIONSDIALOGPAGE), (int (*)(const void*, const void*))PageSortProc); - - ZeroMemory(&psh, sizeof(psh)); - psh.dwSize = sizeof(psh); - psh.dwFlags = PSH_PROPSHEETPAGE|PSH_NOAPPLYNOW; - psh.hwndParent = NULL; - psh.nPages = opi.pageCount; - psh.pStartPage = 0; - psh.pszCaption = (TCHAR*)wParam; //more abuses of structure: this is hContact - psh.ppsp = (PROPSHEETPAGE*)opi.odp; //blatent misuse of the structure, but what the hell - - CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_DETAILS), NULL, DlgProcDetails, (LPARAM)&psh); - for (i=0;icbSize != sizeof(OPTIONSDIALOGPAGE) && odp->cbSize != OPTIONPAGE_OLD_SIZE) - return 1; - - opi->odp=(OPTIONSDIALOGPAGE*)mir_realloc(opi->odp, sizeof(OPTIONSDIALOGPAGE)*(opi->pageCount+1)); - dst = opi->odp + opi->pageCount; - dst->cbSize = sizeof(OPTIONSDIALOGPAGE); - dst->hInstance = odp->hInstance; - dst->pfnDlgProc = odp->pfnDlgProc; - dst->position = odp->position; - if ((DWORD_PTR)odp->pszTemplate&0xFFFF0000) dst->pszTemplate = mir_strdup(odp->pszTemplate); - else dst->pszTemplate = odp->pszTemplate; - - - if (odp->flags & ODPF_UNICODE) - { - dst->ptszTitle = (odp->ptszTitle == 0) ? NULL : mir_wstrdup(odp->ptszTitle); - dst->ptszTab = ( !(odp->flags & ODPF_USERINFOTAB) || !odp->ptszTab) ? NULL : mir_wstrdup(odp->ptszTab); - } - else - - { - if (odp->flags & ODPF_DONTTRANSLATE) - dst->ptszTitle = (odp->pszTitle == 0) ? NULL : mir_a2t(odp->pszTitle); - else - dst->ptszTitle = (odp->pszTitle == 0) ? NULL : Langpack_PcharToTchar(odp->pszTitle); - dst->ptszTab = ( !(odp->flags & ODPF_USERINFOTAB) || !odp->pszTab) ? NULL : Langpack_PcharToTchar(odp->pszTab); - } - - dst->pszGroup = NULL; - dst->groupPosition = odp->groupPosition; - dst->hGroupIcon = odp->hGroupIcon; - dst->hIcon = odp->hIcon; - if (odp->cbSize == sizeof(OPTIONSDIALOGPAGE)) - dst->dwInitParam = odp->dwInitParam; - opi->pageCount++; - return 0; -} - -static void ThemeDialogBackground(HWND hwnd) -{ - if (enableThemeDialogTexture) - enableThemeDialogTexture(hwnd, ETDT_ENABLETAB); -} - -static void CreateDetailsTabs(HWND hwndDlg, struct DetailsData* dat, struct DetailsPageData* ppg) -{ - HWND hwndTab = GetDlgItem(hwndDlg, IDC_TABS); - int i, sel=0, pages=0; - TCITEM tie; - tie.mask = TCIF_TEXT | TCIF_IMAGE | TCIF_PARAM; - tie.iImage = -1; - TabCtrl_DeleteAllItems(hwndTab); - for (i=0; i < dat->pageCount; i++) { - if ( !dat->opd[i].ptszTab || lstrcmp(dat->opd[i].ptszTitle, ppg->ptszTitle)) continue; - - tie.pszText = TranslateTS(dat->opd[i].ptszTab); - tie.lParam = i; - TabCtrl_InsertItem(hwndTab, pages, &tie); - if ( !lstrcmp(dat->opd[i].ptszTab, ppg->ptszTab)) - sel = pages; - pages++; - } - TabCtrl_SetCurSel(hwndTab, sel); - - LONG style = GetWindowLongPtr(hwndTab, GWL_STYLE); - SetWindowLongPtr(hwndTab, GWL_STYLE, pages > 1 ? style | WS_TABSTOP : style & ~WS_TABSTOP); -} - -static void CreateDetailsPageWindow(HWND hwndDlg, struct DetailsData* dat, struct DetailsPageData* ppg) -{ - RECT *rc = ppg->ptszTab ? &dat->rcDisplayTab : &dat->rcDisplay; - ppg->hwnd=CreateDialogIndirectParam(ppg->hInst, ppg->pTemplate, hwndDlg, ppg->dlgProc, (LPARAM)dat->hContact); - ThemeDialogBackground(ppg->hwnd); - SetWindowPos(ppg->hwnd, HWND_TOP, rc->left, rc->top, rc->right - rc->left, rc->bottom - rc->top, 0); - SetWindowPos(ppg->hwnd, HWND_TOP, rc->left, rc->top, rc->right - rc->left, rc->bottom - rc->top, 0); - { - PSHNOTIFY pshn; - pshn.hdr.code = PSN_PARAMCHANGED; - pshn.hdr.hwndFrom = ppg->hwnd; - pshn.hdr.idFrom = 0; - pshn.lParam = (LPARAM)ppg->dlgParam; - SendMessage(ppg->hwnd, WM_NOTIFY, 0, (LPARAM)&pshn); - - pshn.hdr.code=PSN_INFOCHANGED; - pshn.hdr.hwndFrom=ppg->hwnd; - pshn.hdr.idFrom=0; - pshn.lParam=(LPARAM)dat->hContact; - SendMessage(ppg->hwnd, WM_NOTIFY, 0, (LPARAM)&pshn); - } -} - -static int UserInfoContactDelete(WPARAM wParam, LPARAM) -{ - HWND hwnd; - hwnd=WindowList_Find(hWindowList, (HANDLE)wParam); - if (hwnd != NULL) DestroyWindow(hwnd); - return 0; -} - -#define HM_PROTOACK (WM_USER+10) -#define M_CHECKONLINE (WM_USER+11) -static INT_PTR CALLBACK DlgProcDetails(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - struct DetailsData *dat =(struct DetailsData*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); - - switch (msg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - Window_SetIcon_IcoLib(hwndDlg, SKINICON_OTHER_USERDETAILS); - { - PROPSHEETHEADER *psh = (PROPSHEETHEADER*)lParam; - dat = (DetailsData*)mir_calloc(sizeof(DetailsData)); - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)dat); - dat->hContact = (HANDLE)psh->pszCaption; - dat->hProtoAckEvent = HookEventMessage(ME_PROTO_ACK, hwndDlg, HM_PROTOACK); - WindowList_Add(hWindowList, hwndDlg, dat->hContact); - { - TCHAR *name, oldTitle[256], newTitle[256]; - if (dat->hContact == NULL) - name = TranslateT("Owner"); - else - name = cli.pfnGetContactDisplayName(dat->hContact, 0); - - GetWindowText(hwndDlg, oldTitle, SIZEOF(oldTitle)); - mir_sntprintf(newTitle, SIZEOF(newTitle), oldTitle, name); - SetWindowText(hwndDlg, newTitle); - - GetDlgItemText(hwndDlg, IDC_HEADERBAR, oldTitle, SIZEOF(oldTitle)); - mir_sntprintf(newTitle, SIZEOF(newTitle), oldTitle, name); - SetDlgItemText(hwndDlg, IDC_HEADERBAR, newTitle); - } - { LOGFONT lf; - HFONT hNormalFont=(HFONT)SendDlgItemMessage(hwndDlg, IDC_NAME, WM_GETFONT, 0, 0); - GetObject(hNormalFont, sizeof(lf), &lf); - lf.lfWeight=FW_BOLD; - dat->hBoldFont=CreateFontIndirect(&lf); - SendDlgItemMessage(hwndDlg, IDC_NAME, WM_SETFONT, (WPARAM)dat->hBoldFont, 0); - } - { OPTIONSDIALOGPAGE *odp; - int i; - TVINSERTSTRUCT tvis; - DBVARIANT dbv; - - HWND hwndTree = GetDlgItem(hwndDlg, IDC_PAGETREE); - - dat->currentPage = 0; - if (DBGetContactSettingTString(NULL, "UserInfo", "LastTab", &dbv)) - dbv.type = DBVT_DELETED; - dat->pageCount = psh->nPages; - dat->opd = (DetailsPageData*)mir_calloc(sizeof(DetailsPageData) * dat->pageCount); - odp = (OPTIONSDIALOGPAGE*)psh->ppsp; - - for (i=0; i < dat->pageCount; i++) { - dat->opd[i].pTemplate = (LPDLGTEMPLATE)LockResource(LoadResource(odp[i].hInstance, - FindResourceA(odp[i].hInstance, odp[i].pszTemplate, MAKEINTRESOURCEA(5)))); - dat->opd[i].dlgProc = odp[i].pfnDlgProc; - dat->opd[i].dlgParam = odp[i].dwInitParam; - dat->opd[i].hInst = odp[i].hInstance; - - dat->opd[i].ptszTitle = odp[i].ptszTitle; - dat->opd[i].ptszTab = odp[i].ptszTab; - - if (i && dat->opd[i].ptszTab && !lstrcmp(dat->opd[i-1].ptszTitle, dat->opd[i].ptszTitle)) { - dat->opd[i].hItem = dat->opd[i-1].hItem; - continue; - } - - tvis.hParent = NULL; - tvis.hInsertAfter = TVI_LAST; - tvis.item.mask = TVIF_TEXT | TVIF_PARAM; - tvis.item.lParam = (LPARAM) i; - if (odp[i].flags & ODPF_DONTTRANSLATE) - tvis.item.pszText = mir_tstrdup(odp[i].ptszTitle); - else - tvis.item.pszText = TranslateTS(odp[i].ptszTitle); - if (dbv.type != DBVT_DELETED && !lstrcmp(tvis.item.pszText, dbv.ptszVal)) - dat->currentPage = i; - dat->opd[i].hItem = TreeView_InsertItem(hwndTree, &tvis); - } - DBFreeVariant(&dbv); - } - - { - HWND hwndTab = GetDlgItem(hwndDlg, IDC_TABS); - - TCITEM tci; - tci.mask = TCIF_TEXT | TCIF_IMAGE; - tci.iImage = -1; - tci.pszText = _T("X"); - TabCtrl_InsertItem(hwndTab, 0, &tci); - - GetWindowRect(hwndTab, &dat->rcDisplayTab); - TabCtrl_AdjustRect(hwndTab, FALSE, &dat->rcDisplayTab); - { POINT pt={0, 0}; - ClientToScreen(hwndDlg, &pt); - OffsetRect(&dat->rcDisplayTab, -pt.x, -pt.y); - } - - TabCtrl_DeleteAllItems(hwndTab); - - GetWindowRect(hwndTab, &dat->rcDisplay); - TabCtrl_AdjustRect(hwndTab, FALSE, &dat->rcDisplay); - { POINT pt={0, 0}; - ClientToScreen(hwndDlg, &pt); - OffsetRect(&dat->rcDisplay, -pt.x, -pt.y); - } } - - TreeView_SelectItem(GetDlgItem(hwndDlg, IDC_PAGETREE), dat->opd[dat->currentPage].hItem); - - dat->updateAnimFrame = 0; - GetDlgItemText(hwndDlg, IDC_UPDATING, dat->szUpdating, SIZEOF(dat->szUpdating)); - SendMessage(hwndDlg, M_CHECKONLINE, 0, 0); - if ( !CallContactService(dat->hContact, PSS_GETINFO, SGIF_ONOPEN, 0)) { - EnableWindow(GetDlgItem(hwndDlg, IDC_UPDATE), FALSE); - SetTimer(hwndDlg, 1, 100, NULL); - } else - ShowWindow(GetDlgItem(hwndDlg, IDC_UPDATING), SW_HIDE); - - SetFocus(GetDlgItem(hwndDlg, IDC_PAGETREE)); - - return TRUE; - } - case WM_TIMER: - { - TCHAR str[128]; - mir_sntprintf(str, SIZEOF(str), _T("%.*s%s%.*s"), dat->updateAnimFrame%10, _T("........."), dat->szUpdating, dat->updateAnimFrame%10, _T(".........")); - SetDlgItemText(hwndDlg, IDC_UPDATING, str); - if (++dat->updateAnimFrame == UPDATEANIMFRAMES) dat->updateAnimFrame=0; - break; - } - case WM_CTLCOLORSTATIC: - switch (GetDlgCtrlID((HWND)lParam)) { - case IDC_WHITERECT: - SetBkColor((HDC)wParam, GetSysColor(COLOR_WINDOW)); - return (INT_PTR)GetSysColorBrush(COLOR_WINDOW); - case IDC_UPDATING: - { - COLORREF textCol, bgCol, newCol; - int ratio; - textCol=GetSysColor(COLOR_BTNTEXT); - bgCol=GetSysColor(COLOR_3DFACE); - ratio=abs(UPDATEANIMFRAMES/2-dat->updateAnimFrame)*510/UPDATEANIMFRAMES; - newCol=RGB(GetRValue(bgCol)+(GetRValue(textCol)-GetRValue(bgCol))*ratio/256, - GetGValue(bgCol)+(GetGValue(textCol)-GetGValue(bgCol))*ratio/256, - GetBValue(bgCol)+(GetBValue(textCol)-GetBValue(bgCol))*ratio/256); - SetTextColor((HDC)wParam, newCol); - SetBkColor((HDC)wParam, GetSysColor(COLOR_3DFACE)); - return (INT_PTR)GetSysColorBrush(COLOR_3DFACE); - } - default: - SetBkMode((HDC)wParam, TRANSPARENT); - return (INT_PTR)GetStockObject(NULL_BRUSH); - } - break; - - case PSM_CHANGED: - dat->opd[dat->currentPage].changed=1; - return TRUE; - - case PSM_FORCECHANGED: - { - int i; - PSHNOTIFY pshn; - pshn.hdr.code=PSN_INFOCHANGED; - pshn.hdr.idFrom=0; - pshn.lParam=(LPARAM)dat->hContact; - for (i=0;ipageCount;i++) { - pshn.hdr.hwndFrom=dat->opd[i].hwnd; - if (dat->opd[i].hwnd != NULL) - SendMessage(dat->opd[i].hwnd, WM_NOTIFY, 0, (LPARAM)&pshn); - } - break; - } - case M_CHECKONLINE: - { - char *szProto; - if (dat->hContact != NULL) { - szProto=(char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)dat->hContact, 0); - if (szProto == NULL) {EnableWindow(GetDlgItem(hwndDlg, IDC_UPDATE), FALSE); break;} - if (CallProtoServiceInt(NULL,szProto, PS_GETSTATUS, 0, 0)hContact == NULL && ack->type == ACKTYPE_STATUS) { - SendMessage(hwndDlg, M_CHECKONLINE, 0, 0); - break; - } - if (ack->hContact != dat->hContact) break; - if (ack->type != ACKTYPE_GETINFO) break; - SendMessage(hwndDlg, PSM_FORCECHANGED, 0, 0); - /* if they're not gonna send any more ACK's don't let that mean we should crash */ - if ( !ack->hProcess && !ack->lParam) { - ShowWindow(GetDlgItem(hwndDlg, IDC_UPDATING), SW_HIDE); - KillTimer(hwndDlg, 1); - SendMessage(hwndDlg, M_CHECKONLINE, 0, 0); - break; - } //if - if (dat->infosUpdated == NULL) dat->infosUpdated=(int*)mir_calloc(sizeof(int)*(INT_PTR)ack->hProcess); - if (ack->result == ACKRESULT_SUCCESS || ack->result == ACKRESULT_FAILED) dat->infosUpdated[ack->lParam]=1; - for (i=0;i<(int)ack->hProcess;i++) - if (dat->infosUpdated[i] == 0) break; - if (i == (int)ack->hProcess) { - ShowWindow(GetDlgItem(hwndDlg, IDC_UPDATING), SW_HIDE); - KillTimer(hwndDlg, 1); - SendMessage(hwndDlg, M_CHECKONLINE, 0, 0); - } } - break; - - case WM_NOTIFY: - switch(wParam) { - case IDC_TABS: - case IDC_PAGETREE: - switch(((LPNMHDR)lParam)->code) - { - case TCN_SELCHANGING: - case TVN_SELCHANGING: - if (dat->currentPage != -1 && dat->opd[dat->currentPage].hwnd != NULL) - { - PSHNOTIFY pshn; - pshn.hdr.code = PSN_KILLACTIVE; - pshn.hdr.hwndFrom = dat->opd[dat->currentPage].hwnd; - pshn.hdr.idFrom = 0; - pshn.lParam = (LPARAM)dat->hContact; - if (SendMessage(dat->opd[dat->currentPage].hwnd, WM_NOTIFY, 0, (LPARAM)&pshn)) - { - SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, TRUE); - return TRUE; - } - } - break; - - case TCN_SELCHANGE: - if (dat->currentPage != -1 && dat->opd[dat->currentPage].hwnd != NULL) - { - HWND hwndTab = GetDlgItem(hwndDlg, IDC_TABS); - ShowWindow(dat->opd[dat->currentPage].hwnd, SW_HIDE); - - TCITEM tie; - TVITEM tvi; - - tie.mask = TCIF_PARAM; - TabCtrl_GetItem(hwndTab, TabCtrl_GetCurSel(hwndTab), &tie); - dat->currentPage = tie.lParam; - - tvi.hItem = TreeView_GetNextItem(GetDlgItem(hwndDlg, IDC_PAGETREE), NULL, TVGN_CARET); - tvi.mask = TVIF_PARAM; - tvi.lParam = dat->currentPage; - TreeView_SetItem(GetDlgItem(hwndDlg, IDC_PAGETREE), &tvi); - - if (dat->currentPage != -1) - { - if (dat->opd[dat->currentPage].hwnd == NULL) - CreateDetailsPageWindow(hwndDlg, dat, &dat->opd[dat->currentPage]); - ShowWindow(dat->opd[dat->currentPage].hwnd, SW_SHOWNA); - } - } - break; - - case TVN_SELCHANGED: - if (dat->currentPage != -1 && dat->opd[dat->currentPage].hwnd != NULL) - ShowWindow(dat->opd[dat->currentPage].hwnd, SW_HIDE); - - { - LPNMTREEVIEW pnmtv = (LPNMTREEVIEW) lParam; - TVITEM tvi = pnmtv->itemNew; - dat->currentPage = tvi.lParam; - - if (dat->currentPage != -1) - { - CreateDetailsTabs(hwndDlg, dat, &dat->opd[dat->currentPage]); - if (dat->opd[dat->currentPage].hwnd == NULL) - CreateDetailsPageWindow(hwndDlg, dat, &dat->opd[dat->currentPage]); - ShowWindow(dat->opd[dat->currentPage].hwnd, SW_SHOWNA); - - } - } - break; - } - break; - } - break; - - case WM_COMMAND: - switch(LOWORD(wParam)) { - case IDCANCEL: - { - int i; - PSHNOTIFY pshn; - pshn.hdr.idFrom=0; - pshn.lParam=(LPARAM)dat->hContact; - pshn.hdr.code=PSN_RESET; - for (i=0;ipageCount;i++) { - if (dat->opd[i].hwnd == NULL || !dat->opd[i].changed) continue; - pshn.hdr.hwndFrom=dat->opd[i].hwnd; - SendMessage(dat->opd[i].hwnd, WM_NOTIFY, 0, (LPARAM)&pshn); - } - DestroyWindow(hwndDlg); - break; - } - case IDOK: - { - int i; - PSHNOTIFY pshn; - pshn.hdr.idFrom=0; - pshn.lParam=(LPARAM)dat->hContact; - if (dat->currentPage != -1) { - pshn.hdr.code=PSN_KILLACTIVE; - pshn.hdr.hwndFrom=dat->opd[dat->currentPage].hwnd; - if (SendMessage(dat->opd[dat->currentPage].hwnd, WM_NOTIFY, 0, (LPARAM)&pshn)) - break; - } - - pshn.hdr.code=PSN_APPLY; - for (i=0;ipageCount;i++) { - if (dat->opd[i].hwnd == NULL || !dat->opd[i].changed) continue; - pshn.hdr.hwndFrom=dat->opd[i].hwnd; - if (SendMessage(dat->opd[i].hwnd, WM_NOTIFY, 0, (LPARAM)&pshn) == PSNRET_INVALID_NOCHANGEPAGE) { - TreeView_Select(GetDlgItem(hwndDlg, IDC_PAGETREE), dat->opd[i].hItem, TVGN_CARET); - if (dat->currentPage != -1) ShowWindow(dat->opd[dat->currentPage].hwnd, SW_HIDE); - dat->currentPage=i; - ShowWindow(dat->opd[dat->currentPage].hwnd, SW_SHOW); - return 0; - } - } - DestroyWindow(hwndDlg); - break; - } - case IDC_UPDATE: - if (dat->infosUpdated != NULL) {mir_free(dat->infosUpdated); dat->infosUpdated=NULL;} - if (dat->hContact != NULL) { - if ( !CallContactService(dat->hContact, PSS_GETINFO, 0, 0)) { - EnableWindow(GetDlgItem(hwndDlg, IDC_UPDATE), FALSE); - ShowWindow(GetDlgItem(hwndDlg, IDC_UPDATING), SW_SHOW); - SetTimer(hwndDlg, 1, 100, NULL); - } - } - break; - } - break; - - case WM_CLOSE: - SendMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(IDOK, BN_CLICKED), (LPARAM)GetDlgItem(hwndDlg, IDOK)); - break; - - case WM_DESTROY: - { - TCHAR name[128]; - TVITEM tvi; - tvi.mask = TVIF_TEXT; - tvi.hItem = dat->opd[dat->currentPage].hItem; - tvi.pszText=name; - tvi.cchTextMax=SIZEOF(name); - TreeView_GetItem(GetDlgItem(hwndDlg, IDC_PAGETREE), &tvi); - DBWriteContactSettingTString(NULL, "UserInfo", "LastTab", name); - } - Window_FreeIcon_IcoLib(hwndDlg); - SendDlgItemMessage(hwndDlg, IDC_NAME, WM_SETFONT, SendDlgItemMessage(hwndDlg, IDC_WHITERECT, WM_GETFONT, 0, 0), 0); - DeleteObject(dat->hBoldFont); - WindowList_Remove(hWindowList, hwndDlg); - UnhookEvent(dat->hProtoAckEvent); - { int i; - for (i=0;ipageCount;i++) - { - if (dat->opd[i].hwnd != NULL) DestroyWindow(dat->opd[i].hwnd); - mir_free(dat->opd[i].ptszTitle); - mir_free(dat->opd[i].ptszTab); - } - } - mir_free(dat->infosUpdated); - mir_free(dat->opd); - mir_free(dat); - break; - } - return FALSE; -} - -int ShutdownUserInfo(WPARAM, LPARAM) -{ - WindowList_BroadcastAsync(hWindowList, WM_DESTROY, 0, 0); - return 0; -} - -int LoadUserInfoModule(void) -{ - CLISTMENUITEM mi = { 0 }; - - CreateServiceFunction(MS_USERINFO_SHOWDIALOG, ShowDetailsDialogCommand); - hDetailsInitEvent=CreateHookableEvent(ME_USERINFO_INITIALISE); - HookEvent(ME_USERINFO_INITIALISE, DetailsInit); - HookEvent(ME_DB_CONTACT_DELETED, UserInfoContactDelete); - HookEvent(ME_SYSTEM_PRESHUTDOWN, ShutdownUserInfo); - CreateServiceFunction("UserInfo/AddPage", AddDetailsPage); - - mi.cbSize = sizeof(mi); - mi.flags = CMIF_ICONFROMICOLIB; - mi.position = 1000050000; - mi.icolibItem = GetSkinIconHandle(SKINICON_OTHER_USERDETAILS); - mi.pszName = LPGEN("User &Details"); - mi.pszService = MS_USERINFO_SHOWDIALOG; - Menu_AddContactMenuItem(&mi); - - mi.position = 500050000; - mi.pszName = LPGEN("View/Change My &Details..."); - Menu_AddMainMenuItem(&mi); - - hWindowList = (HANDLE)CallService(MS_UTILS_ALLOCWINDOWLIST, 0, 0); - return 0; -} -- cgit v1.2.3