diff options
author | watcherhd <watcherhd@e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb> | 2011-04-21 14:14:52 +0000 |
---|---|---|
committer | watcherhd <watcherhd@e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb> | 2011-04-21 14:14:52 +0000 |
commit | cb4a46e7fbe62d788e66ed6121c717a2d22a4d7c (patch) | |
tree | 30df260fdc5a1b5a7049c2f8cac8b7ef17513d6d /irc_mod/options.cpp | |
parent | 19b6f534d2e784a1e120bf52c4aa07004798f473 (diff) |
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
Diffstat (limited to 'irc_mod/options.cpp')
-rw-r--r-- | irc_mod/options.cpp | 2576 |
1 files changed, 2576 insertions, 0 deletions
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 <uxtheme.h>
+#include <win2k.h>
+
+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 <i; index++)
+ {
+ SERVER_INFO * pData = (SERVER_INFO *)SendMessage(GetDlgItem(connect_hWnd, IDC_SERVERCOMBO), CB_GETITEMDATA, index, 0);
+ if (SendMessage(GetDlgItem(hwndDlg, IDC_ADD_COMBO), CB_FINDSTRINGEXACT, -1,(LPARAM) pData->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 <i; index++)
+ {
+ SERVER_INFO * pData = (SERVER_INFO *)SendMessage(GetDlgItem(connect_hWnd, IDC_SERVERCOMBO), CB_GETITEMDATA, index, 0);
+ if (SendMessage(GetDlgItem(hwndDlg, IDC_ADD_COMBO), CB_FINDSTRINGEXACT, -1,(LPARAM) pData->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("<Resolved IP: ") + (String)prefs->MyHost+ (String)">";
+ SetDlgItemText(hwndDlg,IDC_IP,s.c_str());
+ }
+ else
+ SetDlgItemText(hwndDlg,IDC_IP,Translate("<Automatic>"));
+ }
+ else
+ {
+ if(lstrlen(prefs->MyLocalHost))
+ {
+ String s = (String)Translate("<Local IP: ") + (String)prefs->MyLocalHost+ (String)">";
+ SetDlgItemText(hwndDlg,IDC_IP,s.c_str());
+ }
+ else
+ SetDlgItemText(hwndDlg,IDC_IP,Translate("<Automatic>"));
+
+ }
+
+ }
+
+
+ }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("<Resolved IP: ") + (String)prefs->MyHost+ (String)">";
+ SetDlgItemText(hwndDlg,IDC_IP,s.c_str());
+ }
+ else
+ SetDlgItemText(hwndDlg,IDC_IP,Translate("<Automatic>"));
+ }
+ else
+ {
+ if(lstrlen(prefs->MyLocalHost))
+ {
+ String s = (String)Translate("<Local IP: ") + (String)prefs->MyLocalHost+ (String)">";
+ SetDlgItemText(hwndDlg,IDC_IP,s.c_str());
+ }
+ else
+ SetDlgItemText(hwndDlg,IDC_IP,Translate("<Automatic>"));
+
+ }
+
+ }
+
+ }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;i<ADV_CNT;i++)
+ SendMessage(GetDlgItem(hwndDlg,IDC_ADV1+i),BM_SETCHECK,(i==prefs->XStatusAdv)?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;i<ADV_CNT;i++)
+ SendMessage(GetDlgItem(hwndDlg,IDC_ADV1+i),BM_SETCHECK,BST_UNCHECKED,0L);
+ SendMessage(GetDlgItem(hwndDlg,LOWORD(wParam)),BM_SETCHECK,BST_CHECKED,0L);
+ }
+ break;
+
+ default:break;
+ }
+ }
+
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED,0,0);
+ break;
+ }
+
+ case WM_NOTIFY:
+ {
+ switch(((LPNMHDR)lParam)->idFrom)
+ {
+ 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;i<ADV_CNT;i++)
+ if(SendMessage(GetDlgItem(hwndDlg, IDC_ADV1+i),BM_GETCHECK,0L,0L)==BST_CHECKED)
+ {
+ DBWriteContactSettingByte(NULL,IRCPROTONAME, "XStatusAdv", i);
+ break;
+ }
+
+ prefs->AvatarsEnabled = 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; j<i; j++)
+ {
+ char szItem[512];
+ ListView_GetItemText(GetDlgItem(hwndDlg, IDC_LIST), j, 0, szItem, 511);
+ S += szItem;
+ S += " ";
+ ListView_GetItemText(GetDlgItem(hwndDlg, IDC_LIST), j, 1, szItem, 511);
+ S += szItem;
+ S += " ";
+ ListView_GetItemText(GetDlgItem(hwndDlg, IDC_LIST), j, 2, szItem, 511);
+ S += szItem;
+ S += "\r\n";
+ }
+ char filepath[MAX_PATH];
+ mir_snprintf(filepath, sizeof(filepath), "%s\\%s_ignore.ini", mirandapath, IRCPROTONAME);
+ FILE *hFile = fopen(filepath,"wb");
+ if (hFile)
+ {
+ fputs(S.c_str(), hFile);
+ fclose(hFile);
+ }
+ if (pszIgnoreFile)
+ delete [] pszIgnoreFile;
+ pszIgnoreFile = IrcLoadFile(filepath);
+
+ SetWindowLong(GetDlgItem(hwndDlg,IDC_LIST),GWL_WNDPROC,(LONG)OldListViewProc);
+ IgnoreWndHwnd = NULL;
+
+ } break;
+
+ default:break;
+ }
+return (false);
+}
+
+static HWND hwndConn = 0, hwndCtcp = 0, hwndOther = 0, hwndIgnore = 0, hwndExtra = 0;
+
+static void SetOptionsDlgToType(HWND hwnd, int iExpert)
+{
+ TCITEM tci;
+ RECT rcClient;
+ HWND hwndTab = GetDlgItem(hwnd, IDC_OPTIONSTAB);
+ int iPages = 0;
+
+ if(!hwndConn)
+ hwndConn = CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_PREFS_CONNECT), hwnd, ConnectPrefsProc);
+
+ GetClientRect(hwnd, &rcClient);
+ TabCtrl_DeleteAllItems(hwndTab);
+
+ tci.mask = TCIF_PARAM|TCIF_TEXT;
+ tci.lParam = (LPARAM)hwndConn;
+ tci.pszText = Translate("Account");
+ TabCtrl_InsertItem(hwndTab, 0, &tci);
+ MoveWindow((HWND)tci.lParam, 5, 26, rcClient.right-8, rcClient.bottom-29, 1);
+ iPages++;
+
+ if(!hwndCtcp)
+ hwndCtcp = CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_PREFS_CTCP), hwnd, CtcpPrefsProc);
+
+ if(!hwndOther)
+ hwndOther = CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_PREFS_OTHER), hwnd, OtherPrefsProc);
+
+ if(!hwndIgnore)
+ hwndIgnore = CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_PREFS_IGNORE), hwnd, IgnorePrefsProc);
+
+ if(!hwndExtra)
+ hwndExtra = CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_PREFS_EXTRA), hwnd, ExtraPrefsProc);
+
+ if(pfnEnableThemeDialogTexture) {
+ if(hwndConn)
+ pfnEnableThemeDialogTexture(hwndConn, ETDT_ENABLETAB);
+ if(hwndCtcp)
+ pfnEnableThemeDialogTexture(hwndCtcp, ETDT_ENABLETAB);
+ if(hwndIgnore)
+ pfnEnableThemeDialogTexture(hwndIgnore, ETDT_ENABLETAB);
+ if(hwndOther)
+ pfnEnableThemeDialogTexture(hwndOther, ETDT_ENABLETAB);
+ if(hwndExtra)
+ pfnEnableThemeDialogTexture(hwndExtra, ETDT_ENABLETAB);
+ }
+
+ ShowWindow(hwndCtcp, SW_HIDE);
+ ShowWindow(hwndOther, SW_HIDE);
+ ShowWindow(hwndIgnore, SW_HIDE);
+ ShowWindow(hwndExtra, SW_HIDE);
+ ShowWindow(hwndConn, SW_SHOW);
+
+ if(iExpert) {
+ tci.lParam = (LPARAM)hwndCtcp;
+ tci.pszText = Translate("DCC 'n CTCP");
+ TabCtrl_InsertItem(hwndTab, iPages++, &tci);
+ MoveWindow((HWND)tci.lParam, 5, 26, rcClient.right-8, rcClient.bottom-29, 1);
+
+ tci.lParam = (LPARAM)hwndOther;
+ tci.pszText = Translate("Other");
+ TabCtrl_InsertItem(hwndTab, iPages++, &tci);
+ MoveWindow((HWND)tci.lParam, 5, 26, rcClient.right-8, rcClient.bottom-29, 1);
+
+ tci.lParam = (LPARAM)hwndIgnore;
+ tci.pszText = Translate("Ignore");
+ TabCtrl_InsertItem(hwndTab, iPages++, &tci);
+ MoveWindow((HWND)tci.lParam, 5, 26, rcClient.right-8, rcClient.bottom-29, 1);
+
+ tci.lParam = (LPARAM)hwndExtra;
+ tci.pszText = Translate("Advanced");
+ TabCtrl_InsertItem(hwndTab, iPages++, &tci);
+ MoveWindow((HWND)tci.lParam, 5, 26, rcClient.right-8, rcClient.bottom-29, 1);
+ }
+ TabCtrl_SetCurSel(hwndTab, 0);
+}
+
+// handle tabbed options dialog
+static BOOL CALLBACK TabsPrefsProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ static int iInit = TRUE;
+
+ switch(msg) {
+ case WM_INITDIALOG:
+ {
+ iInit = TRUE;
+ int iExpert = SendMessage(GetParent(hwnd), PSM_ISEXPERT, 0, 0);
+ SetOptionsDlgToType(hwnd, iExpert);
+ iInit = FALSE;
+ return FALSE;
+ }
+ case WM_DESTROY:
+ hwndConn = hwndCtcp = hwndOther = hwndIgnore = hwndExtra = 0;
+ break;
+ case PSM_CHANGED: // used so tabs dont have to call SendMessage(GetParent(GetParent(hwnd)), PSM_CHANGED, 0, 0);
+ if(!iInit)
+ SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0);
+ break;
+ case WM_NOTIFY:
+ switch(((LPNMHDR)lParam)->idFrom) {
+ 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;i<count;i++) {
+ TabCtrl_GetItem(GetDlgItem(hwnd,IDC_OPTIONSTAB), i, &tci);
+ SendMessage((HWND)tci.lParam, WM_NOTIFY, 0, lParam);
+ } }
+ break;
+ case PSN_EXPERTCHANGED:
+ {
+ int iExpert = SendMessage(GetParent(hwnd), PSM_ISEXPERT, 0, 0);
+ SetOptionsDlgToType(hwnd, iExpert);
+ break;
+ } }
+ break;
+ case IDC_OPTIONSTAB:
+ switch (((LPNMHDR)lParam)->code) {
+ 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;
+
+}
|