From cb4a46e7fbe62d788e66ed6121c717a2d22a4d7c Mon Sep 17 00:00:00 2001 From: watcherhd Date: Thu, 21 Apr 2011 14:14:52 +0000 Subject: svn.miranda.im is moving to a new home! git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@7 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- icqj_mod/icq_opts.c | 870 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 870 insertions(+) create mode 100644 icqj_mod/icq_opts.c (limited to 'icqj_mod/icq_opts.c') diff --git a/icqj_mod/icq_opts.c b/icqj_mod/icq_opts.c new file mode 100644 index 0000000..b70f14e --- /dev/null +++ b/icqj_mod/icq_opts.c @@ -0,0 +1,870 @@ +// ---------------------------------------------------------------------------80 +// ICQ plugin for Miranda Instant Messenger +// ________________________________________ +// +// Copyright © 2000,2001 Richard Hughes, Roland Rabien, Tristan Van de Vreede +// Copyright © 2001,2002 Jon Keating, Richard Hughes +// Copyright © 2002,2003,2004 Martin Öberg, Sam Kothari, Robert Rainwater +// Copyright © 2004,2005,2006 Joe Kucera +// +// 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. +// +// ----------------------------------------------------------------------------- +// +// File name : $Source: /cvsroot/miranda/miranda/protocols/IcqOscarJ/icq_opts.c,v $ +// Revision : $Revision: 3251 $ +// Last change on : $Date: 2006-06-30 00:12:33 +0200 (Fri, 30 Jun 2006) $ +// Last change by : $Author: jokusoftware $ +// +// DESCRIPTION: +// +// Describe me here please... +// +// ----------------------------------------------------------------------------- + +#include "icqoscar.h" + +#include +#include + + +static BOOL CALLBACK DlgProcIcqMain(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); +static BOOL CALLBACK DlgProcIcqOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); +static BOOL CALLBACK DlgProcIcqContactsOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); +static BOOL CALLBACK DlgProcIcqFeaturesOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); +static BOOL CALLBACK DlgProcIcqPrivacyOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); + + +static const char* szLogLevelDescr[] = {"Display all problems", "Display problems causing possible loss of data", "Display explanations for disconnection", "Display problems requiring user intervention"}; + +static BOOL (WINAPI *pfnEnableThemeDialogTexture)(HANDLE, DWORD) = 0; + + +static void AddUniPageUtf(const char* szService, OPTIONSDIALOGPAGE *op, WPARAM wParam, const char *szGroup, const char *szTitle) +{ + char str[MAX_PATH]; + char *pszTitle; + + if (strstr(szTitle, "%s")) + { + char *lTitle = ICQTranslateUtfStatic(szTitle, str); + int size = strlennull(lTitle) + strlennull(gpszICQProtoName); + + pszTitle = (char*)_alloca(size); + null_snprintf(pszTitle, size, lTitle, gpszICQProtoName); + } + else + pszTitle = (char*)ICQTranslateUtfStatic(szTitle, str); + + if (gbUnicodeCore) + { + wchar_t *utitle, *ugroup; + + utitle = make_unicode_string(pszTitle); + if (szGroup) + ugroup = make_unicode_string(ICQTranslateUtfStatic(szGroup, str)); + else + ugroup = NULL; + op->pszTitle = (char*)utitle; // this is union with ptszTitle + op->pszGroup = (char*)ugroup; + op->flags |= ODPF_UNICODE; + CallService(szService, wParam, (LPARAM)op); + SAFE_FREE(&utitle); + SAFE_FREE(&ugroup); + } + else + { + char *title, *group, *tmp; + int size; + + size = strlennull(pszTitle) + 2; + title = (char*)_alloca(size); + utf8_decode_static(pszTitle, title, size); + if (szGroup) + { + tmp = ICQTranslateUtfStatic(szGroup, str); + size = strlennull(tmp) + 2; + group = (char*)_alloca(size); + utf8_decode_static(tmp, group, size); + } + else + group = NULL; + op->pszTitle = title; + op->pszGroup = group; + CallService(szService, wParam, (LPARAM)op); + } +} + + + +void AddOptionsPageUtf(OPTIONSDIALOGPAGE *op, WPARAM wParam, const char *szGroup, const char *szTitle) +{ + AddUniPageUtf(MS_OPT_ADDPAGE, op, wParam, szGroup, szTitle); +} + + + +void AddUserInfoPageUtf(OPTIONSDIALOGPAGE *op, WPARAM wParam, const char *szTitle) +{ + AddUniPageUtf(MS_USERINFO_ADDPAGE, op, wParam, NULL, szTitle); +} + + +HWND hOptBasic = 0, hOptContacts = 0, hOptFeatures = 0, hOptPrivacy = 0; + +static void TabOptions_AddItemUtf(HWND hTabCtrl, const char* szTitle, HWND hPage) +{ + TCITEM tci = {0}; + RECT rcClient; + char* szTitleUtf; + int iTotal; + + GetClientRect(GetParent(hTabCtrl), &rcClient); + + szTitleUtf = ICQTranslateUtf(szTitle); + + iTotal = TabCtrl_GetItemCount(hTabCtrl); + + tci.mask = TCIF_PARAM|TCIF_TEXT; + tci.lParam = (LPARAM)hPage; + if (gbUnicodeAPI) + { + tci.pszText = (char*)make_unicode_string(szTitleUtf); + SendMessageW(hTabCtrl, TCM_INSERTITEMW, iTotal, (WPARAM)&tci); + } + else + { + utf8_decode(szTitleUtf, &tci.pszText); + SendMessageA(hTabCtrl, TCM_INSERTITEMA, iTotal, (WPARAM)&tci); + } + SAFE_FREE(&tci.pszText); + SAFE_FREE(&szTitleUtf); + + MoveWindow(hPage, 3, 24, rcClient.right - 6, rcClient.bottom - 28, 1); +} + +static void SetOptionsDlgToType(HWND hwnd, int iExpert) +{ + HWND hwndTab = GetDlgItem(hwnd, IDC_OPTIONSTAB), hwndEnum; + + if (!hOptBasic) + { + hOptBasic = CreateDialogUtf(hInst, MAKEINTRESOURCE(IDD_OPT_ICQ), hwnd, DlgProcIcqOpts); + if (pfnEnableThemeDialogTexture) + pfnEnableThemeDialogTexture(hOptBasic, ETDT_ENABLETAB); + } + + hwndEnum = GetWindow(hOptBasic, GW_CHILD); + + while (hwndEnum) + { // too bad + ShowWindow(hwndEnum, iExpert ? SW_SHOW : SW_HIDE); + hwndEnum = GetWindow(hwndEnum, GW_HWNDNEXT); + } + + if (!iExpert) + { + hwndEnum = GetDlgItem(hOptBasic, IDC_STICQGROUP); + ShowWindow(hwndEnum, SW_SHOW); + hwndEnum = GetWindow(hwndEnum, GW_HWNDNEXT); + do { + ShowWindow(hwndEnum, SW_SHOW); + hwndEnum = GetWindow(hwndEnum, GW_HWNDNEXT); + } while(hwndEnum && hwndEnum != GetDlgItem(hOptBasic, IDC_NEWUINLINK)); + } + ShowWindow(hwndEnum, SW_SHOW); + TabCtrl_DeleteAllItems(hwndTab); + + TabOptions_AddItemUtf(hwndTab, "Account", hOptBasic); + + if (!hOptContacts) + { + hOptContacts = CreateDialogUtf(hInst, MAKEINTRESOURCE(IDD_OPT_ICQCONTACTS), hwnd, DlgProcIcqContactsOpts); + if (pfnEnableThemeDialogTexture) + pfnEnableThemeDialogTexture(hOptContacts, ETDT_ENABLETAB); + } + + if (!hOptFeatures) + { + hOptFeatures = CreateDialogUtf(hInst, MAKEINTRESOURCE(IDD_OPT_ICQFEATURES), hwnd, DlgProcIcqFeaturesOpts); + if (pfnEnableThemeDialogTexture) + pfnEnableThemeDialogTexture(hOptFeatures, ETDT_ENABLETAB); + } + + if (!hOptPrivacy) + { + hOptPrivacy = CreateDialogUtf(hInst, MAKEINTRESOURCE(IDI_PRIVACY), hwnd, DlgProcIcqPrivacyOpts); + if (pfnEnableThemeDialogTexture) + pfnEnableThemeDialogTexture(hOptPrivacy, ETDT_ENABLETAB); + } + + ShowWindow(hOptContacts, SW_HIDE); + ShowWindow(hOptPrivacy, SW_HIDE); + if (hOptFeatures) + ShowWindow(hOptFeatures, SW_HIDE); + ShowWindow(hOptBasic, SW_SHOW); + + TabOptions_AddItemUtf(hwndTab, "Contacts", hOptContacts); + if (iExpert) + TabOptions_AddItemUtf(hwndTab, "Features", hOptFeatures); + TabOptions_AddItemUtf(hwndTab, "Privacy", hOptPrivacy); + + TabCtrl_SetCurSel(hwndTab, 0); +} + + +int IcqOptInit(WPARAM wParam, LPARAM lParam) +{ + OPTIONSDIALOGPAGE odp = {0}; + HMODULE hUxTheme = 0; + + if (IsWinVerXPPlus()) + { + hUxTheme = GetModuleHandle("uxtheme.dll"); + + if (hUxTheme) + pfnEnableThemeDialogTexture = (BOOL (WINAPI *)(HANDLE, DWORD))GetProcAddress(hUxTheme, "EnableThemeDialogTexture"); + } + + odp.cbSize = sizeof(odp); + odp.position = -800000000; + odp.hInstance = hInst; + odp.pszTemplate = MAKEINTRESOURCE(IDD_OPT_ICQMAIN); + odp.pfnDlgProc = DlgProcIcqMain; + odp.flags = ODPF_BOLDGROUPS; + odp.nIDBottomSimpleControl = 0; + AddOptionsPageUtf(&odp, wParam, "Network", gpszICQProtoName); + + InitPopupOpts(wParam); + + return 0; +} + + + +static void LoadDBCheckState(HWND hwndDlg, int idCtrl, const char* szSetting, BYTE bDef) +{ + CheckDlgButton(hwndDlg, idCtrl, ICQGetContactSettingByte(NULL, szSetting, bDef)); +} + + + +static void StoreDBCheckState(HWND hwndDlg, int idCtrl, const char* szSetting) +{ + ICQWriteContactSettingByte(NULL, szSetting, (BYTE)IsDlgButtonChecked(hwndDlg, idCtrl)); +} + + + +static void OptDlgChanged(HWND hwndDlg) +{ + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); +} + + +// tabbed options page wrapper + +static BOOL CALLBACK DlgProcIcqMain(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + static int iInit = TRUE; + + switch(msg) + { + case WM_INITDIALOG: + { + int iExpert; + + iInit = TRUE; + iExpert = SendMessage(GetParent(hwnd), PSM_ISEXPERT, 0, 0); + SetOptionsDlgToType(hwnd, iExpert); + iInit = FALSE; + return FALSE; + } + + case WM_DESTROY: + hOptBasic = hOptContacts = hOptFeatures = hOptPrivacy = 0; + break; + + case PSM_CHANGED: // used so tabs dont have to call SendMessage(GetParent(GetParent(hwnd)), PSM_CHANGED, 0, 0); + if (!iInit) OptDlgChanged(hwnd); + break; + + case WM_NOTIFY: + switch (((LPNMHDR)lParam)->idFrom) + { + case 0: + switch (((LPNMHDR)lParam)->code) + { + case PSN_APPLY: + { + TCITEM tci; + int i,count; + + tci.mask = TCIF_PARAM; + count = TabCtrl_GetItemCount(GetDlgItem(hwnd,IDC_OPTIONSTAB)); + for (i=0; icode) + { + case TCN_SELCHANGING: + { + TCITEM tci; + + tci.mask = TCIF_PARAM; + TabCtrl_GetItem(hTabCtrl, TabCtrl_GetCurSel(hTabCtrl), &tci); + ShowWindow((HWND)tci.lParam, SW_HIDE); + } + break; + + case TCN_SELCHANGE: + { + TCITEM tci; + + tci.mask = TCIF_PARAM; + TabCtrl_GetItem(hTabCtrl, TabCtrl_GetCurSel(hTabCtrl), &tci); + ShowWindow((HWND)tci.lParam,SW_SHOW); + } + break; + } + break; + } + } + break; + } + return FALSE; +} + + +// standalone option pages + +static BOOL CALLBACK DlgProcIcqOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) + { + case WM_INITDIALOG: + { + char pszPwd[16]; + char szServer[MAX_PATH]; + + ICQTranslateDialog(hwndDlg); + + SetDlgItemInt(hwndDlg, IDC_ICQNUM, ICQGetContactSettingUIN(NULL), FALSE); + + if (!ICQGetContactStaticString(NULL, "Password", pszPwd, sizeof(pszPwd))) + { + CallService(MS_DB_CRYPT_DECODESTRING, strlennull(pszPwd) + 1, (LPARAM)pszPwd); + + //bit of a security hole here, since it's easy to extract a password from an edit box + SetDlgItemText(hwndDlg, IDC_PASSWORD, pszPwd); + } + + if (!ICQGetContactStaticString(NULL, "OscarServer", szServer, MAX_PATH)) + { + SetDlgItemText(hwndDlg, IDC_ICQSERVER, szServer); + } + else + { + SetDlgItemText(hwndDlg, IDC_ICQSERVER, DEFAULT_SERVER_HOST); + } + + SetDlgItemInt(hwndDlg, IDC_ICQPORT, ICQGetContactSettingWord(NULL, "OscarPort", DEFAULT_SERVER_PORT), FALSE); + LoadDBCheckState(hwndDlg, IDC_KEEPALIVE, "KeepAlive", 1); + LoadDBCheckState(hwndDlg, IDC_USEGATEWAY, "UseGateway", 0); + LoadDBCheckState(hwndDlg, IDC_SECURE, "SecureLogin", DEFAULT_SECURE_LOGIN); + SendDlgItemMessage(hwndDlg, IDC_LOGLEVEL, TBM_SETRANGE, FALSE, MAKELONG(0, 3)); + SendDlgItemMessage(hwndDlg, IDC_LOGLEVEL, TBM_SETPOS, TRUE, 3-ICQGetContactSettingByte(NULL, "ShowLogLevel", LOG_WARNING)); + SetDlgItemTextUtf(hwndDlg, IDC_LEVELDESCR, ICQTranslateUtfStatic(szLogLevelDescr[3-SendDlgItemMessage(hwndDlg, IDC_LOGLEVEL, TBM_GETPOS, 0, 0)], szServer)); + ShowWindow(GetDlgItem(hwndDlg, IDC_RECONNECTREQD), SW_HIDE); + LoadDBCheckState(hwndDlg, IDC_NOERRMULTI, "IgnoreMultiErrorBox", 0); + + return TRUE; + } + + case WM_HSCROLL: + { + char str[MAX_PATH]; + + SetDlgItemTextUtf(hwndDlg, IDC_LEVELDESCR, ICQTranslateUtfStatic(szLogLevelDescr[3-SendDlgItemMessage(hwndDlg, IDC_LOGLEVEL,TBM_GETPOS, 0, 0)], str)); + OptDlgChanged(hwndDlg); + } + break; + + case WM_COMMAND: + { + switch (LOWORD(wParam)) + { + + case IDC_LOOKUPLINK: + CallService(MS_UTILS_OPENURL, 1, (LPARAM)URL_FORGOT_PASSWORD); + return TRUE; + + case IDC_NEWUINLINK: + CallService(MS_UTILS_OPENURL, 1, (LPARAM)URL_REGISTER); + return TRUE; + + case IDC_RESETSERVER: + SetDlgItemText(hwndDlg, IDC_ICQSERVER, DEFAULT_SERVER_HOST); + SetDlgItemInt(hwndDlg, IDC_ICQPORT, DEFAULT_SERVER_PORT, FALSE); + OptDlgChanged(hwndDlg); + return TRUE; + } + + if (icqOnline && LOWORD(wParam) != IDC_NOERRMULTI) + { + char szClass[80]; + + + GetClassName((HWND)lParam, szClass, sizeof(szClass)); + + if (lstrcmpi(szClass, "EDIT") || HIWORD(wParam) == EN_CHANGE) + ShowWindow(GetDlgItem(hwndDlg, IDC_RECONNECTREQD), SW_SHOW); + } + + if ((LOWORD(wParam)==IDC_ICQNUM || LOWORD(wParam)==IDC_PASSWORD || LOWORD(wParam)==IDC_ICQSERVER || LOWORD(wParam)==IDC_ICQPORT) && + (HIWORD(wParam)!=EN_CHANGE || (HWND)lParam!=GetFocus())) + { + return 0; + } + + OptDlgChanged(hwndDlg); + break; + } + + case WM_NOTIFY: + { + switch (((LPNMHDR)lParam)->code) + { + + case PSN_APPLY: + { + char str[128]; + + ICQWriteContactSettingDword(NULL, UNIQUEIDSETTING, (DWORD)GetDlgItemInt(hwndDlg, IDC_ICQNUM, NULL, FALSE)); + GetDlgItemText(hwndDlg, IDC_PASSWORD, str, sizeof(str)); + if (strlennull(str)) + { + strcpy(gpszPassword, str); + gbRememberPwd = TRUE; + } + else + { + gbRememberPwd = ICQGetContactSettingByte(NULL, "RememberPass", 0); + } + CallService(MS_DB_CRYPT_ENCODESTRING, sizeof(str), (LPARAM)str); + ICQWriteContactSettingString(NULL, "Password", str); + GetDlgItemText(hwndDlg,IDC_ICQSERVER, str, sizeof(str)); + ICQWriteContactSettingString(NULL, "OscarServer", str); + ICQWriteContactSettingWord(NULL, "OscarPort", (WORD)GetDlgItemInt(hwndDlg, IDC_ICQPORT, NULL, FALSE)); + StoreDBCheckState(hwndDlg, IDC_KEEPALIVE, "KeepAlive"); + StoreDBCheckState(hwndDlg, IDC_USEGATEWAY, "UseGateway"); + StoreDBCheckState(hwndDlg, IDC_SECURE, "SecureLogin"); + StoreDBCheckState(hwndDlg, IDC_NOERRMULTI, "IgnoreMultiErrorBox"); + ICQWriteContactSettingByte(NULL, "ShowLogLevel", (BYTE)(3-SendDlgItemMessage(hwndDlg, IDC_LOGLEVEL, TBM_GETPOS, 0, 0))); + + return TRUE; + } + } + } + break; + } + + return FALSE; +} + + + +static const UINT icqPrivacyControls[]={IDC_DCALLOW_ANY, IDC_DCALLOW_CLIST, IDC_DCALLOW_AUTH, IDC_ADD_ANY, IDC_ADD_AUTH, IDC_WEBAWARE, IDC_PUBLISHPRIMARY, IDC_STATIC_DC1, IDC_STATIC_DC2, IDC_STATIC_CLIST}; +static BOOL CALLBACK DlgProcIcqPrivacyOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) + { + + case WM_INITDIALOG: + { + int nDcType; + int nAddAuth; + + nDcType = ICQGetContactSettingByte(NULL, "DCType", 0); + nAddAuth = ICQGetContactSettingByte(NULL, "Auth", 1); + + ICQTranslateDialog(hwndDlg); + if (!icqOnline) + { + icq_EnableMultipleControls(hwndDlg, icqPrivacyControls, sizeof(icqPrivacyControls)/sizeof(icqPrivacyControls[0]), FALSE); + ShowWindow(GetDlgItem(hwndDlg, IDC_STATIC_NOTONLINE), SW_SHOW); + } + else + { + ShowWindow(GetDlgItem(hwndDlg, IDC_STATIC_NOTONLINE), SW_HIDE); + } + CheckDlgButton(hwndDlg, IDC_DCALLOW_ANY, (nDcType == 0)); + CheckDlgButton(hwndDlg, IDC_DCALLOW_CLIST, (nDcType == 1)); + CheckDlgButton(hwndDlg, IDC_DCALLOW_AUTH, (nDcType == 2)); + CheckDlgButton(hwndDlg, IDC_ADD_ANY, (nAddAuth == 0)); + CheckDlgButton(hwndDlg, IDC_ADD_AUTH, (nAddAuth == 1)); + LoadDBCheckState(hwndDlg, IDC_WEBAWARE, "WebAware", 0); + LoadDBCheckState(hwndDlg, IDC_PUBLISHPRIMARY, "PublishPrimaryEmail", 0); + LoadDBCheckState(hwndDlg, IDC_STATUSMSG_CLIST, "StatusMsgReplyCList", 0); + LoadDBCheckState(hwndDlg, IDC_STATUSMSG_VISIBLE, "StatusMsgReplyVisible", 0); + if (!ICQGetContactSettingByte(NULL, "StatusMsgReplyCList", 0)) + EnableDlgItem(hwndDlg, IDC_STATUSMSG_VISIBLE, FALSE); + + return TRUE; + } + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDC_DCALLOW_ANY: + case IDC_DCALLOW_CLIST: + case IDC_DCALLOW_AUTH: + case IDC_ADD_ANY: + case IDC_ADD_AUTH: + case IDC_WEBAWARE: + case IDC_PUBLISHPRIMARY: + case IDC_STATUSMSG_VISIBLE: + if ((HWND)lParam != GetFocus()) return 0; + break; + case IDC_STATUSMSG_CLIST: + if (IsDlgButtonChecked(hwndDlg, IDC_STATUSMSG_CLIST)) + { + EnableDlgItem(hwndDlg, IDC_STATUSMSG_VISIBLE, TRUE); + LoadDBCheckState(hwndDlg, IDC_STATUSMSG_VISIBLE, "StatusMsgReplyVisible", 0); + } + else + { + EnableDlgItem(hwndDlg, IDC_STATUSMSG_VISIBLE, FALSE); + CheckDlgButton(hwndDlg, IDC_STATUSMSG_VISIBLE, FALSE); + } + break; + default: + return 0; + } + OptDlgChanged(hwndDlg); + break; + + case WM_NOTIFY: + switch (((LPNMHDR)lParam)->code) + { + case PSN_APPLY: + StoreDBCheckState(hwndDlg, IDC_WEBAWARE, "WebAware"); + StoreDBCheckState(hwndDlg, IDC_PUBLISHPRIMARY, "PublishPrimaryEmail"); + StoreDBCheckState(hwndDlg, IDC_STATUSMSG_CLIST, "StatusMsgReplyCList"); + StoreDBCheckState(hwndDlg, IDC_STATUSMSG_VISIBLE, "StatusMsgReplyVisible"); + if (IsDlgButtonChecked(hwndDlg, IDC_DCALLOW_AUTH)) + ICQWriteContactSettingByte(NULL, "DCType", 2); + else if (IsDlgButtonChecked(hwndDlg, IDC_DCALLOW_CLIST)) + ICQWriteContactSettingByte(NULL, "DCType", 1); + else + ICQWriteContactSettingByte(NULL, "DCType", 0); + StoreDBCheckState(hwndDlg, IDC_ADD_AUTH, "Auth"); + + if (icqOnline) + { + PBYTE buf=NULL; + int buflen=0; + + ppackTLVLNTSBytefromDB(&buf, &buflen, "e-mail", (BYTE)!ICQGetContactSettingByte(NULL, "PublishPrimaryEmail", 0), TLV_EMAIL); + ppackTLVLNTSBytefromDB(&buf, &buflen, "e-mail0", 0, TLV_EMAIL); + ppackTLVLNTSBytefromDB(&buf, &buflen, "e-mail1", 0, TLV_EMAIL); + + ppackTLVByte(&buf, &buflen, (BYTE)!ICQGetContactSettingByte(NULL, "Auth", 1), TLV_AUTH, 1); + + ppackTLVByte(&buf, &buflen, (BYTE)ICQGetContactSettingByte(NULL, "WebAware", 0), TLV_WEBAWARE, 1); + + icq_changeUserDetailsServ(META_SET_FULLINFO_REQ, buf, (WORD)buflen); + + SAFE_FREE(&buf); + + // Send a status packet to notify the server about the webaware setting + { + WORD wStatus; + + wStatus = MirandaStatusToIcq(gnCurrentStatus); + + if (gnCurrentStatus == ID_STATUS_INVISIBLE) + { + + + if (gbSsiEnabled) + updateServVisibilityCode(3); + icq_setstatus(wStatus); + // Tell who is on our visible list + icq_sendEntireVisInvisList(0); + } + else + { + icq_setstatus(wStatus); + if (gbSsiEnabled) + updateServVisibilityCode(4); + // Tell who is on our invisible list + icq_sendEntireVisInvisList(1); + } + } + } + return TRUE; + } + break; + } + + return FALSE; +} + +static HWND hCpCombo; + +struct CPTABLE { + WORD cpId; + char *cpName; +}; + +struct CPTABLE cpTable[] = { + { 874, "Thai" }, + { 932, "Japanese" }, + { 936, "Simplified Chinese" }, + { 949, "Korean" }, + { 950, "Traditional Chinese" }, + { 1250, "Central European" }, + { 1251, "Cyrillic" }, + { 1252, "Latin I" }, + { 1253, "Greek" }, + { 1254, "Turkish" }, + { 1255, "Hebrew" }, + { 1256, "Arabic" }, + { 1257, "Baltic" }, + { 1258, "Vietnamese" }, + { 1361, "Korean (Johab)" }, + { -1, NULL} +}; + +static BOOL CALLBACK FillCpCombo(LPCSTR str) +{ + int i; + UINT cp; + + cp = atoi(str); + for (i=0; cpTable[i].cpName != NULL && cpTable[i].cpId!=cp; i++); + if (cpTable[i].cpName != NULL) + { + ComboBoxAddStringUtf(hCpCombo, cpTable[i].cpName, cpTable[i].cpId); + } + return TRUE; +} + + +static const UINT icqUnicodeControls[] = {IDC_UTFALL,IDC_UTFSTATIC,IDC_UTFCODEPAGE}; +static const UINT icqDCMsgControls[] = {IDC_DCPASSIVE}; +static const UINT icqXStatusControls[] = {IDC_XSTATUSAUTO,IDC_XSTATUSRESET}; +static const UINT icqAimControls[] = {IDC_AIMENABLE}; +static BOOL CALLBACK DlgProcIcqFeaturesOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) + { + case WM_INITDIALOG: + { + BYTE bData; + int sCodePage; + int i; + + ICQTranslateDialog(hwndDlg); + bData = ICQGetContactSettingByte(NULL, "UtfEnabled", DEFAULT_UTF_ENABLED); + CheckDlgButton(hwndDlg, IDC_UTFENABLE, bData?TRUE:FALSE); + CheckDlgButton(hwndDlg, IDC_UTFALL, bData==2?TRUE:FALSE); + icq_EnableMultipleControls(hwndDlg, icqUnicodeControls, sizeof(icqUnicodeControls)/sizeof(icqUnicodeControls[0]), bData?TRUE:FALSE); + LoadDBCheckState(hwndDlg, IDC_TEMPVISIBLE, "TempVisListEnabled",DEFAULT_TEMPVIS_ENABLED); + LoadDBCheckState(hwndDlg, IDC_SLOWSEND, "SlowSend", DEFAULT_SLOWSEND); + LoadDBCheckState(hwndDlg, IDC_ONLYSERVERACKS, "OnlyServerAcks", DEFAULT_ONLYSERVERACKS); + bData = ICQGetContactSettingByte(NULL, "DirectMessaging", DEFAULT_DCMSG_ENABLED); + CheckDlgButton(hwndDlg, IDC_DCENABLE, bData?TRUE:FALSE); + CheckDlgButton(hwndDlg, IDC_DCPASSIVE, bData==1?TRUE:FALSE); + icq_EnableMultipleControls(hwndDlg, icqDCMsgControls, sizeof(icqDCMsgControls)/sizeof(icqDCMsgControls[0]), bData?TRUE:FALSE); + bData = DBGetContactSettingByte(NULL,gpszICQProtoName,"ASD", 0); + CheckDlgButton(hwndDlg, IDC_ASD, bData); + bData = ICQGetContactSettingByte(NULL, "XStatusEnabled", DEFAULT_XSTATUS_ENABLED); + CheckDlgButton(hwndDlg, IDC_XSTATUSENABLE, bData); + icq_EnableMultipleControls(hwndDlg, icqXStatusControls, sizeof(icqXStatusControls)/sizeof(icqXStatusControls[0]), bData); + LoadDBCheckState(hwndDlg, IDC_XSTATUSAUTO, "XStatusAuto", DEFAULT_XSTATUS_AUTO); + LoadDBCheckState(hwndDlg, IDC_XSTATUSRESET, "XStatusReset", DEFAULT_XSTATUS_RESET); + LoadDBCheckState(hwndDlg, IDC_KILLSPAMBOTS, "KillSpambots", DEFAULT_KILLSPAM_ENABLED); + LoadDBCheckState(hwndDlg, IDC_AIMENABLE, "AimEnabled", DEFAULT_AIM_ENABLED); + icq_EnableMultipleControls(hwndDlg, icqAimControls, sizeof(icqAimControls)/sizeof(icqAimControls[0]), icqOnline?FALSE:TRUE); + + hCpCombo = GetDlgItem(hwndDlg, IDC_UTFCODEPAGE); + sCodePage = ICQGetContactSettingWord(NULL, "AnsiCodePage", CP_ACP); + ComboBoxAddStringUtf(GetDlgItem(hwndDlg, IDC_UTFCODEPAGE), "System default codepage", 0); + EnumSystemCodePagesA(FillCpCombo, CP_INSTALLED); + if(sCodePage == 0) + SendDlgItemMessage(hwndDlg, IDC_UTFCODEPAGE, CB_SETCURSEL, (WPARAM)0, 0); + else + { + for (i = 0; i < SendDlgItemMessage(hwndDlg, IDC_UTFCODEPAGE, CB_GETCOUNT, 0, 0); i++) + { + if (SendDlgItemMessage(hwndDlg, IDC_UTFCODEPAGE, CB_GETITEMDATA, (WPARAM)i, 0) == sCodePage) + { + SendDlgItemMessage(hwndDlg, IDC_UTFCODEPAGE, CB_SETCURSEL, (WPARAM)i, 0); + break; + } + } + } + + return TRUE; + } + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDC_UTFENABLE: + icq_EnableMultipleControls(hwndDlg, icqUnicodeControls, sizeof(icqUnicodeControls)/sizeof(icqUnicodeControls[0]), IsDlgButtonChecked(hwndDlg, IDC_UTFENABLE)); + break; + case IDC_DCENABLE: + icq_EnableMultipleControls(hwndDlg, icqDCMsgControls, sizeof(icqDCMsgControls)/sizeof(icqDCMsgControls[0]), IsDlgButtonChecked(hwndDlg, IDC_DCENABLE)); + break; + case IDC_XSTATUSENABLE: + icq_EnableMultipleControls(hwndDlg, icqXStatusControls, sizeof(icqXStatusControls)/sizeof(icqXStatusControls[0]), IsDlgButtonChecked(hwndDlg, IDC_XSTATUSENABLE)); + break; + } + OptDlgChanged(hwndDlg); + break; + + case WM_NOTIFY: + switch (((LPNMHDR)lParam)->code) + { + case PSN_APPLY: + ICQWriteContactSettingByte(NULL,"ASD",(BYTE)IsDlgButtonChecked(hwndDlg,IDC_ASD)); + + if (IsDlgButtonChecked(hwndDlg, IDC_UTFENABLE)) + gbUtfEnabled = IsDlgButtonChecked(hwndDlg, IDC_UTFALL)?2:1; + else + gbUtfEnabled = 0; + { + int i = SendDlgItemMessage(hwndDlg, IDC_UTFCODEPAGE, CB_GETCURSEL, 0, 0); + gwAnsiCodepage = (WORD)SendDlgItemMessage(hwndDlg, IDC_UTFCODEPAGE, CB_GETITEMDATA, (WPARAM)i, 0); + ICQWriteContactSettingWord(NULL, "AnsiCodePage", gwAnsiCodepage); + } + ICQWriteContactSettingByte(NULL, "UtfEnabled", gbUtfEnabled); + gbTempVisListEnabled = (BYTE)IsDlgButtonChecked(hwndDlg, IDC_TEMPVISIBLE); + ICQWriteContactSettingByte(NULL, "TempVisListEnabled", gbTempVisListEnabled); + StoreDBCheckState(hwndDlg, IDC_SLOWSEND, "SlowSend"); + StoreDBCheckState(hwndDlg, IDC_ONLYSERVERACKS, "OnlyServerAcks"); + if (IsDlgButtonChecked(hwndDlg, IDC_DCENABLE)) + gbDCMsgEnabled = IsDlgButtonChecked(hwndDlg, IDC_DCPASSIVE)?1:2; + else + gbDCMsgEnabled = 0; + ICQWriteContactSettingByte(NULL, "DirectMessaging", gbDCMsgEnabled); + gbXStatusEnabled = (BYTE)IsDlgButtonChecked(hwndDlg, IDC_XSTATUSENABLE); + ICQWriteContactSettingByte(NULL, "XStatusEnabled", gbXStatusEnabled); + StoreDBCheckState(hwndDlg, IDC_XSTATUSAUTO, "XStatusAuto"); + StoreDBCheckState(hwndDlg, IDC_XSTATUSRESET, "XStatusReset"); + StoreDBCheckState(hwndDlg, IDC_KILLSPAMBOTS , "KillSpambots"); + StoreDBCheckState(hwndDlg, IDC_AIMENABLE, "AimEnabled"); + return TRUE; + } + break; + } + return FALSE; +} + + + +static const UINT icqContactsControls[] = {IDC_ADDSERVER,IDC_LOADFROMSERVER,IDC_SAVETOSERVER,IDC_UPLOADNOW}; +static const UINT icqAvatarControls[] = {IDC_AUTOLOADAVATARS,IDC_LINKAVATARS}; +static BOOL CALLBACK DlgProcIcqContactsOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) + { + case WM_INITDIALOG: + ICQTranslateDialog(hwndDlg); + LoadDBCheckState(hwndDlg, IDC_ENABLE, "UseServerCList", DEFAULT_SS_ENABLED); + LoadDBCheckState(hwndDlg, IDC_ADDSERVER, "ServerAddRemove", DEFAULT_SS_ADDSERVER); + LoadDBCheckState(hwndDlg, IDC_LOADFROMSERVER, "LoadServerDetails", DEFAULT_SS_LOAD); + LoadDBCheckState(hwndDlg, IDC_SAVETOSERVER, "StoreServerDetails", DEFAULT_SS_STORE); + LoadDBCheckState(hwndDlg, IDC_ENABLEAVATARS, "AvatarsEnabled", DEFAULT_AVATARS_ENABLED); + LoadDBCheckState(hwndDlg, IDC_AUTOLOADAVATARS, "AvatarsAutoLoad", DEFAULT_LOAD_AVATARS); + LoadDBCheckState(hwndDlg, IDC_LINKAVATARS, "AvatarsAutoLink", DEFAULT_LINK_AVATARS); + + icq_EnableMultipleControls(hwndDlg, icqContactsControls, sizeof(icqContactsControls)/sizeof(icqContactsControls[0]), + ICQGetContactSettingByte(NULL, "UseServerCList", DEFAULT_SS_ENABLED)?TRUE:FALSE); + icq_EnableMultipleControls(hwndDlg, icqAvatarControls, sizeof(icqAvatarControls)/sizeof(icqAvatarControls[0]), + ICQGetContactSettingByte(NULL, "AvatarsEnabled", DEFAULT_AVATARS_ENABLED)?TRUE:FALSE); + + if (icqOnline) + { + ShowWindow(GetDlgItem(hwndDlg, IDC_OFFLINETOENABLE), SW_SHOW); + EnableDlgItem(hwndDlg, IDC_ENABLE, FALSE); + EnableDlgItem(hwndDlg, IDC_ENABLEAVATARS, FALSE); + } + else + { + EnableDlgItem(hwndDlg, IDC_UPLOADNOW, FALSE); + } + return TRUE; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDC_UPLOADNOW: + ShowUploadContactsDialog(); + return TRUE; + case IDC_ENABLE: + icq_EnableMultipleControls(hwndDlg, icqContactsControls, sizeof(icqContactsControls)/sizeof(icqContactsControls[0]), IsDlgButtonChecked(hwndDlg, IDC_ENABLE)); + if (icqOnline) + ShowWindow(GetDlgItem(hwndDlg, IDC_RECONNECTREQD), SW_SHOW); + else + EnableDlgItem(hwndDlg, IDC_UPLOADNOW, FALSE); + break; + case IDC_ENABLEAVATARS: + icq_EnableMultipleControls(hwndDlg, icqAvatarControls, sizeof(icqAvatarControls)/sizeof(icqAvatarControls[0]), IsDlgButtonChecked(hwndDlg, IDC_ENABLEAVATARS)); + break; + } + OptDlgChanged(hwndDlg); + break; + + case WM_NOTIFY: + switch (((LPNMHDR)lParam)->code) + { + case PSN_APPLY: + StoreDBCheckState(hwndDlg, IDC_ENABLE, "UseServerCList"); + StoreDBCheckState(hwndDlg, IDC_ADDSERVER, "ServerAddRemove"); + StoreDBCheckState(hwndDlg, IDC_LOADFROMSERVER, "LoadServerDetails"); + StoreDBCheckState(hwndDlg, IDC_SAVETOSERVER, "StoreServerDetails"); + StoreDBCheckState(hwndDlg, IDC_ENABLEAVATARS, "AvatarsEnabled"); + StoreDBCheckState(hwndDlg, IDC_AUTOLOADAVATARS, "AvatarsAutoLoad"); + StoreDBCheckState(hwndDlg, IDC_LINKAVATARS, "AvatarsAutoLink"); + + return TRUE; + } + break; + } + return FALSE; +} -- cgit v1.2.3