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 --- irc_mod/options.cpp | 2576 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2576 insertions(+) create mode 100644 irc_mod/options.cpp (limited to 'irc_mod/options.cpp') diff --git a/irc_mod/options.cpp b/irc_mod/options.cpp new file mode 100644 index 0000000..abec632 --- /dev/null +++ b/irc_mod/options.cpp @@ -0,0 +1,2576 @@ +/* +IRC plugin for Miranda IM + +Copyright (C) 2003 Jörgen Persson + +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 "irc.h" +#include +#include + +HANDLE OptionsInitHook = NULL; +extern UINT_PTR KeepAliveTimer; +UINT_PTR OnlineNotifTimer = 0; +UINT_PTR OnlineNotifTimer3 = 0; + + +extern PREFERENCES * prefs; +extern char * IRCPROTONAME; +extern char * ALTIRCPROTONAME; +extern char * pszServerFile; +extern char * pszIgnoreFile; +extern char * pszPerformFile; +extern char mirandapath[MAX_PATH]; +HWND connect_hWnd = NULL; +HWND addserver_hWnd = NULL; +extern HWND IgnoreWndHwnd; +bool ServerlistModified = false; +bool PerformlistModified = false; +extern bool bMbotInstalled; +extern bool bTempDisableCheck ; +extern bool bTempForceCheck ; +extern int iTempCheckTime ; +extern HMODULE m_ssleay32; +extern HANDLE hMenuServer; +static WNDPROC OldProc; +static WNDPROC OldListViewProc; + +static BOOL (WINAPI *pfnEnableThemeDialogTexture)(HANDLE, DWORD) = 0; + +static int GetPrefsString(const char *szSetting, char * prefstoset, int n, char * defaulttext) +{ + DBVARIANT dbv; + int rv; + rv = !DBGetContactSetting(NULL, IRCPROTONAME,szSetting, &dbv) && dbv.type==DBVT_ASCIIZ; + if(rv) + lstrcpyn(prefstoset, dbv.pszVal, n); + else + lstrcpyn(prefstoset, defaulttext, n); + if (rv) + DBFreeVariant(&dbv); + return rv; +} + +static int GetSetting(const char *szSetting, DBVARIANT *dbv) +{ + int rv; + rv = !DBGetContactSetting(NULL, IRCPROTONAME,szSetting,dbv) && dbv->type==DBVT_ASCIIZ; + return rv; +} +void InitPrefs(void) +{ + DBVARIANT dbv; + + prefs = new PREFERENCES; + GetPrefsString("ServerName", prefs->ServerName, 101, ""); + GetPrefsString("PortStart", prefs->PortStart, 6, ""); + GetPrefsString("PortEnd", prefs->PortEnd, 6, ""); + GetPrefsString("Password", prefs->Password, 499, ""); + CallService(MS_DB_CRYPT_DECODESTRING, 499, (LPARAM)prefs->Password); + if(!GetPrefsString("PNick", prefs->Nick, 30, "")) + { + GetPrefsString("Nick", prefs->Nick, 30, ""); + if (lstrlen(prefs->Nick) > 0) + DBWriteContactSettingString(NULL, IRCPROTONAME, "PNick", prefs->Nick); + } + GetPrefsString("AlernativeNick", prefs->AlternativeNick, 31, ""); + GetPrefsString("Name", prefs->Name, 199, ""); + GetPrefsString("UserID", prefs->UserID, 199, "Miranda"); + GetPrefsString("IdentSystem", prefs->IdentSystem, 10, "UNIX"); + GetPrefsString("IdentPort", prefs->IdentPort, 6, "113"); + GetPrefsString("RetryWait", prefs->RetryWait, 4, "30"); + GetPrefsString("RetryCount", prefs->RetryCount, 4, "10"); + GetPrefsString("Network", prefs->Network, 31, ""); + GetPrefsString("QuitMessage", prefs->QuitMessage, 399, STR_QUITMESSAGE); + GetPrefsString("UserInfo", prefs->UserInfo, 499, STR_USERINFO); + GetPrefsString("SpecHost", prefs->MySpecifiedHost, 499, ""); + GetPrefsString("MyLocalHost", prefs->MyLocalHost, 49, ""); + + lstrcpy(prefs->MySpecifiedHostIP, ""); + + if (GetSetting("Alias", &dbv)) { + prefs->Alias = new char[lstrlen(dbv.pszVal)+1]; + lstrcpyn(prefs->Alias, dbv.pszVal, lstrlen(dbv.pszVal)+1); + DBFreeVariant(&dbv); + } + else + { + prefs->Alias = new char[350]; + lstrcpy(prefs->Alias, "/op /mode ## +ooo $1 $2 $3\r\n/dop /mode ## -ooo $1 $2 $3\r\n/voice /mode ## +vvv $1 $2 $3\r\n/dvoice /mode ## -vvv $1 $2 $3\r\n/j /join #$1 $2-\r\n/p /part ## $1-\r\n/w /whois $1\r\n/k /kick ## $1 $2-\r\n/q /query $1\r\n/logon /log on ##\r\n/logoff /log off ##\r\n/save /log buffer $1\r\n/slap /me slaps $1 around a bit with a large trout" ); +// DBFreeVariant(&dbv); + } + + prefs->ScriptingEnabled = DBGetContactSettingByte(NULL,IRCPROTONAME, "ScriptingEnabled", 0); + + prefs->PopupsEnabled = DBGetContactSettingByte(NULL,IRCPROTONAME, "PopupsEnabled", 1); + prefs->PopupsErrors = DBGetContactSettingByte(NULL,IRCPROTONAME, "PopupsErrors", 0); + prefs->PopupWhois = DBGetContactSettingByte(NULL,IRCPROTONAME, "PopupWhois", 0); + prefs->PopupsWhoisNoUser = DBGetContactSettingByte(NULL,IRCPROTONAME, "PopupsWhoisNoUser", 1); + + prefs->VersionAuto = DBGetContactSettingByte(NULL,IRCPROTONAME, "VersionAuto", DEFAULT_VERSION_AUTO); + prefs->NudgeEnabled = DBGetContactSettingByte(NULL,IRCPROTONAME, "NudgeEnabled", ServiceExists(MS_NUDGE_SEND)); + prefs->TypingEnabled = DBGetContactSettingByte(NULL,IRCPROTONAME, "TypingEnabled", DEFAULT_TYPING); + + prefs->XStatusEnabled = DBGetContactSettingByte(NULL,IRCPROTONAME, "XStatusEnabled", DEFAULT_XSTATUS_ENABLED); + prefs->XStatusAuto = DBGetContactSettingByte(NULL,IRCPROTONAME, "XStatusAuto", DEFAULT_XSTATUS_AUTO); + prefs->XStatusReset = DBGetContactSettingByte(NULL,IRCPROTONAME, "XStatusReset", DEFAULT_XSTATUS_RESET); + prefs->XStatusAdv = DBGetContactSettingByte(NULL,IRCPROTONAME, "XStatusAdv", DEFAULT_XSTATUS_ADV); + + prefs->AvatarsEnabled = DBGetContactSettingByte(NULL,IRCPROTONAME, "AvatarsEnabled", 0); + prefs->AvatarsAutoLoad = DBGetContactSettingByte(NULL,IRCPROTONAME, "AvatarsAutoLoad", 0); + prefs->AvatarsAutoLink = DBGetContactSettingByte(NULL,IRCPROTONAME, "AvatarsAutoLink", 0); + + prefs->UseMemoServ = DBGetContactSettingByte(NULL,IRCPROTONAME, "UseMemoServ", 0); + prefs->MemoServAuto = DBGetContactSettingByte(NULL,IRCPROTONAME, "MemoServAuto", 0); + GetPrefsString("MemoServName", prefs->MemoServName, 199, "memoserv"); + + prefs->ForceVisible = DBGetContactSettingByte(NULL,IRCPROTONAME, "ForceVisible", 0); + prefs->DisableErrorPopups = DBGetContactSettingByte(NULL,IRCPROTONAME, "DisableErrorPopups", 0); + prefs->RejoinChannels = DBGetContactSettingByte(NULL,IRCPROTONAME, "RejoinChannels", 0); + prefs->RejoinIfKicked = DBGetContactSettingByte(NULL,IRCPROTONAME, "RejoinIfKicked", 1); + prefs->Ident = DBGetContactSettingByte(NULL,IRCPROTONAME, "Ident", 0); + prefs->IdentTimer = (int)DBGetContactSettingByte(NULL,IRCPROTONAME, "IdentTimer", 0); + prefs->Retry = DBGetContactSettingByte(NULL,IRCPROTONAME, "Retry", 0); + prefs->DisableDefaultServer = DBGetContactSettingByte(NULL,IRCPROTONAME, "DisableDefaultServer", 0); + prefs->HideServerWindow = DBGetContactSettingByte(NULL,IRCPROTONAME, "HideServerWindow", 1); + prefs->UseServer = DBGetContactSettingByte(NULL,IRCPROTONAME, "UseServer", 1); + prefs->JoinOnInvite = DBGetContactSettingByte(NULL,IRCPROTONAME, "JoinOnInvite", 0); + prefs->Perform = DBGetContactSettingByte(NULL,IRCPROTONAME, "Perform", 0); + prefs->ShowAddresses = DBGetContactSettingByte(NULL,IRCPROTONAME, "ShowAddresses", 0); + prefs->AutoOnlineNotification = DBGetContactSettingByte(NULL,IRCPROTONAME, "AutoOnlineNotification", 1); + prefs->Ignore = DBGetContactSettingByte(NULL,IRCPROTONAME, "Ignore", 0);; + prefs->IgnoreChannelDefault = DBGetContactSettingByte(NULL,IRCPROTONAME, "IgnoreChannelDefault", 0);; + prefs->ServerComboSelection = DBGetContactSettingDword(NULL,IRCPROTONAME, "ServerComboSelection", -1); + prefs->QuickComboSelection = DBGetContactSettingDword(NULL,IRCPROTONAME, "QuickComboSelection", prefs->ServerComboSelection); + prefs->SendKeepAlive = (int)DBGetContactSettingByte(NULL,IRCPROTONAME, "SendKeepAlive", 0); + prefs->ListSize.y = DBGetContactSettingDword(NULL,IRCPROTONAME, "SizeOfListBottom", 400); + prefs->ListSize.x = DBGetContactSettingDword(NULL,IRCPROTONAME, "SizeOfListRight", 600); + prefs->iSSL = DBGetContactSettingByte(NULL,IRCPROTONAME, "UseSSL", 0); + prefs->DCCFileEnabled = DBGetContactSettingByte(NULL,IRCPROTONAME, "EnableCtcpFile", 1); + prefs->DCCChatEnabled = DBGetContactSettingByte(NULL,IRCPROTONAME, "EnableCtcpChat", 1); + prefs->DCCChatAccept = DBGetContactSettingByte(NULL,IRCPROTONAME, "CtcpChatAccept", 1); + prefs->DCCChatIgnore = DBGetContactSettingByte(NULL,IRCPROTONAME, "CtcpChatIgnore", 1); + prefs->DCCPassive = DBGetContactSettingByte(NULL,IRCPROTONAME, "DccPassive", 0); + prefs->ManualHost = DBGetContactSettingByte(NULL,IRCPROTONAME, "ManualHost", 0); + prefs->IPFromServer = DBGetContactSettingByte(NULL,IRCPROTONAME, "IPFromServer", 0); + prefs->DisconnectDCCChats = DBGetContactSettingByte(NULL,IRCPROTONAME, "DisconnectDCCChats", 1); + prefs->OldStyleModes = DBGetContactSettingByte(NULL,IRCPROTONAME, "OldStyleModes", 0); + prefs->SendNotice = DBGetContactSettingByte(NULL,IRCPROTONAME, "SendNotice", 1); + prefs->MyHost[0] = '\0'; + prefs->colors[0] = RGB(255,255,255); + prefs->colors[1] = RGB(0,0,0); + prefs->colors[2] = RGB(0,0,127); + prefs->colors[3] = RGB(0,147,0); + prefs->colors[4] = RGB(255,0,0); + prefs->colors[5] = RGB(127,0,0); + prefs->colors[6] = RGB(156,0,156); + prefs->colors[7] = RGB(252,127,0); + prefs->colors[8] = RGB(255,255,0); + prefs->colors[9] = RGB(0,252,0); + prefs->colors[10] = RGB(0,147,147); + prefs->colors[11] = RGB(0,255,255); + prefs->colors[12] = RGB(0,0,252); + prefs->colors[13] = RGB(255,0,255); + prefs->colors[14] = RGB(127,127,127); + prefs->colors[15] = RGB(210,210,210); + prefs->OnlineNotificationTime = DBGetContactSettingWord(NULL, IRCPROTONAME, "OnlineNotificationTime", 30); + prefs->OnlineNotificationLimit = DBGetContactSettingWord(NULL, IRCPROTONAME, "OnlineNotificationLimit", 50); + prefs->ChannelAwayNotification = DBGetContactSettingByte(NULL,IRCPROTONAME, "ChannelAwayNotification", 1); + +// DBFreeVariant(&dbv); + return; +} + +// add icons to the skinning module +void InitIcons(void) +{ +/* + if(ServiceExists(MS_SKIN2_ADDICON)) + { + SKINICONDESC sid = {0}; + char szTemp[255]; + char szFile[MAX_PATH]; + + sid.cx = sid.cy = 16; + sid.cbSize = sizeof(SKINICONDESC); + sid.pszSection = ALTIRCPROTONAME; + GetModuleFileName(g_hInstance, szFile, MAX_PATH); + sid.pszDefaultFile = szFile; + + // add them one by one + sid.pszDescription = Translate("Main"); + mir_snprintf(szTemp, sizeof(szTemp), "%s_main", IRCPROTONAME); + sid.pszName = szTemp; + sid.iDefaultIndex = -IDI_MAIN; + CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid); + + sid.pszDescription = Translate("Add"); + mir_snprintf(szTemp, sizeof(szTemp), "%s_add", IRCPROTONAME); + sid.pszName = szTemp; + sid.iDefaultIndex = -IDI_ADD; + CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid); + + sid.pszDescription = Translate("Apply"); + mir_snprintf(szTemp, sizeof(szTemp), "%s_go", IRCPROTONAME); + sid.pszName = szTemp; + sid.iDefaultIndex = -IDI_GO; + CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid); + + sid.pszDescription = Translate("Edit"); + mir_snprintf(szTemp, sizeof(szTemp), "%s_rename", IRCPROTONAME); + sid.pszName = szTemp; + sid.iDefaultIndex = -IDI_RENAME; + CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid); + + sid.pszDescription = Translate("Cancel"); + mir_snprintf(szTemp, sizeof(szTemp), "%s_delete", IRCPROTONAME); + sid.pszName = szTemp; + sid.iDefaultIndex = -IDI_DELETE; + CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid); + + sid.pszDescription = Translate("Ignore"); + mir_snprintf(szTemp, sizeof(szTemp), "%s_block", IRCPROTONAME); + sid.pszName = szTemp; + sid.iDefaultIndex = -IDI_BLOCK; + CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid); + + sid.pszDescription = Translate("Channel list"); + mir_snprintf(szTemp, sizeof(szTemp), "%s_list", IRCPROTONAME); + sid.pszName = szTemp; + sid.iDefaultIndex = -IDI_LIST; + CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid); + + sid.pszDescription = Translate("Channel manager"); + mir_snprintf(szTemp, sizeof(szTemp), "%s_manager", IRCPROTONAME); + sid.pszName = szTemp; + sid.iDefaultIndex = -IDI_MANAGER; + CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid); + + sid.pszDescription = Translate("Quick connect"); + mir_snprintf(szTemp, sizeof(szTemp), "%s_quick", IRCPROTONAME); + sid.pszName = szTemp; + sid.iDefaultIndex = -IDI_QUICK; + CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid); + + sid.pszDescription = Translate("Server window"); + mir_snprintf(szTemp, sizeof(szTemp), "%s_server", IRCPROTONAME); + sid.pszName = szTemp; + sid.iDefaultIndex = -IDI_SERVER; + CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid); + + sid.pszDescription = Translate("Avatar"); + mir_snprintf(szTemp, sizeof(szTemp), "%s_avatar", IRCPROTONAME); + sid.pszName = szTemp; + sid.iDefaultIndex = -IDI_AVATAR; + CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid); + + sid.pszDescription = Translate("Show channel"); + mir_snprintf(szTemp, sizeof(szTemp), "%s_show", IRCPROTONAME); + sid.pszName = szTemp; + sid.iDefaultIndex = -IDI_SHOW; + CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid); + + sid.pszDescription = Translate("Join channel"); + mir_snprintf(szTemp, sizeof(szTemp), "%s_join", IRCPROTONAME); + sid.pszName = szTemp; + sid.iDefaultIndex = -IDI_JOIN; + CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid); + + sid.pszDescription = Translate("Leave Channel"); + mir_snprintf(szTemp, sizeof(szTemp), "%s_part", IRCPROTONAME); + sid.pszName = szTemp; + sid.iDefaultIndex = -IDI_PART; + CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid); + + sid.pszDescription = Translate("Question"); + mir_snprintf(szTemp, sizeof(szTemp), "%s_whois", IRCPROTONAME); + sid.pszName = szTemp; + sid.iDefaultIndex = -IDI_WHOIS; + CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid); + + sid.pszDescription = Translate("Incoming DCC Chat"); + mir_snprintf(szTemp, sizeof(szTemp), "%s_dcc", IRCPROTONAME); + sid.pszName = szTemp; + sid.iDefaultIndex = -IDI_DCC; + CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid); + + sid.cx = sid.cy = 48; + sid.pszDescription = Translate("Logo (48x48)"); + mir_snprintf(szTemp, sizeof(szTemp), "%s_logo", IRCPROTONAME); + sid.pszName = szTemp; + sid.iDefaultIndex = -IDI_LOGO; + CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid); + +} +*/ + char szSection[MAX_PATH + 64]; + null_snprintf(szSection, sizeof(szSection), IRCTranslateUtf(IRCPROTONAME)); + + IconLibDefine(IRCTranslateUtf("Main"), szSection, "main", (HICON)LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_MAIN), IMAGE_ICON, 0, 0, 0)); + IconLibDefine(IRCTranslateUtf("Add"), szSection, "add", (HICON)LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_ADD), IMAGE_ICON, 0, 0, 0)); + IconLibDefine(IRCTranslateUtf("Apply"), szSection, "go", (HICON)LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_GO), IMAGE_ICON, 0, 0, 0)); + IconLibDefine(IRCTranslateUtf("Edit"), szSection, "rename", (HICON)LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_RENAME), IMAGE_ICON, 0, 0, 0)); + IconLibDefine(IRCTranslateUtf("Cancel"), szSection, "delete", (HICON)LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_DELETE), IMAGE_ICON, 0, 0, 0)); + IconLibDefine(IRCTranslateUtf("Ignore"), szSection, "block", (HICON)LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_BLOCK), IMAGE_ICON, 0, 0, 0)); + IconLibDefine(IRCTranslateUtf("Channel list"), szSection, "list", (HICON)LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_LIST), IMAGE_ICON, 0, 0, 0)); + IconLibDefine(IRCTranslateUtf("Channel manager"), szSection, "manager", (HICON)LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_MANAGER), IMAGE_ICON, 0, 0, 0)); + IconLibDefine(IRCTranslateUtf("Quick connect"), szSection, "quick", (HICON)LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_QUICK), IMAGE_ICON, 0, 0, 0)); + IconLibDefine(IRCTranslateUtf("Server window"), szSection, "server", (HICON)LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_SERVER), IMAGE_ICON, 0, 0, 0)); + IconLibDefine(IRCTranslateUtf("Avatar"), szSection, "avatar", (HICON)LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_AVATAR), IMAGE_ICON, 0, 0, 0)); + IconLibDefine(IRCTranslateUtf("Show channel"), szSection, "show", (HICON)LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_SHOW), IMAGE_ICON, 0, 0, 0)); + IconLibDefine(IRCTranslateUtf("Join channel"), szSection, "join", (HICON)LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_JOIN), IMAGE_ICON, 0, 0, 0)); + IconLibDefine(IRCTranslateUtf("Leave Channel"), szSection, "part", (HICON)LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_PART), IMAGE_ICON, 0, 0, 0)); + IconLibDefine(IRCTranslateUtf("Question"), szSection, "whois", (HICON)LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_WHOIS), IMAGE_ICON, 0, 0, 0)); + IconLibDefine(IRCTranslateUtf("Incoming DCC Chat"), szSection, "dcc", (HICON)LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_DCC), IMAGE_ICON, 0, 0, 0)); + IconLibDefine(IRCTranslateUtf("Logo (48x48)"), szSection, "logo", (HICON)LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_LOGO), IMAGE_ICON, 0, 0, 0)); + + return; +} + +// load icons from the skinning module if available +HICON LoadIconEx(int iIndex, char * pszIcoLibName, int iX, int iY) +{ + if(ServiceExists(MS_SKIN2_GETICON)) + { + char szTemp[256]; + mir_snprintf(szTemp, sizeof(szTemp), "%s_%s", IRCPROTONAME, pszIcoLibName); + return (HICON) CallService(MS_SKIN2_GETICON, 0, (LPARAM)szTemp); + } + else + return (HICON)LoadImage(g_hInstance,MAKEINTRESOURCE(iIndex),IMAGE_ICON,iX,iY,LR_SHARED); + return 0; +} + +// Callback for the 'Add server' dialog +BOOL CALLBACK AddServerProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) +{ + switch (uMsg) + { + case WM_INITDIALOG: + { + TranslateDialogDefault(hwndDlg); + int i = SendMessage(GetDlgItem(connect_hWnd, IDC_SERVERCOMBO), CB_GETCOUNT, 0, 0); + for (int index = 0; index Group) == CB_ERR) + SendMessage(GetDlgItem(hwndDlg, IDC_ADD_COMBO), CB_ADDSTRING, 0, (LPARAM) pData->Group); + } + + if(m_ssleay32) + CheckDlgButton(hwndDlg, IDC_OFF, BST_CHECKED); + else + { + EnableWindow(GetDlgItem(hwndDlg, IDC_ON), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_OFF), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_AUTO), FALSE); + } + + SetWindowText(GetDlgItem(hwndDlg, IDC_ADD_PORT), "6667"); + SetWindowText(GetDlgItem(hwndDlg, IDC_ADD_PORT2), "6667"); + SetFocus(GetDlgItem(hwndDlg, IDC_ADD_COMBO)); + + }break; + + + case WM_COMMAND: + { + if (HIWORD(wParam) == BN_CLICKED) + switch (LOWORD(wParam)) + { + case IDN_ADD_OK: + { + if (GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_SERVER)) && GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_ADDRESS)) && GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_PORT)) && GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_PORT2)) && GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_COMBO))) + { + SERVER_INFO * pData = new SERVER_INFO; + pData->iSSL = 0; + if(IsDlgButtonChecked(hwndDlg, IDC_ON)) + pData->iSSL = 2; + if(IsDlgButtonChecked(hwndDlg, IDC_AUTO)) + pData->iSSL = 1; + pData->Address=new char[GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_ADDRESS))+1]; + GetDlgItemText(hwndDlg,IDC_ADD_ADDRESS, pData->Address, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_ADDRESS))+1); + pData->Group=new char[GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_COMBO))+1]; + GetDlgItemText(hwndDlg,IDC_ADD_COMBO, pData->Group, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_COMBO))+1); + pData->Name=new char[GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_SERVER))+GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_COMBO))+3]; + lstrcpy(pData->Name, pData->Group); + lstrcat(pData->Name, ": "); + char temp[255]; + GetDlgItemText(hwndDlg,IDC_ADD_SERVER, temp, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_SERVER))+1); + lstrcat(pData->Name, temp); + pData->PortEnd=new char[GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_PORT2))+1]; + GetDlgItemText(hwndDlg,IDC_ADD_PORT2, pData->PortEnd, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_PORT2))+1); + pData->PortStart=new char[GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_PORT))+1]; + GetDlgItemText(hwndDlg,IDC_ADD_PORT, pData->PortStart, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_PORT))+1); + int iItem = SendMessage(GetDlgItem(connect_hWnd, IDC_SERVERCOMBO),CB_ADDSTRING,0,(LPARAM) pData->Name); + SendMessage(GetDlgItem(connect_hWnd, IDC_SERVERCOMBO),CB_SETITEMDATA,iItem,(LPARAM) pData); + SendMessage(GetDlgItem(connect_hWnd, IDC_SERVERCOMBO),CB_SETCURSEL,iItem,0); + SendMessage(connect_hWnd, WM_COMMAND, MAKEWPARAM(IDC_SERVERCOMBO,CBN_SELCHANGE), 0); + PostMessage (hwndDlg, WM_CLOSE, 0,0); + if ( SendMessage(GetDlgItem(connect_hWnd, IDC_PERFORMCOMBO),CB_FINDSTRINGEXACT,-1, (LPARAM)pData->Group) == CB_ERR) + { + int m = SendMessage(GetDlgItem(connect_hWnd, IDC_PERFORMCOMBO),CB_ADDSTRING,0,(LPARAM) pData->Group); + SendMessage(GetDlgItem(connect_hWnd, IDC_PERFORMCOMBO),CB_SETITEMDATA,m,0); + } + ServerlistModified = true; + } + else + MessageBox(hwndDlg, Translate( "Please complete all fields" ), Translate( "IRC error" ), MB_OK|MB_ICONERROR); + }break; + + case IDN_ADD_CANCEL: + { + PostMessage (hwndDlg, WM_CLOSE, 0,0); + }break; + default:break; + } + + }break; + + + case WM_CLOSE: + { + EnableWindow(GetDlgItem(connect_hWnd, IDC_SERVERCOMBO), true); + EnableWindow(GetDlgItem(connect_hWnd, IDC_ADDSERVER), true); + EnableWindow(GetDlgItem(connect_hWnd, IDC_EDITSERVER), true); + EnableWindow(GetDlgItem(connect_hWnd, IDC_DELETESERVER), true); + DestroyWindow(hwndDlg); + return(true); + } break; + + case WM_DESTROY: + { + return (true); + } break; + default:break; + } + + return false; +} + +// Callback for the 'Edit server' dialog +BOOL CALLBACK EditServerProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) +{ + switch (uMsg) + { + case WM_INITDIALOG: + { + TranslateDialogDefault(hwndDlg); + int i = SendMessage(GetDlgItem(connect_hWnd, IDC_SERVERCOMBO), CB_GETCOUNT, 0, 0); + for (int index = 0; index Group) == CB_ERR) + SendMessage(GetDlgItem(hwndDlg, IDC_ADD_COMBO), CB_ADDSTRING, 0, (LPARAM) pData->Group); + } + int j = SendMessage(GetDlgItem(connect_hWnd, IDC_SERVERCOMBO), CB_GETCURSEL, 0, 0); + SERVER_INFO * pData = (SERVER_INFO *)SendMessage(GetDlgItem(connect_hWnd, IDC_SERVERCOMBO), CB_GETITEMDATA, j, 0); + SetDlgItemText(hwndDlg, IDC_ADD_ADDRESS, pData->Address); + SetDlgItemText(hwndDlg, IDC_ADD_COMBO, pData->Group); + SetDlgItemText(hwndDlg, IDC_ADD_PORT, pData->PortStart); + SetDlgItemText(hwndDlg, IDC_ADD_PORT2, pData->PortEnd); + char tempchar[255]; + strcpy (tempchar, pData->Name); + int temp = strchr(tempchar, ' ') -tempchar; + for (int index2 = temp+1; index2 < lstrlen(tempchar)+1;index2++) + tempchar[index2-temp-1] = tempchar[index2]; + if(m_ssleay32) + { + if(pData->iSSL == 0) + CheckDlgButton(hwndDlg, IDC_OFF, BST_CHECKED); + if(pData->iSSL == 1) + CheckDlgButton(hwndDlg, IDC_AUTO, BST_CHECKED); + if(pData->iSSL == 2) + CheckDlgButton(hwndDlg, IDC_ON, BST_CHECKED); + } + else + { + EnableWindow(GetDlgItem(hwndDlg, IDC_ON), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_OFF), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_AUTO), FALSE); + + } + + + SetDlgItemText(hwndDlg, IDC_ADD_SERVER, tempchar); + SetFocus(GetDlgItem(hwndDlg, IDC_ADD_COMBO)); + + }break; + + + case WM_COMMAND: + { + if (HIWORD(wParam) == BN_CLICKED) + switch (LOWORD(wParam)) + { + case IDN_ADD_OK: + { + if (GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_SERVER)) && GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_ADDRESS)) && GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_PORT)) && GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_PORT2)) && GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_COMBO))) + { + int i = SendMessage(GetDlgItem(connect_hWnd, IDC_SERVERCOMBO), CB_GETCURSEL, 0, 0); + + SERVER_INFO * pData1 = (SERVER_INFO *)SendMessage(GetDlgItem(connect_hWnd, IDC_SERVERCOMBO), CB_GETITEMDATA, i, 0); + delete []pData1->Name; + delete []pData1->Address; + delete []pData1->PortStart; + delete []pData1->PortEnd; + delete []pData1->Group; + delete pData1; + SendMessage(GetDlgItem(connect_hWnd, IDC_SERVERCOMBO), CB_DELETESTRING, i, 0); +// if (i >= SendMessage(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), CB_GETCOUNT, 0, 0)) +// i--; +// SendMessage(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), CB_SETCURSEL, i, 0); +// SendMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(IDC_SERVERCOMBO,CBN_SELCHANGE), 0); + + + SERVER_INFO * pData = new SERVER_INFO; + pData->iSSL = 0; + if(IsDlgButtonChecked(hwndDlg, IDC_ON)) + pData->iSSL = 2; + if(IsDlgButtonChecked(hwndDlg, IDC_AUTO)) + pData->iSSL = 1; + pData->Address=new char[GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_ADDRESS))+1]; + GetDlgItemText(hwndDlg,IDC_ADD_ADDRESS, pData->Address, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_ADDRESS))+1); + pData->Group=new char[GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_COMBO))+1]; + GetDlgItemText(hwndDlg,IDC_ADD_COMBO, pData->Group, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_COMBO))+1); + pData->Name=new char[GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_SERVER))+GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_COMBO))+3]; + lstrcpy(pData->Name, pData->Group); + lstrcat(pData->Name, ": "); + char temp[255]; + GetDlgItemText(hwndDlg,IDC_ADD_SERVER, temp, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_SERVER))+1); + lstrcat(pData->Name, temp); + pData->PortEnd=new char[GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_PORT2))+1]; + GetDlgItemText(hwndDlg,IDC_ADD_PORT2, pData->PortEnd, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_PORT2))+1); + pData->PortStart=new char[GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_PORT))+1]; + GetDlgItemText(hwndDlg,IDC_ADD_PORT, pData->PortStart, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ADD_PORT))+1); + int iItem = SendMessage(GetDlgItem(connect_hWnd, IDC_SERVERCOMBO),CB_ADDSTRING,0,(LPARAM) pData->Name); + SendMessage(GetDlgItem(connect_hWnd, IDC_SERVERCOMBO),CB_SETITEMDATA,iItem,(LPARAM) pData); + SendMessage(GetDlgItem(connect_hWnd, IDC_SERVERCOMBO),CB_SETCURSEL,iItem,0); + SendMessage(connect_hWnd, WM_COMMAND, MAKEWPARAM(IDC_SERVERCOMBO,CBN_SELCHANGE), 0); + PostMessage (hwndDlg, WM_CLOSE, 0,0); + if ( SendMessage(GetDlgItem(connect_hWnd, IDC_PERFORMCOMBO),CB_FINDSTRINGEXACT,-1, (LPARAM)pData->Group) == CB_ERR) + { + int m = SendMessage(GetDlgItem(connect_hWnd, IDC_PERFORMCOMBO),CB_ADDSTRING,0,(LPARAM) pData->Group); + SendMessage(GetDlgItem(connect_hWnd, IDC_PERFORMCOMBO),CB_SETITEMDATA,m,0); + } + ServerlistModified = true; + } + else + MessageBox(hwndDlg, Translate( "Please complete all fields" ), Translate( "IRC error" ), MB_OK|MB_ICONERROR); + }break; + + case IDN_ADD_CANCEL: + { + PostMessage (hwndDlg, WM_CLOSE, 0,0); + }break; + default:break; + } + + }break; + case WM_CLOSE: + { + EnableWindow(GetDlgItem(connect_hWnd, IDC_SERVERCOMBO), true); + EnableWindow(GetDlgItem(connect_hWnd, IDC_ADDSERVER), true); + EnableWindow(GetDlgItem(connect_hWnd, IDC_EDITSERVER), true); + EnableWindow(GetDlgItem(connect_hWnd, IDC_DELETESERVER), true); + DestroyWindow(hwndDlg); + return(true); + } break; + + case WM_DESTROY: + { + return (true); + } break; + default:break; + } + + return false; +} + +static LRESULT CALLBACK EditSubclassProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + + switch(msg) + { + case WM_CHAR : + { + if (wParam == 21 || wParam == 11 || wParam == 2) + { + char w[2]; + w[1] = '\0'; + if (wParam == 11) + w[0] = 3; + if (wParam == 2) + w[0] = 2; + if (wParam == 21) + w[0] = 31; + SendMessage(hwndDlg, EM_REPLACESEL, false, (LPARAM) w); + SendMessage(hwndDlg, EM_SCROLLCARET, 0,0); + return 0; + } + + } break; + default: break; + + } + return CallWindowProc(OldProc, hwndDlg, msg, wParam, lParam); + +} + +// Callback for the 'CTCP preferences' dialog +BOOL CALLBACK CtcpPrefsProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) +{ + + switch (uMsg) + { + case WM_INITDIALOG: + { + TranslateDialogDefault(hwndDlg); + + SetDlgItemText(hwndDlg,IDC_USERINFO,prefs->UserInfo); + + + + CheckDlgButton(hwndDlg, IDC_SLOW, DBGetContactSettingByte(NULL, IRCPROTONAME, "DCCMode", 0)==0?BST_CHECKED:BST_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_FAST, DBGetContactSettingByte(NULL, IRCPROTONAME, "DCCMode", 0)==1?BST_CHECKED:BST_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_DISC, prefs->DisconnectDCCChats?BST_CHECKED:BST_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_PASSIVE, prefs->DCCPassive?BST_CHECKED:BST_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_SENDNOTICE, prefs->SendNotice?BST_CHECKED:BST_UNCHECKED); + + SendDlgItemMessage(hwndDlg, IDC_COMBO, CB_ADDSTRING, (WPARAM)0,(LPARAM) "256"); + SendDlgItemMessage(hwndDlg, IDC_COMBO, CB_ADDSTRING, (WPARAM)0,(LPARAM) "512"); + SendDlgItemMessage(hwndDlg, IDC_COMBO, CB_ADDSTRING, (WPARAM)0,(LPARAM) "1024"); + SendDlgItemMessage(hwndDlg, IDC_COMBO, CB_ADDSTRING, (WPARAM)0,(LPARAM) "2048"); + SendDlgItemMessage(hwndDlg, IDC_COMBO, CB_ADDSTRING, (WPARAM)0,(LPARAM) "4096"); + SendDlgItemMessage(hwndDlg, IDC_COMBO, CB_ADDSTRING, (WPARAM)0,(LPARAM) "8192"); + int j = DBGetContactSettingWord(NULL, IRCPROTONAME, "DCCPacketSize", 1024*4); + char szTemp[10]; + mir_snprintf(szTemp, sizeof(szTemp), "%u", j); + int i = SendDlgItemMessage(hwndDlg, IDC_COMBO, CB_SELECTSTRING, (WPARAM)-1,(LPARAM) szTemp); + if(i== CB_ERR) + int i = SendDlgItemMessage(hwndDlg, IDC_COMBO, CB_SELECTSTRING, (WPARAM)-1,(LPARAM) "4096"); + + + if(prefs->DCCChatAccept == 1) + CheckDlgButton(hwndDlg, IDC_RADIO1, BST_CHECKED); + if(prefs->DCCChatAccept == 2) + CheckDlgButton(hwndDlg, IDC_RADIO2, BST_CHECKED); + if(prefs->DCCChatAccept == 3) + CheckDlgButton(hwndDlg, IDC_RADIO3, BST_CHECKED); + + CheckDlgButton(hwndDlg, IDC_FROMSERVER, prefs->IPFromServer?BST_CHECKED:BST_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_ENABLEIP, prefs->ManualHost?BST_CHECKED:BST_UNCHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_IP), prefs->ManualHost); + EnableWindow(GetDlgItem(hwndDlg, IDC_FROMSERVER), !prefs->ManualHost); + if(prefs->ManualHost) + { + SetDlgItemText(hwndDlg,IDC_IP,prefs->MySpecifiedHost); + }else + { + if(prefs->IPFromServer) + { + if(lstrlen(prefs->MyHost)) + { + String s = (String)Translate("MyHost+ (String)">"; + SetDlgItemText(hwndDlg,IDC_IP,s.c_str()); + } + else + SetDlgItemText(hwndDlg,IDC_IP,Translate("")); + } + else + { + if(lstrlen(prefs->MyLocalHost)) + { + String s = (String)Translate("MyLocalHost+ (String)">"; + SetDlgItemText(hwndDlg,IDC_IP,s.c_str()); + } + else + SetDlgItemText(hwndDlg,IDC_IP,Translate("")); + + } + + } + + + }break; + + case WM_COMMAND: + { + + if(( LOWORD(wParam) == IDC_USERINFO + || LOWORD(wParam) == IDC_IP + || LOWORD(wParam) == IDC_COMBO && HIWORD(wParam) != CBN_SELCHANGE) + && (HIWORD(wParam)!=EN_CHANGE || (HWND)lParam!=GetFocus())) return true; + + + SendMessage(GetParent(hwndDlg), PSM_CHANGED,0,0); + + if (HIWORD(wParam) == BN_CLICKED) + { + switch (LOWORD(wParam)) + { + case ( IDC_FROMSERVER): + case ( IDC_ENABLEIP): + { + EnableWindow(GetDlgItem(hwndDlg, IDC_IP), IsDlgButtonChecked(hwndDlg, IDC_ENABLEIP)== BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_FROMSERVER), IsDlgButtonChecked(hwndDlg, IDC_ENABLEIP)== BST_UNCHECKED); + + if(IsDlgButtonChecked(hwndDlg, IDC_ENABLEIP)== BST_CHECKED) + { + SetDlgItemText(hwndDlg,IDC_IP,prefs->MySpecifiedHost); + }else + { + if(IsDlgButtonChecked(hwndDlg, IDC_FROMSERVER)== BST_CHECKED) + { + if(lstrlen(prefs->MyHost)) + { + String s = (String)Translate("MyHost+ (String)">"; + SetDlgItemText(hwndDlg,IDC_IP,s.c_str()); + } + else + SetDlgItemText(hwndDlg,IDC_IP,Translate("")); + } + else + { + if(lstrlen(prefs->MyLocalHost)) + { + String s = (String)Translate("MyLocalHost+ (String)">"; + SetDlgItemText(hwndDlg,IDC_IP,s.c_str()); + } + else + SetDlgItemText(hwndDlg,IDC_IP,Translate("")); + + } + + } + + }break; + default:break; + } + } + }break; + case WM_NOTIFY: + { + switch(((LPNMHDR)lParam)->idFrom) + { + case 0: + switch (((LPNMHDR)lParam)->code) + { + case PSN_APPLY: + { + + GetDlgItemText(hwndDlg,IDC_USERINFO,prefs->UserInfo, 499); + DBWriteContactSettingString(NULL,IRCPROTONAME,"UserInfo",prefs->UserInfo); + + char szTemp[10]; + GetWindowText(GetDlgItem(hwndDlg, IDC_COMBO), szTemp, 10); + DBWriteContactSettingWord(NULL,IRCPROTONAME,"DCCPacketSize", (WORD)atoi(szTemp)); + + + + prefs->DCCPassive = IsDlgButtonChecked(hwndDlg,IDC_PASSIVE)== BST_CHECKED?1:0; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"DccPassive",prefs->DCCPassive); + + prefs->SendNotice = IsDlgButtonChecked(hwndDlg,IDC_SENDNOTICE)== BST_CHECKED?1:0; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"SendNotice",prefs->SendNotice); + + if(IsDlgButtonChecked(hwndDlg,IDC_SLOW)== BST_CHECKED) + DBWriteContactSettingByte(NULL,IRCPROTONAME,"DCCMode",0); + else + DBWriteContactSettingByte(NULL,IRCPROTONAME,"DCCMode",1); + + prefs->ManualHost = IsDlgButtonChecked(hwndDlg,IDC_ENABLEIP)== BST_CHECKED?1:0; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"ManualHost",prefs->ManualHost); + + prefs->IPFromServer = IsDlgButtonChecked(hwndDlg,IDC_FROMSERVER)== BST_CHECKED?1:0; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"IPFromServer",prefs->IPFromServer); + + prefs->DisconnectDCCChats = IsDlgButtonChecked(hwndDlg,IDC_DISC)== BST_CHECKED?1:0; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"DisconnectDCCChats",prefs->DisconnectDCCChats); + + if(IsDlgButtonChecked(hwndDlg, IDC_ENABLEIP) == BST_CHECKED) + { + char szTemp[500]; + GetDlgItemText(hwndDlg,IDC_IP,szTemp, 499); + lstrcpyn(prefs->MySpecifiedHost, GetWord(szTemp, 0).c_str(), 499); + DBWriteContactSettingString(NULL,IRCPROTONAME,"SpecHost",prefs->MySpecifiedHost); + if(lstrlen(prefs->MySpecifiedHost)) + { + IPRESOLVE * ipr = new IPRESOLVE; + ipr->iType = IP_MANUAL; + ipr->pszAdr = prefs->MySpecifiedHost; + forkthread(ResolveIPThread, NULL, ipr); + } + + } + + if(IsDlgButtonChecked(hwndDlg, IDC_RADIO1) == BST_CHECKED) + prefs->DCCChatAccept = 1; + if(IsDlgButtonChecked(hwndDlg, IDC_RADIO2) == BST_CHECKED) + prefs->DCCChatAccept = 2; + if(IsDlgButtonChecked(hwndDlg, IDC_RADIO3) == BST_CHECKED) + prefs->DCCChatAccept = 3; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"CtcpChatAccept",prefs->DCCChatAccept); + } + default:break; + return TRUE; + } + } + }break; + + default:break; + } + + return false; +} + +// Callback for the 'Advanced preferences' dialog +BOOL CALLBACK OtherPrefsProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) +{ + switch (uMsg) + { + case WM_INITDIALOG: + { + TranslateDialogDefault(hwndDlg); + + OldProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndDlg, IDC_ALIASEDIT), GWL_WNDPROC,(LONG)EditSubclassProc); + SetWindowLong(GetDlgItem(hwndDlg, IDC_QUITMESSAGE), GWL_WNDPROC,(LONG)EditSubclassProc); + SetWindowLong(GetDlgItem(hwndDlg, IDC_PERFORMEDIT), GWL_WNDPROC,(LONG)EditSubclassProc); + + SendDlgItemMessage(hwndDlg,IDC_ADD,BM_SETIMAGE,IMAGE_ICON,(LPARAM)LoadIconEx(IDI_ADD,"add",GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON))); + SendDlgItemMessage(hwndDlg,IDC_DELETE,BM_SETIMAGE,IMAGE_ICON,(LPARAM)LoadIconEx(IDI_DELETE,"delete",GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON))); + SendMessage(GetDlgItem(hwndDlg,IDC_ADD), BUTTONADDTOOLTIP, (WPARAM)Translate("Click to set commands that will be performed for this event"), 0); + SendMessage(GetDlgItem(hwndDlg,IDC_DELETE), BUTTONADDTOOLTIP, (WPARAM)Translate("Click to delete the commands for this event"), 0); + + SetDlgItemText(hwndDlg,IDC_ALIASEDIT,prefs->Alias); + SetDlgItemText(hwndDlg,IDC_QUITMESSAGE,prefs->QuitMessage); + CheckDlgButton(hwndDlg,IDC_PERFORM, ((prefs->Perform) ? (BST_CHECKED) : (BST_UNCHECKED))); + CheckDlgButton(hwndDlg,IDC_SCRIPT, ((prefs->ScriptingEnabled) ? (BST_CHECKED) : (BST_UNCHECKED))); + EnableWindow(GetDlgItem(hwndDlg, IDC_SCRIPT), bMbotInstalled); + EnableWindow(GetDlgItem(hwndDlg, IDC_PERFORMCOMBO), prefs->Perform); + EnableWindow(GetDlgItem(hwndDlg, IDC_PERFORMEDIT), prefs->Perform); + EnableWindow(GetDlgItem(hwndDlg, IDC_ADD), prefs->Perform); + EnableWindow(GetDlgItem(hwndDlg, IDC_DELETE), prefs->Perform); + char * p1 = pszServerFile; + char * p2 = pszServerFile; + if (pszServerFile) + while(strchr(p2, 'n')) + { + p1 = strstr(p2, "GROUP:"); + p1 =p1+ 6; + p2 = strchr(p1, '\r'); + if (!p2) + p2 = strchr(p1, '\n'); + if (!p2) + p2 = strchr(p1, '\0'); + + char * Group = new char[p2-p1+1]; + lstrcpyn(Group, p1, p2-p1+1); + int i = SendDlgItemMessage(hwndDlg, IDC_PERFORMCOMBO, CB_FINDSTRINGEXACT, (WPARAM)-1, (LPARAM)Group); + if (i ==CB_ERR) { + int index = SendMessage(GetDlgItem(hwndDlg, IDC_PERFORMCOMBO), CB_ADDSTRING, 0, (LPARAM) Group); +// SendDlgItemMessage(hwndDlg, IDC_PERFORMCOMBO, CB_SETITEMDATA, index, 0); + } + delete []Group; + + } + + SendDlgItemMessage(hwndDlg, IDC_PERFORMCOMBO, CB_INSERTSTRING, 0, (LPARAM)"Event: Available" ); + SendDlgItemMessage(hwndDlg, IDC_PERFORMCOMBO, CB_INSERTSTRING, 1, (LPARAM)"Event: Away" ); + SendDlgItemMessage(hwndDlg, IDC_PERFORMCOMBO, CB_INSERTSTRING, 2, (LPARAM)"Event: N/A" ); + SendDlgItemMessage(hwndDlg, IDC_PERFORMCOMBO, CB_INSERTSTRING, 3, (LPARAM)"Event: Occupied" ); + SendDlgItemMessage(hwndDlg, IDC_PERFORMCOMBO, CB_INSERTSTRING, 4, (LPARAM)"Event: DND" ); + SendDlgItemMessage(hwndDlg, IDC_PERFORMCOMBO, CB_INSERTSTRING, 5, (LPARAM)"Event: Free for chat" ); + SendDlgItemMessage(hwndDlg, IDC_PERFORMCOMBO, CB_INSERTSTRING, 6, (LPARAM)"Event: On the phone" ); + SendDlgItemMessage(hwndDlg, IDC_PERFORMCOMBO, CB_INSERTSTRING, 7, (LPARAM)"Event: Out for lunch" ); + SendDlgItemMessage(hwndDlg, IDC_PERFORMCOMBO, CB_INSERTSTRING, 8, (LPARAM)"Event: Disconnect" ); + SendDlgItemMessage(hwndDlg, IDC_PERFORMCOMBO, CB_INSERTSTRING, 9, (LPARAM)"ALL NETWORKS" ); + SendDlgItemMessage(hwndDlg, IDC_PERFORMCOMBO, CB_SETITEMDATA, -1, 0); + p1 = pszPerformFile; + p2 = pszPerformFile; + if(pszPerformFile) + while(strstr(p2, "NETWORK: ")) { + p1 = strstr(p2, "NETWORK: "); + p1 = p1+9; + p2 = strchr(p1, '\n'); + char * szNetwork = new char[p2-p1]; + lstrcpyn(szNetwork, p1, p2-p1); + p1 = p2; + p1++; + p2 = strstr(p1, "\nNETWORK: "); + if (!p2) + p2= p1 + lstrlen(p1)-1; + if(p1 != p2) { + int index = SendDlgItemMessage(hwndDlg, IDC_PERFORMCOMBO, CB_FINDSTRINGEXACT, -1, (LPARAM) szNetwork); + if (index != CB_ERR) { + PERFORM_INFO * pPref = new PERFORM_INFO; + pPref->Perform = new char[p2-p1]; + lstrcpyn(pPref->Perform, p1, p2-p1); + SendDlgItemMessage(hwndDlg, IDC_PERFORMCOMBO, CB_SETITEMDATA, index, (LPARAM)pPref); + } + } + else + break; + delete [] szNetwork; + } + SendDlgItemMessage(hwndDlg, IDC_PERFORMCOMBO, CB_SETCURSEL, 0, 0); + SendMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(IDC_PERFORMCOMBO, CBN_SELCHANGE), 0); + PerformlistModified = false; + + }break; + + case WM_COMMAND: + { + + if(( LOWORD(wParam) == IDC_ALIASEDIT + || LOWORD(wParam) == IDC_PERFORMEDIT + || LOWORD(wParam) == IDC_QUITMESSAGE + || LOWORD(wParam) == IDC_PERFORMCOMBO && HIWORD(wParam) != CBN_SELCHANGE + ) + && (HIWORD(wParam)!=EN_CHANGE || (HWND)lParam!=GetFocus())) return true; + + + if ( HIWORD(wParam) == STN_CLICKED ) + { + switch (LOWORD(wParam)) + { + case IDC_CUSTOM: + { + CallService(MS_UTILS_OPENURL,0,(LPARAM) "http://members.chello.se/matrix/index.html" ); + }break; + default:break; + } // switch + } + if (HIWORD(wParam) == CBN_SELCHANGE && LOWORD(wParam) == IDC_PERFORMCOMBO) + { + + int i = SendMessage(GetDlgItem(hwndDlg, IDC_PERFORMCOMBO), CB_GETCURSEL, 0, 0); + PERFORM_INFO * pPerf = (PERFORM_INFO *)SendMessage(GetDlgItem(hwndDlg, IDC_PERFORMCOMBO), CB_GETITEMDATA, i, 0); + if (pPerf == 0) + SetDlgItemText(hwndDlg, IDC_PERFORMEDIT, ""); + else + SetDlgItemText(hwndDlg, IDC_PERFORMEDIT, pPerf->Perform); + EnableWindow(GetDlgItem(hwndDlg, IDC_ADD), false); + if ( GetWindowTextLength(GetDlgItem(hwndDlg, IDC_PERFORMEDIT)) != 0) + { + EnableWindow(GetDlgItem(hwndDlg, IDC_DELETE), true); + } + else + { + EnableWindow(GetDlgItem(hwndDlg, IDC_DELETE), false); + } + return false; + } + SendMessage(GetParent(hwndDlg), PSM_CHANGED,0,0); + + if (HIWORD(wParam) == EN_CHANGE && LOWORD(wParam) == IDC_PERFORMEDIT) + { + EnableWindow(GetDlgItem(hwndDlg, IDC_ADD), true); + + if ( GetWindowTextLength(GetDlgItem(hwndDlg, IDC_PERFORMEDIT)) != 0) + { + EnableWindow(GetDlgItem(hwndDlg, IDC_DELETE), true); + } + else + { + EnableWindow(GetDlgItem(hwndDlg, IDC_DELETE), false); + } + } + + if (HIWORD(wParam) == BN_CLICKED) + { + switch (LOWORD(wParam)) + { + case ( IDC_PERFORM): + { + + EnableWindow(GetDlgItem(hwndDlg, IDC_PERFORMCOMBO), IsDlgButtonChecked(hwndDlg, IDC_PERFORM)== BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_PERFORMEDIT), IsDlgButtonChecked(hwndDlg, IDC_PERFORM)== BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_ADD), IsDlgButtonChecked(hwndDlg, IDC_PERFORM)== BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_DELETE), IsDlgButtonChecked(hwndDlg, IDC_PERFORM)== BST_CHECKED); + + }break; + + + case ( IDC_ADD): + { + + int j = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_PERFORMEDIT)); + char * temp = new char[j+1]; + GetWindowText(GetDlgItem(hwndDlg, IDC_PERFORMEDIT), temp, j+1); + + if(my_strstri(temp, "/away")) + MessageBox(NULL, Translate("The usage of /AWAY in your perform buffer is restricted\n as IRC sends this command automatically."), Translate("IRC Error"), MB_OK); + else + { + int i = (int) SendMessage(GetDlgItem(hwndDlg, IDC_PERFORMCOMBO), CB_GETCURSEL, 0, 0); + PERFORM_INFO * pPerf = (PERFORM_INFO *)SendMessage(GetDlgItem(hwndDlg, IDC_PERFORMCOMBO), CB_GETITEMDATA, i, 0); + if (pPerf != 0) + { + delete []pPerf->Perform; + delete pPerf; + } + pPerf = new PERFORM_INFO; + pPerf->Perform = new char[j+1]; + lstrcpy(pPerf->Perform, temp); + SendMessage(GetDlgItem(hwndDlg, IDC_PERFORMCOMBO), CB_SETITEMDATA, i, (LPARAM) pPerf); + EnableWindow(GetDlgItem(hwndDlg, IDC_ADD), false); + + PerformlistModified = true; + } + delete []temp; + + + }break; + + case ( IDC_DELETE): + { + int i = (int) SendMessage(GetDlgItem(hwndDlg, IDC_PERFORMCOMBO), CB_GETCURSEL, 0, 0); + PERFORM_INFO * pPerf = (PERFORM_INFO *)SendMessage(GetDlgItem(hwndDlg, IDC_PERFORMCOMBO), CB_GETITEMDATA, i, 0); + if (pPerf != 0) + { + delete []pPerf->Perform; + delete pPerf; + } + SetDlgItemText(hwndDlg, IDC_PERFORMEDIT, ""); + SendMessage(GetDlgItem(hwndDlg, IDC_PERFORMCOMBO), CB_SETITEMDATA, i, 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_DELETE), false); + EnableWindow(GetDlgItem(hwndDlg, IDC_ADD), false); + + + PerformlistModified = true; + + }break; + default:break; + } + } + }break; + case WM_DESTROY: + { + PerformlistModified = false; + int i = SendMessage(GetDlgItem(hwndDlg, IDC_PERFORMCOMBO), CB_GETCOUNT, 0, 0); + if (i != CB_ERR && i !=0) + { + for (int index = 0; index < i; index++) + { + PERFORM_INFO * pPerf = (PERFORM_INFO *)SendMessage(GetDlgItem(hwndDlg, IDC_PERFORMCOMBO), CB_GETITEMDATA, index, 0); + if ( (const int)pPerf != CB_ERR && pPerf != 0) + { + delete []pPerf->Perform; + delete pPerf; + } + + } + } + + } break; + case WM_NOTIFY: + { + switch(((LPNMHDR)lParam)->idFrom) + { + case 0: + switch (((LPNMHDR)lParam)->code) + { + case PSN_APPLY: + { + + delete [] prefs->Alias; + prefs->Alias = new char[GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ALIASEDIT))+1]; + GetDlgItemText(hwndDlg,IDC_ALIASEDIT,prefs->Alias, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ALIASEDIT))+1); + DBWriteContactSettingString(NULL,IRCPROTONAME,"Alias",prefs->Alias); + + GetDlgItemText(hwndDlg,IDC_QUITMESSAGE,prefs->QuitMessage, 399); + DBWriteContactSettingString(NULL,IRCPROTONAME,"QuitMessage",prefs->QuitMessage); + + prefs->Perform = IsDlgButtonChecked(hwndDlg,IDC_PERFORM)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"Perform",prefs->Perform); + prefs->ScriptingEnabled = IsDlgButtonChecked(hwndDlg,IDC_SCRIPT)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"ScriptingEnabled",prefs->ScriptingEnabled); + if (IsWindowEnabled(GetDlgItem(hwndDlg, IDC_ADD))) + SendMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(IDC_ADD, BN_CLICKED), 0); + + if (PerformlistModified) { + PerformlistModified = false; + char filepath[MAX_PATH]; + mir_snprintf(filepath, sizeof(filepath), "%s\\%s_perform.ini", mirandapath, IRCPROTONAME); + int i = SendMessage(GetDlgItem(hwndDlg, IDC_PERFORMCOMBO), CB_GETCOUNT, 0, 0); + FILE *hFile = fopen(filepath,"wb"); + if (hFile && i != CB_ERR && i !=0) + { + for (int index = 0; index < i; index++) + { + PERFORM_INFO * pPerf = (PERFORM_INFO *)SendMessage(GetDlgItem(hwndDlg, IDC_PERFORMCOMBO), CB_GETITEMDATA, index, 0); + if ( (const int)pPerf != CB_ERR && pPerf != 0) + { + int k = SendMessage(GetDlgItem(hwndDlg, IDC_PERFORMCOMBO), CB_GETLBTEXTLEN, index, 0); + char * temp = new char[k+1]; + SendMessage(GetDlgItem(hwndDlg, IDC_PERFORMCOMBO), CB_GETLBTEXT, index, (LPARAM)temp); + fputs("NETWORK: ", hFile); + fputs(temp, hFile); + fputs("\r\n", hFile); + fputs(pPerf->Perform, hFile); + fputs("\r\n", hFile); + delete []temp; + + } + + } + fclose(hFile); + delete [] pszPerformFile; + pszPerformFile = IrcLoadFile(filepath); + + } + } + + } + return TRUE; + } + } + }break; + + default:break; + } + + return false; +} + +static const UINT IRCExtraAvatarsControls[] = {IDC_ENABLEAVATARS, IDC_AUTOLOADAVATARS/*,IDC_LINKAVATARS*/}; +static const UINT IRCExtraXStatusControls[] = {IDC_XSTATUSRESET,IDC_XSTATUSAUTO}; +static const UINT IRCAdvXStatusControls[] = {IDC_ADV1,IDC_ADV2,IDC_ADV3,IDC_ADV4,IDC_ADV5,IDC_ADV6}; + +BOOL CALLBACK ExtraPrefsProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) +{ + UINT i; +// UINT data; + + switch (uMsg) + { + case WM_CHAR: + { + SendMessage(GetParent(hwndDlg), PSM_CHANGED,0,0); + }break; + + case WM_INITDIALOG: + { + TranslateDialogDefault(hwndDlg); + + SetWindowLong(GetDlgItem(hwndDlg, IDC_QUITMESSAGE), GWL_WNDPROC,(LONG)EditSubclassProc); + SetDlgItemText(hwndDlg,IDC_QUITMESSAGE,prefs->QuitMessage); + + SetWindowLong(GetDlgItem(hwndDlg, IDC_MEMOSERVNAME), GWL_WNDPROC,(LONG)EditSubclassProc); + SetDlgItemText(hwndDlg,IDC_MEMOSERVNAME,prefs->MemoServName); + + CheckDlgButton(hwndDlg,IDC_VERSIONAUTO, ((prefs->VersionAuto) ? (BST_CHECKED) : (BST_UNCHECKED))); + + CheckDlgButton(hwndDlg,IDC_NUDGEENABLE, ((prefs->NudgeEnabled) ? (BST_CHECKED) : (BST_UNCHECKED))); + EnableWindow(GetDlgItem(hwndDlg, IDC_NUDGEENABLE), ServiceExists(MS_NUDGE_SEND)); + + CheckDlgButton(hwndDlg,IDC_TYPINGENABLE, ((prefs->TypingEnabled) ? (BST_CHECKED) : (BST_UNCHECKED))); + + CheckDlgButton(hwndDlg,IDC_XSTATUSENABLE, ((prefs->XStatusEnabled) ? (BST_CHECKED) : (BST_UNCHECKED))); + CheckDlgButton(hwndDlg,IDC_XSTATUSRESET, ((prefs->XStatusReset) ? (BST_CHECKED) : (BST_UNCHECKED))); + CheckDlgButton(hwndDlg,IDC_XSTATUSAUTO, ((prefs->XStatusAuto) ? (BST_CHECKED) : (BST_UNCHECKED))); + + for(i=0;iXStatusAdv)?BST_CHECKED:BST_UNCHECKED,0L); + + CheckDlgButton(hwndDlg,IDC_ENABLEAVATARS, ((prefs->AvatarsEnabled) ? (BST_CHECKED) : (BST_UNCHECKED))); + CheckDlgButton(hwndDlg,IDC_AUTOLOADAVATARS, ((prefs->AvatarsAutoLoad) ? (BST_CHECKED) : (BST_UNCHECKED))); + CheckDlgButton(hwndDlg,IDC_LINKAVATARS, ((prefs->AvatarsAutoLink) ? (BST_CHECKED) : (BST_UNCHECKED))); + + CheckDlgButton(hwndDlg,IDC_SCRIPT, ((prefs->ScriptingEnabled) ? (BST_CHECKED) : (BST_UNCHECKED))); + EnableWindow(GetDlgItem(hwndDlg, IDC_SCRIPT), bMbotInstalled); + + CheckDlgButton(hwndDlg,IDC_MEMOSERV, ((prefs->UseMemoServ) ? (BST_CHECKED) : (BST_UNCHECKED))); + CheckDlgButton(hwndDlg,IDC_MEMOSERV_AUTORETRIEVE, ((prefs->MemoServAuto) ? (BST_CHECKED) : (BST_UNCHECKED))); + + if(DBGetContactSettingByte(NULL,IRCPROTONAME, "Developer", 0)) + { + EnableWindow(GetDlgItem(hwndDlg, IDC_XSTATUSENABLE), TRUE); + IRC_EnableMultipleControls(hwndDlg, IRCExtraXStatusControls, sizeof(IRCExtraXStatusControls)/sizeof(IRCExtraXStatusControls[0]), prefs->XStatusEnabled); + + IRC_EnableMultipleControls(hwndDlg, IRCAdvXStatusControls, sizeof(IRCAdvXStatusControls)/sizeof(IRCAdvXStatusControls[0]), 1); + + EnableWindow(GetDlgItem(hwndDlg, IDC_ENABLEAVATARS), TRUE); + IRC_EnableMultipleControls(hwndDlg, IRCExtraAvatarsControls, sizeof(IRCExtraAvatarsControls)/sizeof(IRCExtraAvatarsControls[0]), prefs->AvatarsEnabled); + + #ifdef _DEBUG + EnableWindow(GetDlgItem(hwndDlg, IDC_MEMOSERV), TRUE); + EnableWindow(GetDlgItem(hwndDlg, IDC_MEMOSERVNAME), prefs->UseMemoServ); + EnableWindow(GetDlgItem(hwndDlg, IDC_MEMOSERV_AUTORETRIEVE), TRUE); + #endif + } + + return TRUE; + } + + case WM_COMMAND: + { + if(( LOWORD(wParam) == IDC_QUITMESSAGE || LOWORD(wParam) == IDC_MEMOSERVNAME) && (HIWORD(wParam)!=EN_CHANGE || (HWND)lParam!=GetFocus())) return true; + + if ( HIWORD(wParam) == STN_CLICKED ) + { + switch (LOWORD(wParam)) + { + case IDC_CUSTOM: + { + CallService(MS_UTILS_OPENURL,0,(LPARAM) "http://dev.mirandaim.ru/iron/" ); + return true; + }break; + default:break; + } // switch + } + + if (HIWORD(wParam) == BN_CLICKED) + { + switch (LOWORD(wParam)) + { + case IDC_MEMOSERV: + { + EnableWindow(GetDlgItem(hwndDlg, IDC_MEMOSERVNAME), IsDlgButtonChecked(hwndDlg, IDC_MEMOSERV)== BST_CHECKED); + }break; + + case IDC_XSTATUSENABLE: + { + IRC_EnableMultipleControls(hwndDlg, IRCExtraXStatusControls, sizeof(IRCExtraXStatusControls)/sizeof(IRCExtraXStatusControls[0]), IsDlgButtonChecked(hwndDlg,IDC_XSTATUSENABLE)); + } + break; + + case IDC_ENABLEAVATARS: + { + IRC_EnableMultipleControls(hwndDlg, IRCExtraAvatarsControls, sizeof(IRCExtraAvatarsControls)/sizeof(IRCExtraAvatarsControls[0]), IsDlgButtonChecked(hwndDlg,IDC_ENABLEAVATARS)); + } + break; + +// case IDC_ADV8: +// case IDC_ADV7: + case IDC_ADV6: + case IDC_ADV5: + case IDC_ADV4: + case IDC_ADV3: + case IDC_ADV2: + case IDC_ADV1: + { + for(int i=0;iidFrom) + { + case 0: + switch (((LPNMHDR)lParam)->code) + { + case PSN_APPLY: + { + GetDlgItemText(hwndDlg,IDC_QUITMESSAGE,prefs->QuitMessage, 399); + DBWriteContactSettingString(NULL,IRCPROTONAME,"QuitMessage",prefs->QuitMessage); + + GetDlgItemText(hwndDlg,IDC_MEMOSERVNAME,prefs->MemoServName, 29); + DBWriteContactSettingString(NULL,IRCPROTONAME,"MemoServName",prefs->MemoServName); + + prefs->ScriptingEnabled = IsDlgButtonChecked(hwndDlg,IDC_SCRIPT)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"ScriptingEnabled",prefs->ScriptingEnabled); + + prefs->VersionAuto = IsDlgButtonChecked(hwndDlg,IDC_VERSIONAUTO)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"VersionAuto",prefs->VersionAuto); + prefs->NudgeEnabled = IsDlgButtonChecked(hwndDlg,IDC_NUDGEENABLE)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"NudgeEnabled",prefs->NudgeEnabled); + prefs->TypingEnabled = IsDlgButtonChecked(hwndDlg,IDC_TYPINGENABLE)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"TypingEnabled",prefs->TypingEnabled); + + prefs->XStatusEnabled = IsDlgButtonChecked(hwndDlg,IDC_XSTATUSENABLE)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"XStatusEnabled",prefs->XStatusEnabled); + prefs->XStatusReset = IsDlgButtonChecked(hwndDlg,IDC_XSTATUSRESET)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"XStatusReset",prefs->XStatusReset); + prefs->XStatusAuto = IsDlgButtonChecked(hwndDlg,IDC_XSTATUSAUTO)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"XStatusAuto",prefs->XStatusAuto); + + for(i=0;iAvatarsEnabled = IsDlgButtonChecked(hwndDlg,IDC_ENABLEAVATARS)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"AvatarsEnabled",prefs->AvatarsEnabled); + prefs->AvatarsAutoLoad = IsDlgButtonChecked(hwndDlg,IDC_AUTOLOADAVATARS)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"AvatarsAutoLoad",prefs->AvatarsAutoLoad); + prefs->AvatarsAutoLink = IsDlgButtonChecked(hwndDlg,IDC_LINKAVATARS)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"AvatarsAutoLink",prefs->AvatarsAutoLink); + + prefs->UseMemoServ = IsDlgButtonChecked(hwndDlg,IDC_MEMOSERV)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"UseMemoServ",prefs->UseMemoServ); + prefs->MemoServAuto = IsDlgButtonChecked(hwndDlg,IDC_MEMOSERV_AUTORETRIEVE)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"MemoServAuto",prefs->MemoServAuto); + + return TRUE; + } + } + } + }break; + + default:break; + } + return FALSE; +} + +// Callback for the 'Connect preferences' dialog +BOOL CALLBACK ConnectPrefsProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) +{ + switch (uMsg) + { + case WM_CHAR: + { + SendMessage(GetParent(hwndDlg), PSM_CHANGED,0,0); + }break; + case WM_INITDIALOG: + { + + TranslateDialogDefault(hwndDlg); + + SendDlgItemMessage(hwndDlg,IDC_ADDSERVER,BM_SETIMAGE,IMAGE_ICON,(LPARAM)LoadIconEx(IDI_ADD,"add",GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON))); + SendDlgItemMessage(hwndDlg,IDC_DELETESERVER,BM_SETIMAGE,IMAGE_ICON,(LPARAM)LoadIconEx(IDI_DELETE,"delete",GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON))); + SendDlgItemMessage(hwndDlg,IDC_EDITSERVER,BM_SETIMAGE,IMAGE_ICON,(LPARAM)LoadIconEx(IDI_RENAME,"rename",GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON))); + SendMessage(GetDlgItem(hwndDlg,IDC_ADDSERVER), BUTTONADDTOOLTIP, (WPARAM)Translate("Add a new network"), 0); + SendMessage(GetDlgItem(hwndDlg,IDC_EDITSERVER), BUTTONADDTOOLTIP, (WPARAM)Translate("Edit this network"), 0); + SendMessage(GetDlgItem(hwndDlg,IDC_DELETESERVER), BUTTONADDTOOLTIP, (WPARAM)Translate("Delete this network"), 0); + + + connect_hWnd = hwndDlg; + + // Fill the servers combo box and create SERVER_INFO structures + char * p1 = pszServerFile; + char * p2 = pszServerFile; + if(pszServerFile) + while (strchr(p2, 'n')) + { + SERVER_INFO * pData = new SERVER_INFO; + p1 = strchr(p2, '='); + ++p1; + p2 = strstr(p1, "SERVER:"); + pData->Name=new char[p2-p1+1]; + lstrcpyn(pData->Name, p1, p2-p1+1); + + p1 = strchr(p2, ':'); + ++p1; + pData->iSSL = 0; + if(strstr(p1, "SSL") == p1) + { + p1 +=3; + if(*p1 == '1') + pData->iSSL = 1; + else if(*p1 == '2') + pData->iSSL = 2; + p1++; + } + p2 = strchr(p1, ':'); + pData->Address=new char[p2-p1+1]; + lstrcpyn(pData->Address, p1, p2-p1+1); + + p1 = p2; + p1++; + while (*p2 !='G' && *p2 != '-') + p2++; + pData->PortStart = new char[p2-p1+1]; + lstrcpyn(pData->PortStart, p1, p2-p1+1); + + if (*p2 == 'G'){ + pData->PortEnd = new char[p2-p1+1]; + lstrcpy(pData->PortEnd, pData->PortStart); + } else { + p1 = p2; + p1++; + p2 = strchr(p1, 'G'); + pData->PortEnd = new char[p2-p1+1]; + lstrcpyn(pData->PortEnd, p1, p2-p1+1); + } + + p1 = strchr(p2, ':'); + p1++; + p2 = strchr(p1, '\r'); + if (!p2) + p2 = strchr(p1, '\n'); + if (!p2) + p2 = strchr(p1, '\0'); + pData->Group = new char[p2-p1+1]; + lstrcpyn(pData->Group, p1, p2-p1+1); + int iItem = SendDlgItemMessage(hwndDlg, IDC_SERVERCOMBO, CB_ADDSTRING,0,(LPARAM) pData->Name); + SendDlgItemMessage(hwndDlg, IDC_SERVERCOMBO, CB_SETITEMDATA, iItem,(LPARAM) pData); + + } + + SendDlgItemMessage(hwndDlg, IDC_SERVERCOMBO, CB_SETCURSEL, prefs->ServerComboSelection,0); + SetDlgItemText(hwndDlg,IDC_SERVER, prefs->ServerName); + SetDlgItemText(hwndDlg,IDC_PORT, prefs->PortStart); + SetDlgItemText(hwndDlg,IDC_PORT2, prefs->PortEnd); + if(m_ssleay32) + { + if(prefs->iSSL == 0) + SetDlgItemText(hwndDlg,IDC_SSL,Translate("Off") ); + if(prefs->iSSL == 1) + SetDlgItemText(hwndDlg,IDC_SSL,Translate("Auto") ); + if(prefs->iSSL == 2) + SetDlgItemText(hwndDlg,IDC_SSL,Translate("On") ); + } + else + SetDlgItemText(hwndDlg,IDC_SSL, Translate("N/A")); + + + + if (prefs->ServerComboSelection != -1) + { + SERVER_INFO * pData = (SERVER_INFO *)SendDlgItemMessage(hwndDlg, IDC_SERVERCOMBO, CB_GETITEMDATA, prefs->ServerComboSelection, 0); + if ((int)pData != CB_ERR) + { + SetDlgItemText(hwndDlg,IDC_SERVER,pData->Address); + SetDlgItemText(hwndDlg,IDC_PORT,pData->PortStart); + SetDlgItemText(hwndDlg,IDC_PORT2,pData->PortEnd); + } + } + + SendDlgItemMessage(hwndDlg,IDC_SPIN1,UDM_SETRANGE,0,MAKELONG(999,20)); + SendDlgItemMessage(hwndDlg,IDC_SPIN1,UDM_SETPOS,0,MAKELONG(prefs->OnlineNotificationTime,0)); + SendDlgItemMessage(hwndDlg,IDC_SPIN2,UDM_SETRANGE,0,MAKELONG(200,0)); + SendDlgItemMessage(hwndDlg,IDC_SPIN2,UDM_SETPOS,0,MAKELONG(prefs->OnlineNotificationLimit,0)); + SetDlgItemText(hwndDlg,IDC_NICK,prefs->Nick); + SetDlgItemText(hwndDlg,IDC_NICK2,prefs->AlternativeNick); + SetDlgItemText(hwndDlg,IDC_USERID,prefs->UserID); + SetDlgItemText(hwndDlg,IDC_NAME,prefs->Name); + SetDlgItemText(hwndDlg,IDC_PASS,prefs->Password); + SetDlgItemText(hwndDlg,IDC_IDENTSYSTEM,prefs->IdentSystem); + SetDlgItemText(hwndDlg,IDC_IDENTPORT,prefs->IdentPort); + SetDlgItemText(hwndDlg,IDC_RETRYWAIT,prefs->RetryWait); + SetDlgItemText(hwndDlg,IDC_RETRYCOUNT,prefs->RetryCount); + CheckDlgButton(hwndDlg,IDC_ADDRESS, ((prefs->ShowAddresses) ? (BST_CHECKED) : (BST_UNCHECKED))); + CheckDlgButton(hwndDlg,IDC_OLDSTYLE, ((prefs->OldStyleModes) ? (BST_CHECKED) : (BST_UNCHECKED))); + CheckDlgButton(hwndDlg,IDC_CHANNELAWAY, ((prefs->ChannelAwayNotification) ? (BST_CHECKED) : (BST_UNCHECKED))); + CheckDlgButton(hwndDlg,IDC_ONLINENOTIF, ((prefs->AutoOnlineNotification) ? (BST_CHECKED) : (BST_UNCHECKED))); + EnableWindow(GetDlgItem(hwndDlg, IDC_ONLINETIMER), prefs->AutoOnlineNotification); + EnableWindow(GetDlgItem(hwndDlg, IDC_CHANNELAWAY), prefs->AutoOnlineNotification); + EnableWindow(GetDlgItem(hwndDlg, IDC_SPIN1), prefs->AutoOnlineNotification); + EnableWindow(GetDlgItem(hwndDlg, IDC_SPIN2), prefs->AutoOnlineNotification && prefs->ChannelAwayNotification); + EnableWindow(GetDlgItem(hwndDlg, IDC_LIMIT), prefs->AutoOnlineNotification && prefs->ChannelAwayNotification); + CheckDlgButton(hwndDlg,IDC_IDENT, ((prefs->Ident) ? (BST_CHECKED) : (BST_UNCHECKED))); + EnableWindow(GetDlgItem(hwndDlg, IDC_IDENTSYSTEM), prefs->Ident); + EnableWindow(GetDlgItem(hwndDlg, IDC_IDENTPORT), prefs->Ident); + CheckDlgButton(hwndDlg,IDC_DISABLEERROR, ((prefs->DisableErrorPopups) ? (BST_CHECKED) : (BST_UNCHECKED))); + CheckDlgButton(hwndDlg,IDC_FORCEVISIBLE, ((prefs->ForceVisible) ? (BST_CHECKED) : (BST_UNCHECKED))); + CheckDlgButton(hwndDlg,IDC_REJOINCHANNELS, ((prefs->RejoinChannels) ? (BST_CHECKED) : (BST_UNCHECKED))); + CheckDlgButton(hwndDlg,IDC_REJOINONKICK, ((prefs->RejoinIfKicked) ? (BST_CHECKED) : (BST_UNCHECKED))); + CheckDlgButton(hwndDlg,IDC_RETRY, ((prefs->Retry) ? (BST_CHECKED) : (BST_UNCHECKED))); + EnableWindow(GetDlgItem(hwndDlg, IDC_RETRYWAIT), prefs->Retry); + EnableWindow(GetDlgItem(hwndDlg, IDC_RETRYCOUNT), prefs->Retry); + CheckDlgButton(hwndDlg,IDC_STARTUP, ((!prefs->DisableDefaultServer) ? (BST_CHECKED) : (BST_UNCHECKED))); + CheckDlgButton(hwndDlg,IDC_KEEPALIVE, ((prefs->SendKeepAlive) ? (BST_CHECKED) : (BST_UNCHECKED))); + CheckDlgButton(hwndDlg,IDC_IDENT_TIMED, ((prefs->IdentTimer) ? (BST_CHECKED) : (BST_UNCHECKED))); + CheckDlgButton(hwndDlg,IDC_USESERVER, ((prefs->UseServer) ? (BST_CHECKED) : (BST_UNCHECKED))); + CheckDlgButton(hwndDlg,IDC_SHOWSERVER, ((!prefs->HideServerWindow) ? (BST_CHECKED) : (BST_UNCHECKED))); + CheckDlgButton(hwndDlg,IDC_AUTOJOIN, ((prefs->JoinOnInvite) ? (BST_CHECKED) : (BST_UNCHECKED))); + EnableWindow(GetDlgItem(hwndDlg, IDC_SHOWSERVER), prefs->UseServer); + EnableWindow(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), !prefs->DisableDefaultServer); + EnableWindow(GetDlgItem(hwndDlg, IDC_ADDSERVER), !prefs->DisableDefaultServer); + EnableWindow(GetDlgItem(hwndDlg, IDC_EDITSERVER), !prefs->DisableDefaultServer); + EnableWindow(GetDlgItem(hwndDlg, IDC_DELETESERVER), !prefs->DisableDefaultServer); + EnableWindow(GetDlgItem(hwndDlg, IDC_SERVER), !prefs->DisableDefaultServer); + EnableWindow(GetDlgItem(hwndDlg, IDC_PORT), !prefs->DisableDefaultServer); + EnableWindow(GetDlgItem(hwndDlg, IDC_PORT2), !prefs->DisableDefaultServer); + EnableWindow(GetDlgItem(hwndDlg, IDC_PASS), !prefs->DisableDefaultServer); + EnableWindow(GetDlgItem(hwndDlg, IDC_IDENT_TIMED), prefs->Ident); + ServerlistModified = false; + } break; + + case WM_COMMAND: + { + if( (LOWORD(wParam) == IDC_SERVER + || LOWORD(wParam) == IDC_PORT + || LOWORD(wParam) == IDC_PORT2 + || LOWORD(wParam) == IDC_PASS + || LOWORD(wParam) == IDC_NICK + || LOWORD(wParam) == IDC_NICK2 + || LOWORD(wParam) == IDC_NAME + || LOWORD(wParam) == IDC_USERID + || LOWORD(wParam) == IDC_IDENTSYSTEM + || LOWORD(wParam) == IDC_IDENTPORT + || LOWORD(wParam) == IDC_ONLINETIMER + || LOWORD(wParam) == IDC_LIMIT + || LOWORD(wParam) == IDC_RETRYWAIT + || LOWORD(wParam) == IDC_RETRYCOUNT + || LOWORD(wParam) == IDC_SSL + || LOWORD(wParam) == IDC_SERVERCOMBO && HIWORD(wParam) != CBN_SELCHANGE + ) + && (HIWORD(wParam)!=EN_CHANGE || (HWND)lParam!=GetFocus())) return true; + if (HIWORD(wParam) == CBN_SELCHANGE && LOWORD(wParam) == IDC_SERVERCOMBO) + { + + + int i = SendMessage(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), CB_GETCURSEL, 0, 0); + SERVER_INFO * pData = (SERVER_INFO *)SendMessage(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), CB_GETITEMDATA, i, 0); + if (pData && (int)pData !=CB_ERR) + { + SetDlgItemText(hwndDlg,IDC_SERVER,pData->Address); + SetDlgItemText(hwndDlg,IDC_PORT,pData->PortStart); + SetDlgItemText(hwndDlg,IDC_PORT2,pData->PortEnd); + SetDlgItemText(hwndDlg,IDC_PASS,""); + if(m_ssleay32) + { + if(pData->iSSL == 0) + SetDlgItemText(hwndDlg,IDC_SSL,Translate("Off") ); + if(pData->iSSL == 1) + SetDlgItemText(hwndDlg,IDC_SSL,Translate("Auto") ); + if(pData->iSSL == 2) + SetDlgItemText(hwndDlg,IDC_SSL,Translate("On") ); + } + else + SetDlgItemText(hwndDlg,IDC_SSL, Translate("N/A")); + SendMessage(GetParent(hwndDlg), PSM_CHANGED,0,0); + } + return false; + + } + SendMessage(GetParent(hwndDlg), PSM_CHANGED,0,0); + + if (HIWORD(wParam) == BN_CLICKED) + { + switch (LOWORD(wParam)) + { + case ( IDC_DELETESERVER): + { + int i = SendMessage(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), CB_GETCURSEL, 0, 0); + if (i != CB_ERR) + { + EnableWindow(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), false); + EnableWindow(GetDlgItem(hwndDlg, IDC_ADDSERVER), false); + EnableWindow(GetDlgItem(hwndDlg, IDC_EDITSERVER), false); + EnableWindow(GetDlgItem(hwndDlg, IDC_DELETESERVER), false); + SERVER_INFO * pData = (SERVER_INFO *)SendMessage(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), CB_GETITEMDATA, i, 0); + char * temp = new char [lstrlen(pData->Name)+24]; + wsprintf(temp,Translate( "Do you want to delete\r\n%s" ), pData->Name); + if (MessageBox(hwndDlg, temp, Translate( "Delete server" ), MB_YESNO|MB_ICONQUESTION) == IDYES) + { + delete []pData->Name; + delete []pData->Address; + delete []pData->PortStart; + delete []pData->PortEnd; + delete []pData->Group; + delete pData; + SendMessage(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), CB_DELETESTRING, i, 0); + if (i >= SendMessage(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), CB_GETCOUNT, 0, 0)) + i--; + SendMessage(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), CB_SETCURSEL, i, 0); + SendMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(IDC_SERVERCOMBO,CBN_SELCHANGE), 0); + ServerlistModified = true; + } + delete []temp; + EnableWindow(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), true); + EnableWindow(GetDlgItem(hwndDlg, IDC_ADDSERVER), true); + EnableWindow(GetDlgItem(hwndDlg, IDC_EDITSERVER), true); + EnableWindow(GetDlgItem(hwndDlg, IDC_DELETESERVER), true); + } + + }break; + + case ( IDC_ADDSERVER): + { + + EnableWindow(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), false); + EnableWindow(GetDlgItem(hwndDlg, IDC_ADDSERVER), false); + EnableWindow(GetDlgItem(hwndDlg, IDC_EDITSERVER), false); + EnableWindow(GetDlgItem(hwndDlg, IDC_DELETESERVER), false); + addserver_hWnd = CreateDialog(g_hInstance,MAKEINTRESOURCE(IDD_ADDSERVER),hwndDlg,AddServerProc); + + }break; + case ( IDC_EDITSERVER): + { + int i = SendMessage(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), CB_GETCURSEL, 0, 0); + if (i != CB_ERR) + { + EnableWindow(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), false); + EnableWindow(GetDlgItem(hwndDlg, IDC_ADDSERVER), false); + EnableWindow(GetDlgItem(hwndDlg, IDC_EDITSERVER), false); + EnableWindow(GetDlgItem(hwndDlg, IDC_DELETESERVER), false); + addserver_hWnd = CreateDialog(g_hInstance,MAKEINTRESOURCE(IDD_ADDSERVER),hwndDlg,EditServerProc); + SetWindowText(addserver_hWnd, Translate("Edit server")); + } + + }break; + case ( IDC_STARTUP): + { + EnableWindow(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), IsDlgButtonChecked(hwndDlg, IDC_STARTUP)== BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_ADDSERVER), IsDlgButtonChecked(hwndDlg, IDC_STARTUP)== BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_EDITSERVER), IsDlgButtonChecked(hwndDlg, IDC_STARTUP)== BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_DELETESERVER), IsDlgButtonChecked(hwndDlg, IDC_STARTUP)== BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_SERVER), IsDlgButtonChecked(hwndDlg, IDC_STARTUP)== BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_PORT), IsDlgButtonChecked(hwndDlg, IDC_STARTUP)== BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_PORT2), IsDlgButtonChecked(hwndDlg, IDC_STARTUP)== BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_PASS), IsDlgButtonChecked(hwndDlg, IDC_STARTUP)== BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_SSL), IsDlgButtonChecked(hwndDlg, IDC_STARTUP)== BST_CHECKED); + + }break; + + case ( IDC_IDENT): + { + EnableWindow(GetDlgItem(hwndDlg, IDC_IDENTSYSTEM), IsDlgButtonChecked(hwndDlg, IDC_IDENT)== BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_IDENTPORT), IsDlgButtonChecked(hwndDlg, IDC_IDENT)== BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_IDENT_TIMED), IsDlgButtonChecked(hwndDlg, IDC_IDENT)== BST_CHECKED); + }break; + case ( IDC_USESERVER): + { + EnableWindow(GetDlgItem(hwndDlg, IDC_SHOWSERVER), IsDlgButtonChecked(hwndDlg, IDC_USESERVER)== BST_CHECKED); + }break; + case ( IDC_ONLINENOTIF): + { + EnableWindow(GetDlgItem(hwndDlg, IDC_CHANNELAWAY), IsDlgButtonChecked(hwndDlg, IDC_ONLINENOTIF)== BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_ONLINETIMER), IsDlgButtonChecked(hwndDlg, IDC_ONLINENOTIF)== BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_SPIN1), IsDlgButtonChecked(hwndDlg, IDC_ONLINENOTIF)== BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_SPIN2), IsDlgButtonChecked(hwndDlg, IDC_ONLINENOTIF)== BST_CHECKED && IsDlgButtonChecked(hwndDlg, IDC_CHANNELAWAY)== BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_LIMIT), IsDlgButtonChecked(hwndDlg, IDC_ONLINENOTIF)== BST_CHECKED && IsDlgButtonChecked(hwndDlg, IDC_CHANNELAWAY)== BST_CHECKED); + + }break; + case ( IDC_CHANNELAWAY): + { + EnableWindow(GetDlgItem(hwndDlg, IDC_SPIN2), IsDlgButtonChecked(hwndDlg, IDC_ONLINENOTIF)== BST_CHECKED && IsDlgButtonChecked(hwndDlg, IDC_CHANNELAWAY)== BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_LIMIT), IsDlgButtonChecked(hwndDlg, IDC_ONLINENOTIF)== BST_CHECKED && IsDlgButtonChecked(hwndDlg, IDC_CHANNELAWAY)== BST_CHECKED); + + }break; + + case ( IDC_RETRY): + { + EnableWindow(GetDlgItem(hwndDlg, IDC_RETRYWAIT), IsDlgButtonChecked(hwndDlg, IDC_RETRY)== BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_RETRYCOUNT), IsDlgButtonChecked(hwndDlg, IDC_RETRY)== BST_CHECKED); + }break; + + default:break; + } + } + } break; + + case WM_NOTIFY: + { + switch(((LPNMHDR)lParam)->idFrom) + { + case 0: + switch (((LPNMHDR)lParam)->code) + { + case PSN_APPLY: + { + //Save the setting in the CONNECT dialog + if(IsDlgButtonChecked(hwndDlg, IDC_STARTUP)== BST_CHECKED) + { + GetDlgItemText(hwndDlg,IDC_SERVER, prefs->ServerName, 101); + DBWriteContactSettingString(NULL,IRCPROTONAME,"ServerName",prefs->ServerName); + GetDlgItemText(hwndDlg,IDC_PORT, prefs->PortStart, 6); + DBWriteContactSettingString(NULL,IRCPROTONAME,"PortStart",prefs->PortStart); + GetDlgItemText(hwndDlg,IDC_PORT2, prefs->PortEnd, 6); + DBWriteContactSettingString(NULL,IRCPROTONAME,"PortEnd",prefs->PortEnd); + GetDlgItemText(hwndDlg,IDC_PASS, prefs->Password, 500); + CallService(MS_DB_CRYPT_ENCODESTRING, 499, (LPARAM)prefs->Password); + DBWriteContactSettingString(NULL,IRCPROTONAME,"Password",prefs->Password); + CallService(MS_DB_CRYPT_DECODESTRING, 499, (LPARAM)prefs->Password); + } + else + { + lstrcpy(prefs->ServerName, ""); + DBWriteContactSettingString(NULL,IRCPROTONAME,"ServerName",prefs->ServerName); + lstrcpy(prefs->PortStart, ""); + DBWriteContactSettingString(NULL,IRCPROTONAME,"PortStart",prefs->PortStart); + lstrcpy(prefs->PortEnd, ""); + DBWriteContactSettingString(NULL,IRCPROTONAME,"PortEnd",prefs->PortEnd); + lstrcpy( prefs->Password, ""); + DBWriteContactSettingString(NULL,IRCPROTONAME,"Password",prefs->Password); + } + + prefs->OnlineNotificationTime = SendDlgItemMessage(hwndDlg,IDC_SPIN1,UDM_GETPOS,0,0); + DBWriteContactSettingWord(NULL, IRCPROTONAME, "OnlineNotificationTime", (BYTE)prefs->OnlineNotificationTime); + + prefs->OnlineNotificationLimit = SendDlgItemMessage(hwndDlg,IDC_SPIN2,UDM_GETPOS,0,0); + DBWriteContactSettingWord(NULL, IRCPROTONAME, "OnlineNotificationLimit", (BYTE)prefs->OnlineNotificationLimit); + + prefs->ChannelAwayNotification = IsDlgButtonChecked(hwndDlg, IDC_CHANNELAWAY )== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"ChannelAwayNotification",prefs->ChannelAwayNotification); + + GetDlgItemText(hwndDlg,IDC_NICK, prefs->Nick, 30); + DBWriteContactSettingString(NULL,IRCPROTONAME,"PNick",prefs->Nick); + DBWriteContactSettingString(NULL,IRCPROTONAME,"Nick",prefs->Nick); + GetDlgItemText(hwndDlg,IDC_NICK2, prefs->AlternativeNick, 30); + DBWriteContactSettingString(NULL,IRCPROTONAME,"AlernativeNick",prefs->AlternativeNick); + GetDlgItemText(hwndDlg,IDC_USERID, prefs->UserID, 199); + DBWriteContactSettingString(NULL,IRCPROTONAME,"UserID",prefs->UserID); + GetDlgItemText(hwndDlg,IDC_NAME, prefs->Name, 199); + DBWriteContactSettingString(NULL,IRCPROTONAME,"Name",prefs->Name); + GetDlgItemText(hwndDlg,IDC_IDENTSYSTEM, prefs->IdentSystem, 10); + DBWriteContactSettingString(NULL,IRCPROTONAME,"IdentSystem",prefs->IdentSystem); + GetDlgItemText(hwndDlg,IDC_IDENTPORT, prefs->IdentPort, 6); + DBWriteContactSettingString(NULL,IRCPROTONAME,"IdentPort",prefs->IdentPort); + GetDlgItemText(hwndDlg,IDC_RETRYWAIT, prefs->RetryWait, 4); + DBWriteContactSettingString(NULL,IRCPROTONAME,"RetryWait",prefs->RetryWait); + GetDlgItemText(hwndDlg,IDC_RETRYCOUNT, prefs->RetryCount, 4); + DBWriteContactSettingString(NULL,IRCPROTONAME,"RetryCount",prefs->RetryCount); + prefs->DisableDefaultServer = !IsDlgButtonChecked(hwndDlg, IDC_STARTUP)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"DisableDefaultServer",prefs->DisableDefaultServer); + prefs->Ident = IsDlgButtonChecked(hwndDlg, IDC_IDENT)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"Ident",prefs->Ident); + prefs->IdentTimer = IsDlgButtonChecked(hwndDlg, IDC_IDENT_TIMED)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"IdentTimer",prefs->IdentTimer); + prefs->ForceVisible = IsDlgButtonChecked(hwndDlg, IDC_FORCEVISIBLE)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"ForceVisible",prefs->ForceVisible); + prefs->DisableErrorPopups = IsDlgButtonChecked(hwndDlg, IDC_DISABLEERROR)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"DisableErrorPopups",prefs->DisableErrorPopups); + prefs->RejoinChannels = IsDlgButtonChecked(hwndDlg, IDC_REJOINCHANNELS)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"RejoinChannels",prefs->RejoinChannels); + prefs->RejoinIfKicked = IsDlgButtonChecked(hwndDlg, IDC_REJOINONKICK)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"RejoinIfKicked",prefs->RejoinIfKicked); + prefs->Retry = IsDlgButtonChecked(hwndDlg, IDC_RETRY)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"Retry",prefs->Retry); + prefs->ShowAddresses = IsDlgButtonChecked(hwndDlg, IDC_ADDRESS)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"ShowAddresses",prefs->ShowAddresses); + prefs->OldStyleModes = IsDlgButtonChecked(hwndDlg, IDC_OLDSTYLE)== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"OldStyleModes",prefs->OldStyleModes); + + prefs->UseServer = IsDlgButtonChecked(hwndDlg, IDC_USESERVER )== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"UseServer",prefs->UseServer); + + CLISTMENUITEM clmi; + memset( &clmi, 0, sizeof( clmi )); + clmi.cbSize = sizeof( clmi ); + if(prefs->UseServer) + { + clmi.flags = CMIM_FLAGS; + CallService( MS_CLIST_MODIFYMENUITEM, ( WPARAM )hMenuServer, ( LPARAM )&clmi ); + } + else + { + clmi.flags = CMIM_FLAGS|CMIF_GRAYED; + CallService( MS_CLIST_MODIFYMENUITEM, ( WPARAM )hMenuServer, ( LPARAM )&clmi ); + } + + prefs->JoinOnInvite = IsDlgButtonChecked(hwndDlg, IDC_AUTOJOIN )== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"JoinOnInvite",prefs->JoinOnInvite); + prefs->HideServerWindow = IsDlgButtonChecked(hwndDlg, IDC_SHOWSERVER )== BST_UNCHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"HideServerWindow",prefs->HideServerWindow); + prefs->ServerComboSelection = SendMessage(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), CB_GETCURSEL, 0, 0); + DBWriteContactSettingDword(NULL,IRCPROTONAME,"ServerComboSelection",prefs->ServerComboSelection); + prefs->SendKeepAlive = IsDlgButtonChecked(hwndDlg, IDC_KEEPALIVE )== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"SendKeepAlive",prefs->SendKeepAlive); + if (prefs->SendKeepAlive) + SetChatTimer(KeepAliveTimer, 60*1000, KeepAliveTimerProc); + else + KillChatTimer(KeepAliveTimer); + + prefs->AutoOnlineNotification = IsDlgButtonChecked(hwndDlg, IDC_ONLINENOTIF )== BST_CHECKED; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"AutoOnlineNotification",prefs->AutoOnlineNotification); + if (prefs->AutoOnlineNotification) + { + if(!bTempDisableCheck) + { + SetChatTimer(OnlineNotifTimer, 500, OnlineNotifTimerProc); + if(prefs->ChannelAwayNotification) + SetChatTimer(OnlineNotifTimer3, 1500, OnlineNotifTimerProc3); + } + } + else + { + if (!bTempForceCheck) + { + KillChatTimer(OnlineNotifTimer); + KillChatTimer(OnlineNotifTimer3); + } + } + + int i = SendMessage(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), CB_GETCURSEL, 0, 0); + SERVER_INFO * pData = (SERVER_INFO *)SendMessage(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), CB_GETITEMDATA, i, 0); + if (pData && (int)pData !=CB_ERR) + { + if(IsDlgButtonChecked(hwndDlg, IDC_STARTUP)== BST_CHECKED) + lstrcpy(prefs->Network, pData->Group); + else + lstrcpy(prefs->Network, ""); + DBWriteContactSettingString(NULL,IRCPROTONAME,"Network",prefs->Network); + prefs->iSSL = pData->iSSL; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"UseSSL",pData->iSSL); + } + + if (ServerlistModified) { + ServerlistModified = false; + char filepath[MAX_PATH]; + mir_snprintf(filepath, sizeof(filepath), "%s\\%s_servers.ini", mirandapath, IRCPROTONAME); + FILE *hFile2 = fopen(filepath,"w"); + if (hFile2) + { + int j = (int) SendDlgItemMessage(hwndDlg, IDC_SERVERCOMBO, CB_GETCOUNT, 0, 0); + if (j !=CB_ERR && j !=0){ + for (int index2 = 0; index2 < j; index2++) + { + SERVER_INFO * pData = (SERVER_INFO *)SendMessage(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), CB_GETITEMDATA, index2, 0); + if (pData != NULL && (int)pData != CB_ERR) + { + char TextLine[512]; + if(pData->iSSL > 0) + mir_snprintf(TextLine, sizeof(TextLine), "n%u=%sSERVER:SSL%u%s:%s-%sGROUP:%s\n", index2, pData->Name, pData->iSSL, pData->Address, pData->PortStart, pData->PortEnd, pData->Group); + else + mir_snprintf(TextLine, sizeof(TextLine), "n%u=%sSERVER:%s:%s-%sGROUP:%s\n", index2, pData->Name, pData->Address, pData->PortStart, pData->PortEnd, pData->Group); + fputs(TextLine, hFile2); + + } + + } + } + fclose(hFile2); + delete [] pszServerFile; + pszServerFile = IrcLoadFile(filepath); + + } + } + + + } + return TRUE; + } + } + }break; + case WM_DESTROY: + { + ServerlistModified = false; + int j = (int) SendDlgItemMessage(hwndDlg, IDC_SERVERCOMBO, CB_GETCOUNT, 0, 0); + if (j !=CB_ERR && j !=0){ + for (int index2 = 0; index2 < j; index2++) + { + SERVER_INFO * pData = (SERVER_INFO *)SendMessage(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), CB_GETITEMDATA, index2, 0); + if (pData != NULL && (int)pData != CB_ERR) + { + delete []pData->Name; + delete []pData->Address; + delete []pData->PortStart; + delete []pData->PortEnd; + delete []pData->Group; + delete pData; + } + + } + } + + } break; + + default:break; + } +return (false); +} + + + + + + + + + + + +static int CALLBACK IgnoreListSort(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) +{ + if(!IgnoreWndHwnd) + return 1; + char temp1[512]; + char temp2[512]; + LVITEM lvm; + lvm.mask = LVIF_TEXT; + lvm.iItem = lParam1; + lvm.iSubItem = lParamSort; + lvm.pszText = temp1; + lvm.cchTextMax = 511; + SendMessage(GetDlgItem(IgnoreWndHwnd, IDC_INFO_LISTVIEW), LVM_GETITEM, 0, (LPARAM)&lvm); + lvm.iItem = lParam2; + lvm.pszText = temp2; + SendMessage(GetDlgItem(IgnoreWndHwnd, IDC_INFO_LISTVIEW), LVM_GETITEM, 0, (LPARAM)&lvm); + if (lstrlen(temp1) !=0 && lstrlen(temp2) !=0) + return lstrcmpi(temp1, temp2); + else + { + if(lstrlen(temp1) ==0 ) + return 1; + else + return -1; + } + +} +static LRESULT CALLBACK ListviewSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) + { + case WM_KEYUP : + { + if( ListView_GetSelectionMark(GetDlgItem(GetParent(hwnd), IDC_LIST)) != -1) + { + EnableWindow(GetDlgItem(GetParent(hwnd), IDC_EDIT), true); + EnableWindow(GetDlgItem(GetParent(hwnd), IDC_DELETE), true); + } + else + { + EnableWindow(GetDlgItem(GetParent(hwnd), IDC_EDIT), false); + EnableWindow(GetDlgItem(GetParent(hwnd), IDC_DELETE), false); + } + if (wParam == VK_DELETE) + SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(IDC_DELETE, BN_CLICKED), 0); + + if (wParam == VK_SPACE) + SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(IDC_EDIT, BN_CLICKED), 0); + + + }break; + + default:break; + } + + return CallWindowProc(OldListViewProc, hwnd, msg, wParam, lParam); + +} +// Callback for the 'Add server' dialog +BOOL CALLBACK AddIgnoreWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) +{ + static char szOldMask[500]; + switch (uMsg) + { + case WM_INITDIALOG: + { + TranslateDialogDefault(hwndDlg); + if(lParam == 0) + { + if(g_ircSession) + SetWindowText(GetDlgItem(hwndDlg, IDC_NETWORK), g_ircSession.GetInfo().sNetwork.c_str()); + CheckDlgButton(hwndDlg, IDC_Q, BST_CHECKED); + CheckDlgButton(hwndDlg, IDC_N, BST_CHECKED); + CheckDlgButton(hwndDlg, IDC_I, BST_CHECKED); + CheckDlgButton(hwndDlg, IDC_D, BST_CHECKED); + CheckDlgButton(hwndDlg, IDC_C, BST_CHECKED); + lstrcpyn(szOldMask, (char *) "\0", 499); + } + else + lstrcpyn(szOldMask, (char *) lParam, 499); + + }break; + + + case WM_COMMAND: + { + if (HIWORD(wParam) == BN_CLICKED) + switch (LOWORD(wParam)) + { + case IDN_YES: + { + char szMask[500]; + char szNetwork[500]; + String flags = ""; + if(IsDlgButtonChecked(hwndDlg, IDC_Q) == BST_CHECKED) + flags += "q"; + if(IsDlgButtonChecked(hwndDlg, IDC_N) == BST_CHECKED) + flags += "n"; + if(IsDlgButtonChecked(hwndDlg, IDC_I) == BST_CHECKED) + flags += "i"; + if(IsDlgButtonChecked(hwndDlg, IDC_D) == BST_CHECKED) + flags += "d"; + if(IsDlgButtonChecked(hwndDlg, IDC_C) == BST_CHECKED) + flags += "c"; + if(IsDlgButtonChecked(hwndDlg, IDC_M) == BST_CHECKED) + flags += "m"; + + GetWindowText(GetDlgItem(hwndDlg, IDC_MASK), szMask, 499); + GetWindowText(GetDlgItem(hwndDlg, IDC_NETWORK), szNetwork, 499); + + String Mask = GetWord(szMask, 0); + if(Mask.length() != 0) + { + if (!strchr(Mask.c_str(), '!') && !strchr(Mask.c_str(), '@')) + Mask += "!*@*"; + + if(flags != "") + { + if(*szOldMask) + RemoveIgnore(szOldMask); + AddIgnore(Mask, flags, szNetwork); + } + } + + PostMessage (hwndDlg, WM_CLOSE, 0,0); + + }break; + + case IDN_NO: + { + PostMessage (hwndDlg, WM_CLOSE, 0,0); + }break; + default:break; + } + + }break; + + + case WM_CLOSE: + { + PostMessage(IgnoreWndHwnd, IRC_FIXIGNOREBUTTONS, 0, 0); + DestroyWindow(hwndDlg); + return(true); + } break; + + default:break; + } + + return false; +} + +// Callback for the 'Connect preferences' dialog +BOOL CALLBACK IgnorePrefsProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) +{ + + switch (uMsg) + { + case WM_INITDIALOG: + { + + TranslateDialogDefault(hwndDlg); + OldListViewProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndDlg,IDC_LIST),GWL_WNDPROC,(LONG)ListviewSubclassProc); + + CheckDlgButton(hwndDlg, IDC_ENABLEIGNORE, prefs->Ignore?BST_CHECKED:BST_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_IGNOREFILE, prefs->DCCFileEnabled?BST_UNCHECKED:BST_CHECKED); + CheckDlgButton(hwndDlg, IDC_IGNORECHAT, prefs->DCCChatEnabled?BST_UNCHECKED:BST_CHECKED); + CheckDlgButton(hwndDlg, IDC_IGNORECHANNEL, prefs->IgnoreChannelDefault?BST_CHECKED:BST_UNCHECKED); + if(prefs->DCCChatIgnore == 2) + CheckDlgButton(hwndDlg, IDC_IGNOREUNKNOWN, BST_CHECKED); + + EnableWindow(GetDlgItem(hwndDlg, IDC_IGNOREUNKNOWN), prefs->DCCChatEnabled); + EnableWindow(GetDlgItem(hwndDlg, IDC_LIST), prefs->Ignore); + EnableWindow(GetDlgItem(hwndDlg, IDC_IGNORECHANNEL), prefs->Ignore); + EnableWindow(GetDlgItem(hwndDlg, IDC_ADD), prefs->Ignore); + + SendDlgItemMessage(hwndDlg,IDC_ADD,BM_SETIMAGE,IMAGE_ICON,(LPARAM)LoadIconEx(IDI_ADD,"add",GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON))); + SendDlgItemMessage(hwndDlg,IDC_DELETE,BM_SETIMAGE,IMAGE_ICON,(LPARAM)LoadIconEx(IDI_DELETE,"delete",GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON))); + SendDlgItemMessage(hwndDlg,IDC_EDIT,BM_SETIMAGE,IMAGE_ICON,(LPARAM)LoadIconEx(IDI_RENAME,"rename",GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON))); + SendMessage(GetDlgItem(hwndDlg,IDC_ADD), BUTTONADDTOOLTIP, (WPARAM)Translate("Add new ignore"), 0); + SendMessage(GetDlgItem(hwndDlg,IDC_EDIT), BUTTONADDTOOLTIP, (WPARAM)Translate("Edit this ignore"), 0); + SendMessage(GetDlgItem(hwndDlg,IDC_DELETE), BUTTONADDTOOLTIP, (WPARAM)Translate("Delete this ignore"), 0); + + LV_COLUMN lvC; + int COLUMNS_SIZES[3] ={195, 60,80}; + char szBuffer[32]; + + lvC.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; + lvC.fmt = LVCFMT_LEFT; + for (int index=0;index < 3;index++) + { + lvC.iSubItem = index; + lvC.cx = COLUMNS_SIZES[index]; + + switch (index) + { + case 0: lstrcpy(szBuffer,Translate("Ignore mask")); break; + case 1: lstrcpy(szBuffer,"Flags"); break; + case 2: lstrcpy(szBuffer,Translate("Network")); break; + } + lvC.pszText = szBuffer; + ListView_InsertColumn(GetDlgItem(hwndDlg, IDC_INFO_LISTVIEW),index,&lvC); + } + + ListView_SetExtendedListViewStyle(GetDlgItem(hwndDlg, IDC_INFO_LISTVIEW), LVS_EX_FULLROWSELECT); + PostMessage(hwndDlg, IRC_REBUILDIGNORELIST, 0, 0); + + + } break; + + case IRC_UPDATEIGNORELIST: + { + int j = ListView_GetItemCount(GetDlgItem(hwndDlg, IDC_LIST)); + if (j >0) + { + LVITEM lvm; + lvm.mask= LVIF_PARAM; + lvm.iSubItem = 0; + for( int i =0; i < j; i++) + { + lvm.iItem = i; + lvm.lParam = i; + ListView_SetItem(GetDlgItem(hwndDlg, IDC_LIST),&lvm); + } + } + } break; + case IRC_REBUILDIGNORELIST: + { + IgnoreWndHwnd = hwndDlg; + + ListView_DeleteAllItems (GetDlgItem(hwndDlg, IDC_LIST)); + + + if (pszIgnoreFile) + { + char * p1 = pszIgnoreFile; + char * p2 = NULL; + char * p3 = NULL; + char * pTemp = NULL; + while(*p1 != '\0') + { + while(*p1 == '\r' || *p1 == '\n') + p1++; + if (*p1 == '\0') + break; + p2 = strstr(p1, "\r\n"); + if (!p2) + p2 = strchr(p1, '\0'); + + pTemp = p2; + + while (pTemp > p1 && (*pTemp == '\r' || *pTemp == '\n' ||*pTemp == '\0' || *pTemp == ' ')) + pTemp--; + pTemp++; + + p3= new char[pTemp-p1+1]; + lstrcpyn(p3, p1, pTemp-p1+1); + if(GetWord(p3, 0) != "" && GetWord(p3, 0) != "") + { + String mask = GetWord(p3, 0); + String flags = GetWord(p3, 1); + String network = GetWordAddress(p3, 2); + if(flags[0] == '+') + { + LVITEM lvItem; + HWND hListView = GetDlgItem(hwndDlg, IDC_LIST); + lvItem.iItem = ListView_GetItemCount(hListView); + lvItem.mask = LVIF_TEXT|LVIF_PARAM ; + lvItem.iSubItem = 0; + lvItem.lParam = lvItem.iItem; + lvItem.pszText = (char *)mask.c_str(); + lvItem.iItem = ListView_InsertItem(hListView,&lvItem); + + lvItem.mask = LVIF_TEXT; + lvItem.iSubItem =1; + lvItem.pszText = (char *)flags.c_str(); + ListView_SetItem(hListView,&lvItem); + + lvItem.mask = LVIF_TEXT; + lvItem.iSubItem =2; + lvItem.pszText = (char *)network.c_str(); + ListView_SetItem(hListView,&lvItem); + } + } + delete []p3; + p1 = p2; + } + + } + + SendMessage(hwndDlg, IRC_UPDATEIGNORELIST, 0, 0); + SendMessage(GetDlgItem(hwndDlg, IDC_LIST), LVM_SORTITEMS, (WPARAM)0, (LPARAM)IgnoreListSort); + SendMessage(hwndDlg, IRC_UPDATEIGNORELIST, 0, 0); + + PostMessage(hwndDlg, IRC_FIXIGNOREBUTTONS, 0, 0); + + + }break; + case IRC_FIXIGNOREBUTTONS: + { + EnableWindow(GetDlgItem(hwndDlg, IDC_ADD), true); + if(ListView_GetSelectionMark(GetDlgItem(hwndDlg, IDC_LIST)) != -1) + { + EnableWindow(GetDlgItem(hwndDlg, IDC_EDIT), true); + EnableWindow(GetDlgItem(hwndDlg, IDC_DELETE), true); + } + else + { + EnableWindow(GetDlgItem(hwndDlg, IDC_EDIT), false); + EnableWindow(GetDlgItem(hwndDlg, IDC_DELETE), false); + + } + }break; + + case WM_COMMAND: + { +// if( (LOWORD(wParam) == IDC_SERVER +// || LOWORD(wParam) == IDC_PORT +// && HIWORD(wParam) != CBN_SELCHANGE +// ) +// && (HIWORD(wParam)!=EN_CHANGE || (HWND)lParam!=GetFocus())) return true; + + SendMessage(GetParent(hwndDlg), PSM_CHANGED,0,0); + + if ( HIWORD(wParam) == STN_CLICKED ) + { + switch (LOWORD(wParam)) + { + case IDC_CUSTOM: + { + CallService(MS_UTILS_OPENURL,0,(LPARAM) "http://members.chello.se/matrix/troubleshooting.html" ); + }break; + default:break; + } // switch + } + if (HIWORD(wParam) == BN_CLICKED) + { + switch (LOWORD(wParam)) + { + case ( IDC_ENABLEIGNORE): + { + EnableWindow(GetDlgItem(hwndDlg, IDC_IGNORECHANNEL), IsDlgButtonChecked(hwndDlg, IDC_ENABLEIGNORE) == BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_LIST), IsDlgButtonChecked(hwndDlg, IDC_ENABLEIGNORE) == BST_CHECKED); + EnableWindow(GetDlgItem(hwndDlg, IDC_ADD), IsDlgButtonChecked(hwndDlg, IDC_ENABLEIGNORE) == BST_CHECKED); + + }break; + case ( IDC_IGNORECHAT): + { + EnableWindow(GetDlgItem(hwndDlg, IDC_IGNOREUNKNOWN), IsDlgButtonChecked(hwndDlg, IDC_IGNORECHAT) == BST_UNCHECKED); + + }break; + case ( IDC_ADD): + { + HWND hWnd = CreateDialogParam(g_hInstance,MAKEINTRESOURCE(IDD_ADDIGNORE), hwndDlg,AddIgnoreWndProc, 0); + SetWindowText(hWnd, Translate("Add Ignore")); + EnableWindow(GetDlgItem((hwndDlg), IDC_ADD), false); + EnableWindow(GetDlgItem((hwndDlg), IDC_EDIT), false); + EnableWindow(GetDlgItem((hwndDlg), IDC_DELETE), false); + + }break; + case ( IDC_EDIT): + { + if(!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_ADD))) + break; + char szMask[512]; + char szFlags[512]; + char szNetwork[512]; + int i = ListView_GetSelectionMark(GetDlgItem(hwndDlg, IDC_LIST)); + ListView_GetItemText(GetDlgItem(hwndDlg, IDC_LIST), i, 0, szMask, 511); + ListView_GetItemText(GetDlgItem(hwndDlg, IDC_LIST), i, 1, szFlags, 511); + ListView_GetItemText(GetDlgItem(hwndDlg, IDC_LIST), i, 2, szNetwork, 511); + HWND hWnd = CreateDialogParam(g_hInstance,MAKEINTRESOURCE(IDD_ADDIGNORE), hwndDlg,AddIgnoreWndProc, (LPARAM)&szMask); + SetWindowText(hWnd, Translate("Edit Ignore")); + if(szFlags) + { + if(strchr(szFlags, 'q')) + CheckDlgButton(hWnd, IDC_Q, BST_CHECKED); + if(strchr(szFlags, 'n')) + CheckDlgButton(hWnd, IDC_N, BST_CHECKED); + if(strchr(szFlags, 'i')) + CheckDlgButton(hWnd, IDC_I, BST_CHECKED); + if(strchr(szFlags, 'd')) + CheckDlgButton(hWnd, IDC_D, BST_CHECKED); + if(strchr(szFlags, 'c')) + CheckDlgButton(hWnd, IDC_C, BST_CHECKED); + if(strchr(szFlags, 'm')) + CheckDlgButton(hWnd, IDC_M, BST_CHECKED); + } + SetWindowText(GetDlgItem(hWnd, IDC_MASK), szMask); + SetWindowText(GetDlgItem(hWnd, IDC_NETWORK), szNetwork); + EnableWindow(GetDlgItem((hwndDlg), IDC_ADD), false); + EnableWindow(GetDlgItem((hwndDlg), IDC_EDIT), false); + EnableWindow(GetDlgItem((hwndDlg), IDC_DELETE), false); + + }break; + case ( IDC_DELETE): + { + if(!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_DELETE))) + break; + char szMask[512]; + int i = ListView_GetSelectionMark(GetDlgItem(hwndDlg, IDC_LIST)); + ListView_GetItemText(GetDlgItem(hwndDlg, IDC_LIST), i, 0, szMask, 511); + RemoveIgnore(szMask); + }break; + + default:break; + } + } + } break; + case WM_NOTIFY : + { + switch(((LPNMHDR)lParam)->idFrom) + { + case IDC_LIST: + { + switch (((NMHDR*)lParam)->code) + { + case NM_CLICK: + case NM_RCLICK: + { + if(ListView_GetSelectionMark(GetDlgItem(hwndDlg, IDC_LIST)) != -1) + { + SendMessage(hwndDlg, IRC_FIXIGNOREBUTTONS, 0, 0); + } + + } break; + case NM_DBLCLK: + { + SendMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(IDC_EDIT, BN_CLICKED), 0); + + } break; + case LVN_COLUMNCLICK : + { + LPNMLISTVIEW lv; + lv = (LPNMLISTVIEW)lParam; + SendMessage(GetDlgItem(hwndDlg, IDC_LIST), LVM_SORTITEMS, (WPARAM)lv->iSubItem, (LPARAM)IgnoreListSort); + SendMessage(hwndDlg, IRC_UPDATEIGNORELIST, 0, 0); + } break; + default:break; + } + } + case 0: + { + switch (((LPNMHDR)lParam)->code) + { + case PSN_APPLY: + { + prefs->DCCFileEnabled = IsDlgButtonChecked(hwndDlg,IDC_IGNOREFILE)== BST_UNCHECKED?1:0; + prefs->DCCChatEnabled = IsDlgButtonChecked(hwndDlg,IDC_IGNORECHAT)== BST_UNCHECKED?1:0; + prefs->Ignore = IsDlgButtonChecked(hwndDlg,IDC_ENABLEIGNORE)== BST_CHECKED?1:0; + prefs->IgnoreChannelDefault = IsDlgButtonChecked(hwndDlg,IDC_IGNORECHANNEL)== BST_CHECKED?1:0; + prefs->DCCChatIgnore = IsDlgButtonChecked(hwndDlg, IDC_IGNOREUNKNOWN) == BST_CHECKED?2:1; + DBWriteContactSettingByte(NULL,IRCPROTONAME,"EnableCtcpFile",prefs->DCCFileEnabled); + DBWriteContactSettingByte(NULL,IRCPROTONAME,"EnableCtcpChat",prefs->DCCChatEnabled); + DBWriteContactSettingByte(NULL,IRCPROTONAME,"Ignore",prefs->Ignore); + DBWriteContactSettingByte(NULL,IRCPROTONAME,"IgnoreChannelDefault",prefs->IgnoreChannelDefault); + DBWriteContactSettingByte(NULL,IRCPROTONAME,"CtcpChatIgnore",prefs->DCCChatIgnore); + } + default:break; + } + return TRUE; + }break; + default:break; + } + }break; + case WM_DESTROY: + { + int i = ListView_GetItemCount(GetDlgItem(hwndDlg, IDC_LIST)); + String S = ""; + for(int j = 0; jidFrom) { + case 0: + switch (((LPNMHDR)lParam)->code) { + case PSN_APPLY: + { + TCITEM tci; + int i, count = TabCtrl_GetItemCount(GetDlgItem(hwnd, IDC_OPTIONSTAB)); + tci.mask = TCIF_PARAM; + for (i=0;icode) { + case TCN_SELCHANGING: + { + TCITEM tci; + tci.mask = TCIF_PARAM; + TabCtrl_GetItem(GetDlgItem(hwnd,IDC_OPTIONSTAB), TabCtrl_GetCurSel(GetDlgItem(hwnd, IDC_OPTIONSTAB)), &tci); + ShowWindow((HWND)tci.lParam, SW_HIDE); + break; + } + case TCN_SELCHANGE: + { + TCITEM tci; + tci.mask = TCIF_PARAM; + TabCtrl_GetItem(GetDlgItem(hwnd,IDC_OPTIONSTAB), TabCtrl_GetCurSel(GetDlgItem(hwnd, IDC_OPTIONSTAB)), &tci); + ShowWindow((HWND)tci.lParam, SW_SHOW); + break; + } } + break; + } + break; + } + return FALSE; +} + +int InitOptionsPages(WPARAM wParam,LPARAM lParam) +{ + OPTIONSDIALOGPAGE odp = { 0 }; + HMODULE hUxTheme = 0; + + if(IsWinVerXPPlus()) { + hUxTheme = GetModuleHandle(_T("uxtheme.dll")); + + if(hUxTheme) + pfnEnableThemeDialogTexture = (BOOL (WINAPI *)(HANDLE, DWORD))GetProcAddress(hUxTheme, "EnableThemeDialogTexture"); + } + + odp.cbSize = sizeof(odp); + odp.hInstance = g_hInstance; + odp.pszTemplate = MAKEINTRESOURCE(IDD_PREFS_MAIN); + odp.pszTitle = ALTIRCPROTONAME; + odp.pszGroup = Translate("Network"); + odp.flags=ODPF_BOLDGROUPS; + odp.pfnDlgProc = TabsPrefsProc; + CallService(MS_OPT_ADDPAGE,wParam,(LPARAM)&odp); + + InitPopupOpts(wParam); + + return 0; +} + +void UnInitOptions(void) +{ + delete [] prefs->Alias; + delete prefs; + delete []pszServerFile; + delete []pszPerformFile; + delete []pszIgnoreFile; + +} -- cgit v1.2.3