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/windows.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/windows.cpp')
-rw-r--r-- | irc_mod/windows.cpp | 1800 |
1 files changed, 1800 insertions, 0 deletions
diff --git a/irc_mod/windows.cpp b/irc_mod/windows.cpp new file mode 100644 index 0000000..99dca8f --- /dev/null +++ b/irc_mod/windows.cpp @@ -0,0 +1,1800 @@ +/*
+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"
+
+extern PREFERENCES *prefs;
+extern HWND nick_hWnd;
+extern HWND list_hWnd;
+extern HWND whois_hWnd;
+extern HWND join_hWnd;
+extern HWND quickconn_hWnd;
+extern char * IRCPROTONAME;
+extern char * pszServerFile;
+extern String sChannelModes;
+static WNDPROC OldMgrEditProc;
+extern HWND manager_hWnd;
+extern HMODULE m_ssleay32;
+
+extern bool whois_popup;
+
+// Callback for the 'CTCP accept' dialog
+BOOL CALLBACK MessageboxWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
+{
+ static DCCINFO * pdci = NULL;
+ switch (uMsg)
+ {
+
+ case WM_INITDIALOG:
+ {
+ TranslateDialogDefault(hwndDlg);
+ pdci = (DCCINFO *) lParam;
+ SendMessage(GetDlgItem(hwndDlg, IDC_LOGO),STM_SETICON,(LPARAM)(HICON)LoadImage(NULL,IDI_QUESTION,IMAGE_ICON,48, 48,LR_SHARED), 0);
+
+ } break;
+
+ case WM_COMMAND:
+ {
+ if(HIWORD(wParam) == BN_CLICKED)
+ {
+ switch (LOWORD(wParam))
+ {
+ case IDN_YES:
+ {
+ CDccSession * dcc = new CDccSession(pdci);
+
+ CDccSession * olddcc = g_ircSession.FindDCCSession(pdci->hContact);
+ if (olddcc)
+ olddcc->Disconnect();
+ g_ircSession.AddDCCSession(pdci->hContact, dcc);
+
+ dcc->Connect();
+
+ PostMessage (hwndDlg, WM_CLOSE, 0,0);
+ }break;
+ case IDN_NO:
+ PostMessage (hwndDlg, WM_CLOSE, 0,0);
+ break;
+
+ default:break;
+ }
+
+ }
+ } break;
+
+ case WM_CLOSE:
+ {
+ DestroyWindow(hwndDlg);
+ } break;
+
+ default:break;
+ }
+ return(false);
+}
+
+// Callback for the /WHOIS dialog
+BOOL CALLBACK InfoWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
+{
+ switch (uMsg)
+ {
+
+ case WM_INITDIALOG:
+ {
+
+ TranslateDialogDefault(hwndDlg);
+ HFONT hFont;
+ LOGFONT lf;
+ hFont=(HFONT)SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_GETFONT,0,0);
+ GetObject(hFont,sizeof(lf),&lf);
+ lf.lfHeight=(int)(lf.lfHeight*1.2);
+ lf.lfWeight=FW_BOLD;
+ hFont=CreateFontIndirect(&lf);
+ SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_SETFONT,(WPARAM)hFont,0);
+ SendMessage(GetDlgItem(hwndDlg, IDC_LOGO),STM_SETICON,(LPARAM)(HICON)LoadIconEx(IDI_LOGO,"logo",48,48), 0);
+ SendMessage(GetDlgItem(hwndDlg, IDC_INFO_NAME), EM_SETREADONLY, true, 0);
+ SendMessage(GetDlgItem(hwndDlg, IDC_INFO_ID), EM_SETREADONLY, true, 0);
+ SendMessage(GetDlgItem(hwndDlg, IDC_INFO_ADDRESS), EM_SETREADONLY, true, 0);
+ SendMessage(GetDlgItem(hwndDlg, IDC_INFO_CHANNELS), EM_SETREADONLY, true, 0);
+ SendMessage(GetDlgItem(hwndDlg, IDC_INFO_AUTH), EM_SETREADONLY, true, 0);
+ SendMessage(GetDlgItem(hwndDlg, IDC_INFO_SERVER), EM_SETREADONLY, true, 0);
+ SendMessage(GetDlgItem(hwndDlg, IDC_INFO_AWAY2), EM_SETREADONLY, true, 0);
+ SendMessage(GetDlgItem(hwndDlg, IDC_INFO_OTHER), EM_SETREADONLY, true, 0);
+ SendMessage(hwndDlg,WM_SETICON,ICON_BIG,(LPARAM)LoadIconEx(IDI_WHOIS,"whois",GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON))); // Tell the dialog to use it
+
+ } break;
+
+ case WM_CTLCOLOREDIT:
+ case WM_CTLCOLORSTATIC:
+ {
+ if((HWND)lParam==GetDlgItem(hwndDlg,IDC_WHITERECT)
+ || (HWND)lParam==GetDlgItem(hwndDlg,IDC_TEXT)
+ || (HWND)lParam==GetDlgItem(hwndDlg,IDC_CAPTION)
+ || (HWND)lParam==GetDlgItem(hwndDlg,IDC_LOGO))
+ {
+ SetTextColor((HDC)wParam,RGB(0,0,0));
+ SetBkColor((HDC)wParam,RGB(255,255,255));
+ return (BOOL)GetStockObject(WHITE_BRUSH);
+ }
+ }break;
+ case WM_COMMAND:
+ {
+ if(HIWORD(wParam) == BN_CLICKED)
+ {
+ char szTemp[255];
+ SendMessage(GetDlgItem(hwndDlg, IDC_INFO_NICK), WM_GETTEXT, 255, (LPARAM) szTemp);
+ switch (LOWORD(wParam))
+ {
+ case ID_INFO_OK:
+ PostMessage (hwndDlg, WM_CLOSE, 0,0);
+ break;
+
+ case ID_INFO_GO:
+ PostIrcMessage( "/WHOIS %s", szTemp);
+ whois_popup = true;
+ break;
+
+ case ID_INFO_QUERY:
+ PostIrcMessage( "/QUERY %s", szTemp);
+ break;
+ case IDC_PING:
+ SetDlgItemText(hwndDlg, IDC_REPLY, Translate("Please wait..."));
+ PostIrcMessage( "/PRIVMSG %s \001PING %u\001", szTemp, time(0));
+ break;
+ case IDC_USERINFO:
+ SetDlgItemText(hwndDlg, IDC_REPLY, Translate("Please wait..."));
+ PostIrcMessage( "/PRIVMSG %s \001USERINFO\001", szTemp);
+ break;
+ case IDC_TIME:
+ SetDlgItemText(hwndDlg, IDC_REPLY, Translate("Please wait..."));
+ PostIrcMessage( "/PRIVMSG %s \001TIME\001", szTemp);
+ break;
+ case IDC_VERSION:
+ SetDlgItemText(hwndDlg, IDC_REPLY, Translate("Please wait..."));
+ PostIrcMessage( "/PRIVMSG %s \001VERSION\001", szTemp);
+ break;
+ default:break;
+ }
+
+ }
+
+ } break;
+
+ case WM_CLOSE:
+ {
+ ShowWindow(hwndDlg, SW_HIDE);
+ SendMessage(hwndDlg, WM_SETREDRAW, FALSE, 0);
+ } break;
+
+ case WM_DESTROY:
+ {
+ HFONT hFont;
+ hFont=(HFONT)SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_GETFONT,0,0);
+ SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_SETFONT,SendDlgItemMessage(hwndDlg,IDNOK,WM_GETFONT,0,0),0);
+ DeleteObject(hFont);
+ whois_hWnd = NULL;
+ } break;
+
+
+ default:break;
+ }
+ return(false);
+}
+
+// Callback for the 'Change nickname' dialog
+BOOL CALLBACK NickWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
+{
+ switch (uMsg)
+ {
+
+ case WM_INITDIALOG:
+ {
+ TranslateDialogDefault(hwndDlg);
+ HFONT hFont;
+ LOGFONT lf;
+ hFont=(HFONT)SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_GETFONT,0,0);
+ GetObject(hFont,sizeof(lf),&lf);
+ lf.lfHeight=(int)(lf.lfHeight*1.2);
+ lf.lfWeight=FW_BOLD;
+ hFont=CreateFontIndirect(&lf);
+ SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_SETFONT,(WPARAM)hFont,0);
+ SendMessage(GetDlgItem(hwndDlg, IDC_LOGO),STM_SETICON,(LPARAM)(HICON)LoadIconEx(IDI_LOGO,"logo",48,48), 0);
+
+ DBVARIANT dbv;
+ if (!DBGetContactSetting(NULL, IRCPROTONAME, "RecentNicks", &dbv) && dbv.type == DBVT_ASCIIZ)
+ {
+ for (int i = 0; i<10; i++) {
+ if (!GetWord(dbv.pszVal, i).empty())
+ SendDlgItemMessage(hwndDlg, IDC_ENICK, CB_ADDSTRING, 0, (LPARAM)GetWord(dbv.pszVal, i).c_str());
+ }
+ DBFreeVariant(&dbv);
+ }
+ } break;
+ case WM_CTLCOLOREDIT:
+ case WM_CTLCOLORSTATIC:
+ {
+ if((HWND)lParam==GetDlgItem(hwndDlg,IDC_WHITERECT)
+ || (HWND)lParam==GetDlgItem(hwndDlg,IDC_TEXT)
+ || (HWND)lParam==GetDlgItem(hwndDlg,IDC_CAPTION)
+ || (HWND)lParam==GetDlgItem(hwndDlg,IDC_LOGO))
+ {
+ SetTextColor((HDC)wParam,RGB(0,0,0));
+ SetBkColor((HDC)wParam,RGB(255,255,255));
+ return (BOOL)GetStockObject(WHITE_BRUSH);
+ }
+ }break;
+
+ case WM_COMMAND:
+ {
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDNCANCEL)
+ {
+ PostMessage (hwndDlg, WM_CLOSE, 0,0);
+ }
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDNOK)
+ {
+ char szTemp[255];
+ SendMessage(GetDlgItem(hwndDlg, IDC_ENICK), WM_GETTEXT, 255, (LPARAM) szTemp);
+ PostIrcMessage( "/NICK %s", szTemp);
+
+ String S = szTemp;
+ DBVARIANT dbv;
+ if (!DBGetContactSetting(NULL, IRCPROTONAME, "RecentNicks", &dbv) && dbv.type == DBVT_ASCIIZ)
+ {
+ for (int i = 0; i<10; i++) {
+ if (!GetWord(dbv.pszVal, i).empty() && GetWord(dbv.pszVal, i) != szTemp) {
+ S += " ";
+ S += GetWord(dbv.pszVal, i);
+ }
+ }
+ DBFreeVariant(&dbv);
+ }
+ DBWriteContactSettingString(NULL, IRCPROTONAME, "RecentNicks", S.c_str());
+ SendMessage (hwndDlg, WM_CLOSE, 0,0);
+
+ }
+
+ } break;
+
+ case WM_CLOSE:
+ {
+ DestroyWindow(hwndDlg);
+ } break;
+
+ case WM_DESTROY:
+ {
+ HFONT hFont;
+ hFont=(HFONT)SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_GETFONT,0,0);
+ SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_SETFONT,SendDlgItemMessage(hwndDlg,IDNOK,WM_GETFONT,0,0),0);
+ DeleteObject(hFont);
+ nick_hWnd = NULL;
+ } break;
+
+
+ default:break;
+ }
+ return(false);
+}
+
+BOOL CALLBACK ListWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
+{
+ switch (uMsg)
+ {
+ case IRC_UPDATELIST:
+ {
+ int j = ListView_GetItemCount(GetDlgItem(hwndDlg, IDC_INFO_LISTVIEW));
+ 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_INFO_LISTVIEW),&lvm);
+ }
+ }
+ } break;
+ case WM_INITDIALOG:
+ {
+ TranslateDialogDefault(hwndDlg);
+ RECT screen;
+
+ SystemParametersInfo(SPI_GETWORKAREA, 0, &screen, 0);
+ LV_COLUMN lvC;
+ int COLUMNS_SIZES[4] ={200, 50,50,2000};
+ char szBuffer[32];
+
+ lvC.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
+ lvC.fmt = LVCFMT_LEFT;
+ for (int index=0;index < 4;index++)
+ {
+ lvC.iSubItem = index;
+ lvC.cx = COLUMNS_SIZES[index];
+
+ switch (index)
+ {
+ case 0: lstrcpy(szBuffer,Translate("Channel")); break;
+ case 1: lstrcpy(szBuffer,"#"); break;
+ case 2: lstrcpy(szBuffer,Translate("Mode")); break;
+ case 3: lstrcpy(szBuffer,Translate("Topic")); break;
+
+ }
+ lvC.pszText = szBuffer;
+ ListView_InsertColumn(GetDlgItem(hwndDlg, IDC_INFO_LISTVIEW),index,&lvC);
+ }
+
+ SetWindowPos(hwndDlg, HWND_TOP, (screen.right-screen.left)/2- (prefs->ListSize.x)/2,(screen.bottom-screen.top)/2- (prefs->ListSize.y)/2, (prefs->ListSize.x), (prefs->ListSize.y), 0);
+ SendMessage(hwndDlg, WM_SIZE, SIZE_RESTORED, MAKELPARAM(prefs->ListSize.x, prefs->ListSize.y));
+ ListView_SetExtendedListViewStyle(GetDlgItem(hwndDlg, IDC_INFO_LISTVIEW), LVS_EX_FULLROWSELECT);
+ SendMessage(hwndDlg,WM_SETICON,ICON_BIG,(LPARAM)LoadIconEx(IDI_LIST,"list",GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON))); // Tell the dialog to use it
+ } break;
+
+ case WM_SIZE:
+ {
+
+ RECT winRect;
+ GetClientRect(hwndDlg, &winRect);
+ RECT buttRect;
+ GetWindowRect(GetDlgItem(hwndDlg, IDC_JOIN), &buttRect);
+ SetWindowPos(GetDlgItem(hwndDlg, IDC_INFO_LISTVIEW), HWND_TOP, 4, 4, winRect.right-8, winRect.bottom-36, 0 );
+ SetWindowPos(GetDlgItem(hwndDlg, IDC_CLOSE), HWND_TOP, winRect.right-84, winRect.bottom-28, buttRect.right- buttRect.left, buttRect.bottom- buttRect.top, 0 );
+ SetWindowPos(GetDlgItem(hwndDlg, IDC_JOIN), HWND_TOP, winRect.right-174, winRect.bottom-28, buttRect.right- buttRect.left, buttRect.bottom- buttRect.top, 0 );
+ SetWindowPos(GetDlgItem(hwndDlg, IDC_TEXT), HWND_TOP, 4, winRect.bottom-28, winRect.right-200, buttRect.bottom- buttRect.top, 0 );
+
+ GetWindowRect(hwndDlg, &winRect);
+ prefs->ListSize.x = winRect.right-winRect.left;
+ prefs->ListSize.y = winRect.bottom-winRect.top;
+ DBWriteContactSettingDword(NULL,IRCPROTONAME, "SizeOfListBottom", prefs->ListSize.y);
+ DBWriteContactSettingDword(NULL,IRCPROTONAME, "SizeOfListRight", prefs->ListSize.x);
+ return 0;
+
+ } break;
+
+ case WM_COMMAND:
+ {
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_CLOSE)
+ {
+ PostMessage (hwndDlg, WM_CLOSE, 0,0);
+ }
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_JOIN)
+ {
+ char szTemp[255];
+ int i = ListView_GetSelectionMark(GetDlgItem(hwndDlg, IDC_INFO_LISTVIEW));
+ ListView_GetItemText(GetDlgItem(hwndDlg, IDC_INFO_LISTVIEW), i, 0, szTemp, 255);
+ PostIrcMessage( "/JOIN %s", szTemp);
+ }
+ }break;
+ case WM_NOTIFY :
+ {
+ switch (((NMHDR*)lParam)->code)
+ {
+ case NM_DBLCLK:
+ {
+ char szTemp[255];
+ int i = ListView_GetSelectionMark(GetDlgItem(hwndDlg, IDC_INFO_LISTVIEW));
+ ListView_GetItemText(GetDlgItem(hwndDlg, IDC_INFO_LISTVIEW), i, 0, szTemp, 255);
+ PostIrcMessage( "/JOIN %s", szTemp);
+
+ } break;
+ case LVN_COLUMNCLICK :
+ {
+ LPNMLISTVIEW lv;
+ lv = (LPNMLISTVIEW)lParam;
+ SendMessage(GetDlgItem(hwndDlg, IDC_INFO_LISTVIEW), LVM_SORTITEMS, (WPARAM)lv->iSubItem, (LPARAM)ListViewSort);
+ SendMessage(list_hWnd, IRC_UPDATELIST, 0, 0);
+ } break;
+ }
+ } break;
+
+ case WM_CLOSE:
+ {
+ DestroyWindow(hwndDlg);
+
+ } break;
+
+
+ case WM_DESTROY:
+ {
+ list_hWnd = NULL;
+ } break;
+
+ default:break;
+ }
+ return(false);
+}
+
+BOOL CALLBACK JoinWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
+{
+ switch (uMsg)
+ {
+
+ case WM_INITDIALOG:
+ {
+ TranslateDialogDefault(hwndDlg);
+ HFONT hFont;
+ LOGFONT lf;
+ hFont=(HFONT)SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_GETFONT,0,0);
+ GetObject(hFont,sizeof(lf),&lf);
+ lf.lfHeight=(int)(lf.lfHeight*1.2);
+ lf.lfWeight=FW_BOLD;
+ hFont=CreateFontIndirect(&lf);
+ SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_SETFONT,(WPARAM)hFont,0);
+ SendMessage(GetDlgItem(hwndDlg, IDC_LOGO),STM_SETICON,(LPARAM)(HICON)LoadIconEx(IDI_LOGO,"logo",48,48), 0);
+ DBVARIANT dbv;
+ if (!DBGetContactSetting(NULL, IRCPROTONAME, "RecentChannels", &dbv) && dbv.type == DBVT_ASCIIZ)
+ {
+ for (int i = 0; i<20; i++) {
+ if (!GetWord(dbv.pszVal, i).empty()) {
+ String S = ReplaceString(GetWord(dbv.pszVal, i) ,"%newl" , " ");
+ SendDlgItemMessage(hwndDlg, IDC_ENICK, CB_ADDSTRING, 0, (LPARAM)S.c_str());
+ }
+ }
+ DBFreeVariant(&dbv);
+ }
+ } break;
+ case WM_CTLCOLOREDIT:
+ case WM_CTLCOLORSTATIC:
+ {
+ if((HWND)lParam==GetDlgItem(hwndDlg,IDC_WHITERECT)
+ || (HWND)lParam==GetDlgItem(hwndDlg,IDC_TEXT)
+ || (HWND)lParam==GetDlgItem(hwndDlg,IDC_CAPTION)
+ || (HWND)lParam==GetDlgItem(hwndDlg,IDC_LOGO))
+ {
+ SetTextColor((HDC)wParam,RGB(0,0,0));
+ SetBkColor((HDC)wParam,RGB(255,255,255));
+ return (BOOL)GetStockObject(WHITE_BRUSH);
+ }
+ }break;
+
+ case WM_COMMAND:
+ {
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDNCANCEL)
+ {
+ PostMessage (hwndDlg, WM_CLOSE, 0,0);
+ }
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDNOK)
+ {
+ char szTemp[255];
+ SendMessage(GetDlgItem(hwndDlg, IDC_ENICK), WM_GETTEXT, 255, (LPARAM) szTemp);
+ if (IsChannel(szTemp))
+ PostIrcMessage( "/JOIN %s", szTemp);
+ else
+ PostIrcMessage( "/JOIN #%s", szTemp);
+
+ String S = ReplaceString(szTemp, " ", "%newl");
+ String SL = S;
+ DBVARIANT dbv;
+ if (!DBGetContactSetting(NULL, IRCPROTONAME, "RecentChannels", &dbv) && dbv.type == DBVT_ASCIIZ)
+ {
+ for (int i = 0; i<20; i++) {
+ if (!GetWord(dbv.pszVal, i).empty() && GetWord(dbv.pszVal, i) != SL) {
+ S += " ";
+ S += GetWord(dbv.pszVal, i);
+ }
+ }
+ DBFreeVariant(&dbv);
+ }
+ DBWriteContactSettingString(NULL, IRCPROTONAME, "RecentChannels", S.c_str());
+ PostMessage (hwndDlg, WM_CLOSE, 0,0);
+ }
+ } break;
+
+ case WM_CLOSE:
+ {
+ DestroyWindow(hwndDlg);
+
+ } break;
+ case WM_DESTROY:
+ {
+ HFONT hFont;
+ hFont=(HFONT)SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_GETFONT,0,0);
+ SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_SETFONT,SendDlgItemMessage(hwndDlg,IDNOK,WM_GETFONT,0,0),0);
+ DeleteObject(hFont);
+ join_hWnd = NULL;
+ } break;
+ default:break;
+ }
+ return(false);
+}
+BOOL CALLBACK InitWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
+{
+ switch (uMsg)
+ {
+
+ case WM_INITDIALOG:
+ {
+ TranslateDialogDefault(hwndDlg);
+ HFONT hFont;
+ LOGFONT lf;
+ hFont=(HFONT)SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_GETFONT,0,0);
+ GetObject(hFont,sizeof(lf),&lf);
+ lf.lfHeight=(int)(lf.lfHeight*1.2);
+ lf.lfWeight=FW_BOLD;
+ hFont=CreateFontIndirect(&lf);
+ SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_SETFONT,(WPARAM)hFont,0);
+ SendMessage(GetDlgItem(hwndDlg, IDC_LOGO),STM_SETICON,(LPARAM)(HICON)LoadIconEx(IDI_LOGO,"logo",48,48), 0);
+ } break;
+ case WM_CTLCOLOREDIT:
+ case WM_CTLCOLORSTATIC:
+ {
+ if((HWND)lParam==GetDlgItem(hwndDlg,IDC_WHITERECT)
+ || (HWND)lParam==GetDlgItem(hwndDlg,IDC_TEXT)
+ || (HWND)lParam==GetDlgItem(hwndDlg,IDC_CAPTION)
+ || (HWND)lParam==GetDlgItem(hwndDlg,IDC_LOGO))
+ {
+ SetTextColor((HDC)wParam,RGB(0,0,0));
+ SetBkColor((HDC)wParam,RGB(255,255,255));
+ return (BOOL)GetStockObject(WHITE_BRUSH);
+ }
+ }break;
+
+ case WM_COMMAND:
+ {
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDNCANCEL)
+ {
+ PostMessage (hwndDlg, WM_CLOSE, 0,0);
+ }
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDNOK)
+ {
+ int i = SendMessage(GetDlgItem(hwndDlg, IDC_EDIT), WM_GETTEXTLENGTH, 0, 0);
+ int j = SendMessage(GetDlgItem(hwndDlg, IDC_EDIT2), WM_GETTEXTLENGTH, 0, 0);
+ if (i >0 && j > 0)
+ {
+ char l [30];
+ char m [200];
+ SendMessage(GetDlgItem(hwndDlg, IDC_EDIT), WM_GETTEXT, 30, (LPARAM) l);
+ SendMessage(GetDlgItem(hwndDlg, IDC_EDIT2), WM_GETTEXT, 200, (LPARAM) m);
+
+ DBWriteContactSettingString(NULL, IRCPROTONAME, "PNick", l);
+ DBWriteContactSettingString(NULL, IRCPROTONAME, "Nick", l);
+ DBWriteContactSettingString(NULL, IRCPROTONAME, "Name", m);
+ lstrcpyn(prefs->Nick, l, 30);
+ lstrcpyn(prefs->Name, m, 200);
+ if (lstrlen(prefs->AlternativeNick) == 0)
+ {
+ char szTemp[30];
+ mir_snprintf(szTemp, sizeof(szTemp), "%s%u", l, rand()%9999);
+ DBWriteContactSettingString(NULL, IRCPROTONAME, "AlernativeNick", szTemp);
+ lstrcpyn(prefs->AlternativeNick, szTemp, 30);
+ }
+ }
+
+ PostMessage (hwndDlg, WM_CLOSE, 0,0);
+
+ }
+
+
+
+ } break;
+
+ case WM_CLOSE:
+ {
+ DestroyWindow(hwndDlg);
+
+ } break;
+ case WM_DESTROY:
+ {
+ HFONT hFont;
+ hFont=(HFONT)SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_GETFONT,0,0);
+ SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_SETFONT,SendDlgItemMessage(hwndDlg,IDNOK,WM_GETFONT,0,0),0);
+ DeleteObject(hFont);
+ } break;
+ default:break;
+ }
+ return(false);
+}
+BOOL CALLBACK QuickWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
+{
+ switch (uMsg)
+ {
+
+ case WM_INITDIALOG:
+ {
+ TranslateDialogDefault(hwndDlg);
+ HFONT hFont;
+ LOGFONT lf;
+ hFont=(HFONT)SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_GETFONT,0,0);
+ GetObject(hFont,sizeof(lf),&lf);
+ lf.lfHeight=(int)(lf.lfHeight*1.2);
+ lf.lfWeight=FW_BOLD;
+ hFont=CreateFontIndirect(&lf);
+ SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_SETFONT,(WPARAM)hFont,0);
+ SendMessage(GetDlgItem(hwndDlg, IDC_LOGO),STM_SETICON,(LPARAM)(HICON)LoadIconEx(IDI_LOGO,"logo",48,48), 0);
+
+ 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);
+
+ }
+ else
+ EnableWindow(GetDlgItem(hwndDlg, IDNOK), false);
+
+ SendMessage(GetDlgItem(hwndDlg, IDC_SERVER), EM_SETREADONLY, true, 0);
+ SendMessage(GetDlgItem(hwndDlg, IDC_PORT), EM_SETREADONLY, true, 0);
+ SendMessage(GetDlgItem(hwndDlg, IDC_PORT2), EM_SETREADONLY, true, 0);
+
+ if (prefs->QuickComboSelection != -1)
+ {
+ SendMessage(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), CB_SETCURSEL, prefs->QuickComboSelection,0);
+ SendMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(IDC_SERVERCOMBO, CBN_SELCHANGE), 0);
+ }
+ else
+ EnableWindow(GetDlgItem(hwndDlg, IDNOK), false);
+
+ } break;
+ case WM_CTLCOLOREDIT:
+ case WM_CTLCOLORSTATIC:
+ {
+ if((HWND)lParam==GetDlgItem(hwndDlg,IDC_WHITERECT)
+ || (HWND)lParam==GetDlgItem(hwndDlg,IDC_TEXT)
+ || (HWND)lParam==GetDlgItem(hwndDlg,IDC_CAPTION)
+ || (HWND)lParam==GetDlgItem(hwndDlg,IDC_LOGO))
+ {
+ SetTextColor((HDC)wParam,RGB(0,0,0));
+ SetBkColor((HDC)wParam,RGB(255,255,255));
+ return (BOOL)GetStockObject(WHITE_BRUSH);
+ }
+ }break;
+
+
+ case WM_COMMAND:
+ {
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDNCANCEL)
+ {
+ PostMessage (hwndDlg, WM_CLOSE, 0,0);
+ }
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDNOK)
+ {
+ GetDlgItemText(hwndDlg,IDC_SERVER, prefs->ServerName, 100);
+ GetDlgItemText(hwndDlg,IDC_PORT, prefs->PortStart, 7);
+ GetDlgItemText(hwndDlg,IDC_PORT2, prefs->PortEnd , 7);
+ GetDlgItemText(hwndDlg,IDC_PASS, prefs->Password, 500);
+
+ 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)
+ {
+ lstrcpy(prefs->Network, pData->Group);
+ if(m_ssleay32)
+ prefs->iSSL = pData->iSSL;
+ else
+ prefs->iSSL = 0;
+ }
+
+ char windowname[20];
+ GetWindowText(hwndDlg, windowname, 20);
+ if (lstrcmpi(windowname, "Miranda IRC") == 0)
+ {
+ prefs->ServerComboSelection = SendMessage(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), CB_GETCURSEL, 0, 0);
+ DBWriteContactSettingDword(NULL,IRCPROTONAME,"ServerComboSelection",prefs->ServerComboSelection);
+ DBWriteContactSettingString(NULL,IRCPROTONAME,"ServerName",prefs->ServerName);
+ DBWriteContactSettingString(NULL,IRCPROTONAME,"PortStart",prefs->PortStart);
+ DBWriteContactSettingString(NULL,IRCPROTONAME,"PortEnd",prefs->PortEnd);
+ CallService(MS_DB_CRYPT_ENCODESTRING, 499, (LPARAM)prefs->Password);
+ DBWriteContactSettingString(NULL,IRCPROTONAME,"Password",prefs->Password);
+ CallService(MS_DB_CRYPT_DECODESTRING, 499, (LPARAM)prefs->Password);
+ DBWriteContactSettingString(NULL,IRCPROTONAME,"Network",prefs->Network);
+ DBWriteContactSettingByte(NULL,IRCPROTONAME,"UseSSL",prefs->iSSL);
+
+ }
+ prefs->QuickComboSelection = SendMessage(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), CB_GETCURSEL, 0, 0);
+ DBWriteContactSettingDword(NULL,IRCPROTONAME,"QuickComboSelection",prefs->QuickComboSelection);
+ DisconnectFromServer();
+ ConnectToServer();
+ PostMessage (hwndDlg, WM_CLOSE, 0,0);
+ }
+
+
+ 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 (i !=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"));
+ EnableWindow(GetDlgItem(hwndDlg, IDNOK), true);
+
+ }
+
+ }
+
+
+ } break;
+
+ case WM_CLOSE:
+ {
+ DestroyWindow(hwndDlg);
+
+ } break;
+
+ case WM_DESTROY:
+ {
+ HFONT hFont;
+ hFont=(HFONT)SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_GETFONT,0,0);
+ SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_SETFONT,SendDlgItemMessage(hwndDlg,IDNOK,WM_GETFONT,0,0),0);
+ DeleteObject(hFont);
+
+ int j = (int) SendMessage(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), CB_GETCOUNT, 0, 0);
+ for (int index2 = 0; index2 < j; index2++)
+ {
+ SERVER_INFO * pData = (SERVER_INFO *)SendMessage(GetDlgItem(hwndDlg, IDC_SERVERCOMBO), CB_GETITEMDATA, index2, 0);
+ delete []pData->Name;
+ delete []pData->Address;
+ delete []pData->PortStart;
+ delete []pData->PortEnd;
+ delete []pData->Group;
+ delete pData;
+
+ }
+
+ quickconn_hWnd = NULL;
+ } break;
+
+
+ default:break;
+ }
+ return(false);
+}
+
+int CALLBACK ListViewSort(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
+{
+ if (!list_hWnd)
+ return 0;
+ 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(list_hWnd, IDC_INFO_LISTVIEW), LVM_GETITEM, 0, (LPARAM)&lvm);
+ lvm.iItem = lParam2;
+ lvm.pszText = temp2;
+ SendMessage(GetDlgItem(list_hWnd, IDC_INFO_LISTVIEW), LVM_GETITEM, 0, (LPARAM)&lvm);
+ if (lParamSort != 1){
+ if (lstrlen(temp1) !=0 && lstrlen(temp2) !=0)
+ return lstrcmpi(temp1, temp2);
+ else
+ {
+ if(lstrlen(temp1) ==0 )
+ return 1;
+ else
+ return -1;
+ }
+ }
+ else {
+ if(StrToInt(temp1) < StrToInt(temp2))
+ return 1;
+ else
+ return -1;
+ }
+}
+static void __cdecl AckUserInfoSearch(void * lParam)
+{
+ ProtoBroadcastAck(IRCPROTONAME, (void*)lParam, ACKTYPE_GETINFO, ACKRESULT_SUCCESS, (HANDLE) 1, 0);
+}
+
+#define STR_BASIC "Faster! Searches the network for an exact match of the nickname only. The hostmask is optional and provides further security if used. Wildcards (? and *) are allowed."
+#define STR_ADVANCED "Slower! Searches the network for nicknames matching a wildcard string. The hostmask is mandatory and a minimum of 4 characters is necessary in the \"Nick\" field. Wildcards (? and *) are allowed."
+#define STR_ERROR "Settings could not be saved!\n\nThe \"Nick\" field must contain at least four characters including wildcards,\n and it must also match the default nickname for this contact."
+#define STR_ERROR2 "Settings could not be saved!\n\nA full hostmask must be set for this online detection mode to work."
+
+BOOL CALLBACK UserDetailsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ HANDLE hContact;
+ hContact = (HANDLE) GetWindowLong(hwndDlg, GWL_USERDATA);
+ switch (msg) {
+ case WM_INITDIALOG:
+ {
+ DBVARIANT dbv;
+ hContact = (HANDLE) lParam;
+ BYTE bAdvanced = DBGetContactSettingByte(hContact, IRCPROTONAME, "AdvancedMode", 0);
+
+ TranslateDialogDefault(hwndDlg);
+
+ SetWindowLong(hwndDlg, GWL_USERDATA, (LONG) hContact);
+
+ CheckDlgButton(hwndDlg, IDC_RADIO1, bAdvanced?BST_UNCHECKED:BST_CHECKED);
+ CheckDlgButton(hwndDlg, IDC_RADIO2, bAdvanced?BST_CHECKED:BST_UNCHECKED);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_WILDCARD), bAdvanced);
+
+ if(!bAdvanced)
+ {
+ SetDlgItemText(hwndDlg, IDC_DEFAULT, STR_BASIC);
+ if (!DBGetContactSetting(hContact, IRCPROTONAME, "Default", &dbv) && dbv.type == DBVT_ASCIIZ) {
+ SetDlgItemText(hwndDlg, IDC_WILDCARD, dbv.pszVal);
+ DBFreeVariant(&dbv);
+ }
+ }
+ else
+ {
+ SetDlgItemText(hwndDlg, IDC_DEFAULT, STR_ADVANCED);
+ if (!DBGetContactSetting(hContact, IRCPROTONAME, "UWildcard", &dbv) && dbv.type == DBVT_ASCIIZ) {
+ SetDlgItemText(hwndDlg, IDC_WILDCARD, dbv.pszVal);
+ DBFreeVariant(&dbv);
+ }
+ }
+
+ if (!DBGetContactSetting(hContact, IRCPROTONAME, "UUser", &dbv) && dbv.type == DBVT_ASCIIZ) {
+ SetDlgItemText(hwndDlg, IDC_USER, dbv.pszVal);
+ DBFreeVariant(&dbv);
+ }
+ if (!DBGetContactSetting(hContact, IRCPROTONAME, "UHost", &dbv) && dbv.type == DBVT_ASCIIZ) {
+ SetDlgItemText(hwndDlg, IDC_HOST, dbv.pszVal);
+ DBFreeVariant(&dbv);
+ }
+ forkthread(AckUserInfoSearch, 0, hContact);
+
+ }break;
+ case WM_COMMAND:
+ {
+
+ if( (LOWORD(wParam)==IDC_WILDCARD
+ || LOWORD(wParam)==IDC_USER
+ || LOWORD(wParam) == IDC_HOST
+ )
+ && (HIWORD(wParam)!=EN_CHANGE || (HWND)lParam!=GetFocus())) return true;
+
+ EnableWindow(GetDlgItem(hwndDlg, IDC_BUTTON), true);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_BUTTON2), true);
+
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_BUTTON)
+ {
+ char temp[500];
+ GetDlgItemText(hwndDlg, IDC_WILDCARD, temp, 500);
+ DBVARIANT dbv;
+ BYTE bAdvanced = IsDlgButtonChecked(hwndDlg, IDC_RADIO1)?0:1;
+
+
+
+ if(bAdvanced)
+ {
+ if(GetWindowTextLength(GetDlgItem(hwndDlg, IDC_WILDCARD)) == 0
+ || GetWindowTextLength(GetDlgItem(hwndDlg, IDC_USER)) == 0
+ || GetWindowTextLength(GetDlgItem(hwndDlg, IDC_HOST)) == 0)
+ {
+ MessageBox(NULL, Translate( STR_ERROR2 ), Translate("IRC error"), MB_OK|MB_ICONERROR);
+ return false;
+ }
+ if (!DBGetContactSetting(hContact, IRCPROTONAME, "Default", &dbv) && dbv.type == DBVT_ASCIIZ )
+ {
+ String S = STR_ERROR + (String)" (" + dbv.pszVal + (String)")";
+ if((lstrlen(temp) <4 && lstrlen(temp)) || !WCCmp(CharLower(temp), CharLower(dbv.pszVal)))
+ {
+ MessageBox(NULL, Translate( S.c_str() ), Translate("IRC error"), MB_OK|MB_ICONERROR);
+ DBFreeVariant(&dbv);
+ return false;
+ }
+ DBFreeVariant(&dbv);
+ }
+ GetDlgItemText(hwndDlg, IDC_WILDCARD, temp, 500);
+ if (lstrlen(GetWord(temp, 0).c_str()))
+ DBWriteContactSettingString(hContact, IRCPROTONAME, "UWildcard", GetWord(temp, 0).c_str());
+ else
+ DBDeleteContactSetting(hContact, IRCPROTONAME, "UWildcard");
+ }
+
+ DBWriteContactSettingByte(hContact, IRCPROTONAME, "AdvancedMode", bAdvanced);
+
+ GetDlgItemText(hwndDlg, IDC_USER, temp, 500);
+ if (lstrlen(GetWord(temp, 0).c_str()))
+ DBWriteContactSettingString(hContact, IRCPROTONAME, "UUser", GetWord(temp, 0).c_str());
+ else
+ DBDeleteContactSetting(hContact, IRCPROTONAME, "UUser");
+
+ GetDlgItemText(hwndDlg, IDC_HOST, temp, 500);
+ if (lstrlen(GetWord(temp, 0).c_str()))
+ DBWriteContactSettingString(hContact, IRCPROTONAME, "UHost", GetWord(temp, 0).c_str());
+ else
+ DBDeleteContactSetting(hContact, IRCPROTONAME, "UHost");
+
+ EnableWindow(GetDlgItem(hwndDlg, IDC_BUTTON), false);
+
+ }
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_BUTTON2)
+ {
+ if(IsDlgButtonChecked(hwndDlg, IDC_RADIO2))
+ SetDlgItemText(hwndDlg, IDC_WILDCARD, "");
+ SetDlgItemText(hwndDlg, IDC_HOST, "");
+ SetDlgItemText(hwndDlg, IDC_USER, "");
+ DBDeleteContactSetting(hContact, IRCPROTONAME, "UWildcard");
+ DBDeleteContactSetting(hContact, IRCPROTONAME, "UUser");
+ DBDeleteContactSetting(hContact, IRCPROTONAME, "UHost");
+ EnableWindow(GetDlgItem(hwndDlg, IDC_BUTTON), false);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_BUTTON2), false);
+
+ }
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_RADIO1)
+ {
+ DBVARIANT dbv;
+ SetDlgItemText(hwndDlg, IDC_DEFAULT, STR_BASIC);
+ if (!DBGetContactSetting(hContact, IRCPROTONAME, "Default", &dbv) && dbv.type == DBVT_ASCIIZ) {
+ SetDlgItemText(hwndDlg, IDC_WILDCARD, dbv.pszVal);
+ DBFreeVariant(&dbv);
+ }
+ EnableWindow(GetDlgItem(hwndDlg, IDC_WILDCARD), false);
+
+ }
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_RADIO2)
+ {
+ DBVARIANT dbv;
+ SetDlgItemText(hwndDlg, IDC_DEFAULT, STR_ADVANCED);
+ if (!DBGetContactSetting(hContact, IRCPROTONAME, "UWildcard", &dbv) && dbv.type == DBVT_ASCIIZ) {
+ SetDlgItemText(hwndDlg, IDC_WILDCARD, dbv.pszVal);
+ DBFreeVariant(&dbv);
+ }
+ EnableWindow(GetDlgItem(hwndDlg, IDC_WILDCARD), true);
+
+ }
+
+ }break;
+ }
+ return FALSE;
+}
+BOOL CALLBACK QuestionWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
+{
+ switch (uMsg)
+ {
+
+ case WM_INITDIALOG:
+ {
+ TranslateDialogDefault(hwndDlg);
+ HFONT hFont;
+ LOGFONT lf;
+ hFont=(HFONT)SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_GETFONT,0,0);
+ GetObject(hFont,sizeof(lf),&lf);
+ lf.lfHeight=(int)(lf.lfHeight*1.2);
+ lf.lfWeight=FW_BOLD;
+ hFont=CreateFontIndirect(&lf);
+ SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_SETFONT,(WPARAM)hFont,0);
+ SendMessage(GetDlgItem(hwndDlg, IDC_LOGO),STM_SETICON,(LPARAM)(HICON)LoadIconEx(IDI_LOGO,"logo",48,48), 0);
+
+ } break;
+
+ case WM_COMMAND:
+ {
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDNCANCEL)
+ {
+ PostMessage (hwndDlg, WM_CLOSE, 0,0);
+ }
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDNOK)
+ {
+ int i = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_EDIT));
+ if (i > 0)
+ {
+ char * l= new char[i +2];
+ GetDlgItemText(hwndDlg, IDC_EDIT, l, 200);
+
+ int j = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_HIDDENEDIT));
+ char * m;
+ m = new char[j+2];
+ GetDlgItemText(hwndDlg, IDC_HIDDENEDIT, m, j+1);
+
+ char * text = strstr(m, "%question");
+ char * p1 = text;
+ char * p2 = NULL;
+ if (p1)
+ {
+ p1 += 9;
+ if (*p1 == '=' && p1[1] == '\"')
+ {
+ p1 += 2;
+ for (int k =0; k< 3;k++)
+ {
+ p2 = strchr(p1, '\"');
+ if (p2)
+ {
+ p2++;
+ if (k == 2 || (*p2 != ',' || (*p2 == ',' && p2[1] != '\"')))
+ {
+ *p2 = '\0';
+
+ }
+ else
+ p2 +=2;
+ p1 = p2;
+ }
+ }
+
+ }
+ else
+ *p1 = '\0';
+
+ }
+
+ char * n;
+ n = new char[j+2];
+ GetDlgItemText(hwndDlg, IDC_HIDDENEDIT, n, j+1);
+
+ String S = ReplaceString(n, text, l);
+
+ PostIrcMessageWnd( NULL, NULL, (char*)S.c_str());
+
+ delete []m;
+ delete []l;
+ delete []n;
+ HWND hwnd = GetParent(hwndDlg);
+ if(hwnd)
+ SendMessage(hwnd, IRC_QUESTIONAPPLY, 0, 0);
+
+ }
+ SendMessage (hwndDlg, WM_CLOSE, 0,0);
+
+ }
+
+
+
+ } break;
+ case IRC_ACTIVATE:
+ {
+ ShowWindow(hwndDlg, SW_SHOW);
+ SetActiveWindow(hwndDlg);
+ }break;
+ case WM_CLOSE:
+ {
+ HWND hwnd = GetParent(hwndDlg);
+ if(hwnd)
+ SendMessage(GetParent(hwndDlg), IRC_QUESTIONCLOSE, 0, 0);
+ DestroyWindow(hwndDlg);
+
+ } break;
+ case WM_CTLCOLOREDIT:
+ case WM_CTLCOLORSTATIC:
+ {
+ if((HWND)lParam==GetDlgItem(hwndDlg,IDC_WHITERECT)
+ || (HWND)lParam==GetDlgItem(hwndDlg,IDC_TEXT)
+ || (HWND)lParam==GetDlgItem(hwndDlg,IDC_CAPTION)
+ || (HWND)lParam==GetDlgItem(hwndDlg,IDC_LOGO))
+ {
+ SetTextColor((HDC)wParam,RGB(0,0,0));
+ SetBkColor((HDC)wParam,RGB(255,255,255));
+ return (BOOL)GetStockObject(WHITE_BRUSH);
+ }
+ }break;
+ case WM_DESTROY:
+ {
+ HFONT hFont;
+ hFont=(HFONT)SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_GETFONT,0,0);
+ SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_SETFONT,SendDlgItemMessage(hwndDlg,IDNOK,WM_GETFONT,0,0),0);
+ DeleteObject(hFont);
+
+ } break;
+
+ default:break;
+ }
+ return(false);
+}
+
+BOOL CALLBACK ManagerWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
+{
+ switch (uMsg)
+ {
+
+ case WM_INITDIALOG:
+ {
+ TranslateDialogDefault(hwndDlg);
+ HFONT hFont;
+ LOGFONT lf;
+ hFont=(HFONT)SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_GETFONT,0,0);
+ GetObject(hFont,sizeof(lf),&lf);
+ lf.lfHeight=(int)(lf.lfHeight*1.2);
+ lf.lfWeight=FW_BOLD;
+ hFont=CreateFontIndirect(&lf);
+ SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_SETFONT,(WPARAM)hFont,0);
+
+ POINT pt;
+ pt.x = 3;
+ pt.y = 3;
+ HWND hwndEdit = ChildWindowFromPoint(GetDlgItem(hwndDlg, IDC_TOPIC), pt);
+
+ OldMgrEditProc = (WNDPROC)SetWindowLong(hwndEdit, GWL_WNDPROC,(LONG)MgrEditSubclassProc);
+
+ SendDlgItemMessage(hwndDlg,IDC_ADD,BM_SETIMAGE,IMAGE_ICON,(LPARAM)(HICON)LoadIconEx(IDI_ADD,"add",GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON)));
+ SendDlgItemMessage(hwndDlg,IDC_REMOVE,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 ban/invite/exception"), 0);
+ SendMessage(GetDlgItem(hwndDlg,IDC_EDIT), BUTTONADDTOOLTIP, (WPARAM)Translate("Edit selected ban/invite/exception"), 0);
+ SendMessage(GetDlgItem(hwndDlg,IDC_REMOVE), BUTTONADDTOOLTIP, (WPARAM)Translate("Delete selected ban/invite/exception"), 0);
+
+ SendMessage(hwndDlg,WM_SETICON,ICON_BIG,(LPARAM)LoadIconEx(IDI_MANAGER,"manager",GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON)));
+ SendMessage(GetDlgItem(hwndDlg, IDC_LOGO),STM_SETICON,(LPARAM)(HICON)LoadIconEx(IDI_LOGO,"logo",48,48), 0);
+ SendDlgItemMessage(hwndDlg,IDC_APPLYTOPIC,BM_SETIMAGE,IMAGE_ICON,(LPARAM)LoadIconEx(IDI_GO,"go",GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON)));
+ SendDlgItemMessage(hwndDlg,IDC_APPLYMODES,BM_SETIMAGE,IMAGE_ICON,(LPARAM)LoadIconEx(IDI_GO,"go",GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON)));
+ SendMessage(GetDlgItem(hwndDlg,IDC_APPLYTOPIC), BUTTONADDTOOLTIP, (WPARAM)Translate("Set this topic for the channel"), 0);
+ SendMessage(GetDlgItem(hwndDlg,IDC_APPLYMODES), BUTTONADDTOOLTIP, (WPARAM)Translate("Set these modes for the channel"), 0);
+
+ SendDlgItemMessage(hwndDlg,IDC_LIST,LB_SETHORIZONTALEXTENT,750,NULL);
+ CheckDlgButton(hwndDlg, IDC_RADIO1, BST_CHECKED);
+ if (!strchr(sChannelModes.c_str(), 't'))
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHECK1), false);
+ if (!strchr(sChannelModes.c_str(), 'n'))
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHECK2), false);
+ if (!strchr(sChannelModes.c_str(), 'i'))
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHECK3), false);
+ if (!strchr(sChannelModes.c_str(), 'm'))
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHECK4), false);
+ if (!strchr(sChannelModes.c_str(), 'k'))
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHECK5), false);
+ if (!strchr(sChannelModes.c_str(), 'l'))
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHECK6), false);
+ if (!strchr(sChannelModes.c_str(), 'p'))
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHECK7), false);
+ if (!strchr(sChannelModes.c_str(), 's'))
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHECK8), false);
+ } break;
+ case WM_CTLCOLOREDIT:
+ case WM_CTLCOLORSTATIC:
+ {
+ if((HWND)lParam==GetDlgItem(hwndDlg,IDC_WHITERECT)
+ || (HWND)lParam==GetDlgItem(hwndDlg,IDC_TEXT)
+ || (HWND)lParam==GetDlgItem(hwndDlg,IDC_CAPTION)
+ || (HWND)lParam==GetDlgItem(hwndDlg,IDC_LOGO))
+ {
+ SetTextColor((HDC)wParam,RGB(0,0,0));
+ SetBkColor((HDC)wParam,RGB(255,255,255));
+ return (BOOL)GetStockObject(WHITE_BRUSH);
+ }
+ }break;
+ case IRC_INITMANAGER:
+ {
+ char * window = (char *) lParam;
+ CHANNELINFO* wi = (CHANNELINFO *)DoEvent(GC_EVENT_GETITEMDATA, window, NULL, NULL, NULL, NULL, NULL, FALSE, FALSE, 0);
+
+ if(wi)
+ {
+ if (g_ircSession)
+ {
+ char temp[1000];
+ mir_snprintf(temp, sizeof(temp), "Topic%s%s", window, g_ircSession.GetInfo().sNetwork.c_str());
+
+ DBVARIANT dbv;
+ if (!DBGetContactSetting(NULL, IRCPROTONAME, temp, &dbv) && dbv.type == DBVT_ASCIIZ)
+ {
+ for (int i = 0; i<5; i++) {
+ if (!GetWord(dbv.pszVal, i).empty()) {
+ String S = ReplaceString(GetWord(dbv.pszVal, i) ,"%¤" , " ");
+ SendDlgItemMessage(hwndDlg, IDC_TOPIC, CB_ADDSTRING, 0, (LPARAM)S.c_str());
+ }
+ }
+ DBFreeVariant(&dbv);
+ }
+ }
+
+ if(wi->pszTopic)
+ SetDlgItemText(hwndDlg, IDC_TOPIC, wi->pszTopic);
+
+ if (!IsDlgButtonChecked(manager_hWnd, IDC_NOTOP))
+ EnableWindow(GetDlgItem(hwndDlg, IDC_ADD), true);
+
+
+ bool add =false;
+ char * p1= wi->pszMode;
+ if(p1)
+ {
+ while (*p1 != '\0' && *p1 != ' ')
+ {
+ if (*p1 == '+')
+ add = true;
+ if (*p1 == '-')
+ add = false;
+ if (*p1 == 't')
+ CheckDlgButton(hwndDlg, IDC_CHECK1, add?(BST_CHECKED) : (BST_UNCHECKED));
+ if (*p1 == 'n')
+ CheckDlgButton(hwndDlg, IDC_CHECK2, add?(BST_CHECKED) : (BST_UNCHECKED));
+ if (*p1 == 'i')
+ CheckDlgButton(hwndDlg, IDC_CHECK3, add?(BST_CHECKED) : (BST_UNCHECKED));
+ if (*p1 == 'm')
+ CheckDlgButton(hwndDlg, IDC_CHECK4, add?(BST_CHECKED) : (BST_UNCHECKED));
+ if (*p1 == 'p')
+ CheckDlgButton(hwndDlg, IDC_CHECK7, add?(BST_CHECKED) : (BST_UNCHECKED));
+ if (*p1 == 's')
+ CheckDlgButton(hwndDlg, IDC_CHECK8, add?(BST_CHECKED) : (BST_UNCHECKED));
+ if (*p1 == 'k' && add) {
+ CheckDlgButton(hwndDlg, IDC_CHECK5, add?(BST_CHECKED) : (BST_UNCHECKED));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_KEY), add?(true) : (false));
+ if(wi->pszPassword)
+ SetDlgItemText(hwndDlg, IDC_KEY, wi->pszPassword);
+ }
+ if (*p1 == 'l' && add) {
+ CheckDlgButton(hwndDlg, IDC_CHECK6, add?(BST_CHECKED) : (BST_UNCHECKED));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_LIMIT), add?(true) : (false));
+ if(wi->pszLimit)
+ SetDlgItemText(hwndDlg, IDC_LIMIT, wi->pszLimit);
+ }
+ p1++;
+ if (wParam ==0)
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_LIMIT), (false));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_KEY), (false));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHECK1), (false));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHECK2), (false));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHECK3), (false));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHECK4), (false));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHECK5), (false));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHECK6), (false));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHECK7), (false));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHECK8), (false));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_ADD), (false));
+ if(IsDlgButtonChecked(hwndDlg, IDC_CHECK1))
+ EnableWindow(GetDlgItem(hwndDlg, IDC_TOPIC), (false));
+ CheckDlgButton(hwndDlg, IDC_NOTOP, BST_CHECKED);
+
+ }
+ ShowWindow(hwndDlg, SW_SHOW);
+
+ }
+ }
+ }
+ if (strchr(sChannelModes.c_str(), 'b'))
+ {
+ CheckDlgButton(hwndDlg, IDC_RADIO1, BST_CHECKED);
+ PostIrcMessage( "/MODE %s +b", window);
+ }
+
+ } break;
+ case WM_COMMAND:
+ {
+ if(
+ ( LOWORD(wParam)==IDC_LIMIT
+ || LOWORD(wParam)==IDC_KEY
+ )
+ && (HIWORD(wParam)!=EN_CHANGE || (HWND)lParam!=GetFocus())) return true;
+ char window[256];
+ GetDlgItemText(hwndDlg, IDC_CAPTION, window, 255);
+
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDCLOSE)
+ {
+ PostMessage (hwndDlg, WM_CLOSE, 0,0);
+ }
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_REMOVE)
+ {
+ int i = SendDlgItemMessage(hwndDlg, IDC_LIST, LB_GETCURSEL, 0, 0);
+ if (i != LB_ERR)
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVE), false);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_EDIT), false);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_ADD), false);
+ char * m = new char[SendDlgItemMessage(hwndDlg, IDC_LIST, LB_GETTEXTLEN, i, 0)+2];
+ SendDlgItemMessage(hwndDlg, IDC_LIST, LB_GETTEXT, i, (LPARAM)m);
+ String user = GetWord(m, 0);
+ delete[]m;
+ char temp[100];
+ char mode[3];
+ if (IsDlgButtonChecked(hwndDlg, IDC_RADIO1))
+ {
+ lstrcpy(mode, "-b");
+ lstrcpyn(temp, Translate( "Remove ban?" ), 100);
+ }
+ if (IsDlgButtonChecked(hwndDlg, IDC_RADIO2))
+ {
+ lstrcpy(mode, "-I");
+ lstrcpyn(temp, Translate( "Remove invite?" ), 100);
+ }
+ if (IsDlgButtonChecked(hwndDlg, IDC_RADIO3))
+ {
+ lstrcpy(mode, "-e");
+ lstrcpyn(temp, Translate( "Remove exception?" ), 100);
+ }
+
+ if (MessageBox(hwndDlg,user.c_str(), temp, MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2) == IDYES)
+ {
+ PostIrcMessage( "/MODE %s %s %s", window, mode, user.c_str());
+ SendMessage(hwndDlg, IRC_QUESTIONAPPLY, 0, 0);
+
+ }
+ SendMessage(hwndDlg, IRC_QUESTIONCLOSE, 0, 0);
+ }
+ }
+
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_EDIT)
+ {
+ if(IsDlgButtonChecked(hwndDlg, IDC_NOTOP))
+ break;
+
+ int i = SendDlgItemMessage(hwndDlg, IDC_LIST, LB_GETCURSEL, 0, 0);
+ if (i != LB_ERR)
+ {
+ char * m = new char[SendDlgItemMessage(hwndDlg, IDC_LIST, LB_GETTEXTLEN, i, 0)+2];
+ SendDlgItemMessage(hwndDlg, IDC_LIST, LB_GETTEXT, i, (LPARAM)m);
+ String user = GetWord(m, 0);
+ delete[]m;
+ char temp[100];
+ char mode[3];
+ if (IsDlgButtonChecked(hwndDlg, IDC_RADIO1))
+ {
+ lstrcpy(mode, "b");
+ lstrcpyn(temp, Translate( "Edit ban" ), 100);
+ }
+ if (IsDlgButtonChecked(hwndDlg, IDC_RADIO2))
+ {
+ lstrcpy(mode, "I");
+ lstrcpyn(temp, Translate( "Edit invite?" ), 100);
+ }
+ if (IsDlgButtonChecked(hwndDlg, IDC_RADIO3))
+ {
+ lstrcpy(mode, "e");
+ lstrcpyn(temp, Translate( "Edit exception?" ), 100);
+ }
+
+ HWND addban_hWnd = CreateDialog(g_hInstance,MAKEINTRESOURCE(IDD_QUESTION),hwndDlg, QuestionWndProc);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_ADD), false);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVE), false);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_EDIT), false);
+ SetDlgItemText(addban_hWnd, IDC_CAPTION, temp);
+ SetWindowText(GetDlgItem(addban_hWnd, IDC_TEXT), Translate( "Please enter the hostmask (nick!user@host)" ));
+ SetWindowText(GetDlgItem(addban_hWnd, IDC_EDIT), user.c_str());
+ char temp2[450];
+ mir_snprintf(temp2, 450, "/MODE %s -%s %s%s/MODE %s +%s %s", window, mode, user.c_str(), "%newl", window, mode, "%question");
+ SetDlgItemText(addban_hWnd, IDC_HIDDENEDIT, temp2);
+ PostMessage(addban_hWnd, IRC_ACTIVATE, 0, 0);
+ }
+ }
+ if(HIWORD(wParam) == LBN_SELCHANGE && LOWORD(wParam) == IDC_LIST)
+ {
+ if(!IsDlgButtonChecked(hwndDlg, IDC_NOTOP))
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_EDIT), true);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVE), true);
+ }
+ }
+ if(HIWORD(wParam) == LBN_DBLCLK && LOWORD(wParam) == IDC_LIST)
+ {
+ SendMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(IDC_EDIT, BN_CLICKED), 0);
+ }
+
+ if(HIWORD(wParam) == EN_CHANGE && (LOWORD(wParam) == IDC_LIMIT || LOWORD(wParam) == IDC_KEY))
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_APPLYMODES), true);
+ }
+
+ if ((HIWORD(wParam) == CBN_EDITCHANGE || HIWORD(wParam) == CBN_SELCHANGE) && LOWORD(wParam) == IDC_TOPIC)
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_APPLYTOPIC), true);
+
+ return false;
+ }
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_APPLYTOPIC)
+ {
+ char temp[470];
+ GetDlgItemText(hwndDlg, IDC_TOPIC, temp, 470);
+ PostIrcMessage ( "/TOPIC %s %s", window, temp);
+ int i = SendDlgItemMessage(hwndDlg, IDC_TOPIC, CB_FINDSTRINGEXACT, -1, (LPARAM)temp);
+ if(i!=LB_ERR)
+ SendDlgItemMessage(hwndDlg, IDC_TOPIC, CB_DELETESTRING, i, 0);
+ SendDlgItemMessage(hwndDlg, IDC_TOPIC, CB_INSERTSTRING, 0, (LPARAM)temp);
+ SetDlgItemText(hwndDlg, IDC_TOPIC, temp);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_APPLYTOPIC), false);
+
+ }
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_CHECK5)
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_KEY), IsDlgButtonChecked(hwndDlg, IDC_CHECK5)== BST_CHECKED);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_APPLYMODES), true);
+
+ }
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_ADD)
+ {
+ char temp[100];
+ char mode[3];
+ if (IsDlgButtonChecked(hwndDlg, IDC_RADIO1))
+ {
+ lstrcpy(mode, "+b");
+ lstrcpyn(temp, Translate( "Add ban" ), 100);
+ }
+ if (IsDlgButtonChecked(hwndDlg, IDC_RADIO2))
+ {
+ lstrcpy(mode, "+I");
+ lstrcpyn(temp, Translate( "Add invite" ), 100);
+ }
+ if (IsDlgButtonChecked(hwndDlg, IDC_RADIO3))
+ {
+ lstrcpy(mode, "+e");
+ lstrcpyn(temp, Translate( "Add exception" ), 100);
+ }
+ HWND addban_hWnd = CreateDialog(g_hInstance,MAKEINTRESOURCE(IDD_QUESTION),hwndDlg, QuestionWndProc);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_ADD), false);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVE), false);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_EDIT), false);
+ SetDlgItemText(addban_hWnd, IDC_CAPTION, temp);
+ SetWindowText(GetDlgItem(addban_hWnd, IDC_TEXT), Translate( "Please enter the hostmask (nick!user@host)" ));
+ char temp2[450];
+ mir_snprintf(temp2, 450, "/MODE %s %s %s", window, mode, "%question");
+ SetDlgItemText(addban_hWnd, IDC_HIDDENEDIT, temp2);
+ PostMessage(addban_hWnd, IRC_ACTIVATE, 0, 0);
+ }
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_CHECK6)
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_LIMIT), IsDlgButtonChecked(hwndDlg, IDC_CHECK6)== BST_CHECKED);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_APPLYMODES), true);
+ }
+ if(HIWORD(wParam) == BN_CLICKED && (LOWORD(wParam) == IDC_RADIO1 || LOWORD(wParam) == IDC_RADIO3 || LOWORD(wParam) == IDC_RADIO2))
+ {
+ SendMessage(hwndDlg, IRC_QUESTIONAPPLY, 0, 0);
+ }
+ if(HIWORD(wParam) == BN_CLICKED && (LOWORD(wParam) == IDC_CHECK1
+ || LOWORD(wParam) == IDC_CHECK2
+ || LOWORD(wParam) == IDC_CHECK3
+ || LOWORD(wParam) == IDC_CHECK4
+ || LOWORD(wParam) == IDC_CHECK7
+ || LOWORD(wParam) == IDC_CHECK8))
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_APPLYMODES), true);
+ }
+ if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_APPLYMODES)
+ {
+ CHANNELINFO* wi = (CHANNELINFO *)DoEvent(GC_EVENT_GETITEMDATA, window, NULL, NULL, NULL, NULL, NULL, FALSE, FALSE, 0);
+ if (wi )
+ {
+ char toadd[10]; *toadd = '\0';
+ char toremove[10]; *toremove = '\0';
+ String appendixadd = "";
+ String appendixremove = "";
+ if(wi->pszMode && strchr(wi->pszMode, 't'))
+ {
+ if(!IsDlgButtonChecked(hwndDlg, IDC_CHECK1))
+ lstrcat(toremove, "t");
+ }
+ else
+ {
+ if(IsDlgButtonChecked(hwndDlg, IDC_CHECK1))
+ lstrcat(toadd, "t");
+ }
+
+ if(wi->pszMode && strchr(wi->pszMode, 'n'))
+ {
+ if(!IsDlgButtonChecked(hwndDlg, IDC_CHECK2))
+ lstrcat(toremove, "n");
+ }
+ else
+ {
+ if(IsDlgButtonChecked(hwndDlg, IDC_CHECK2))
+ lstrcat(toadd, "n");
+ }
+
+ if(wi->pszMode && strchr(wi->pszMode, 'i'))
+ {
+ if(!IsDlgButtonChecked(hwndDlg, IDC_CHECK3))
+ lstrcat(toremove, "i");
+ }
+ else
+ {
+ if(IsDlgButtonChecked(hwndDlg, IDC_CHECK3))
+ lstrcat(toadd, "i");
+ }
+
+ if(wi->pszMode && strchr(wi->pszMode, 'm'))
+ {
+ if(!IsDlgButtonChecked(hwndDlg, IDC_CHECK4))
+ lstrcat(toremove, "m");
+ }
+ else
+ {
+ if(IsDlgButtonChecked(hwndDlg, IDC_CHECK4))
+ lstrcat(toadd, "m");
+ }
+
+ if(wi->pszMode && strchr(wi->pszMode, 'p'))
+ {
+ if(!IsDlgButtonChecked(hwndDlg, IDC_CHECK7))
+ lstrcat(toremove, "p");
+ }
+ else
+ {
+ if(IsDlgButtonChecked(hwndDlg, IDC_CHECK7))
+ lstrcat(toadd, "p");
+ }
+
+ if(wi->pszMode && strchr(wi->pszMode, 's'))
+ {
+ if(!IsDlgButtonChecked(hwndDlg, IDC_CHECK8))
+ lstrcat(toremove, "s");
+ }
+ else
+ {
+ if(IsDlgButtonChecked(hwndDlg, IDC_CHECK8))
+ lstrcat(toadd, "s");
+ }
+ String Key = "";
+ String Limit = "";
+ if(wi->pszMode && wi->pszPassword && strchr(wi->pszMode, 'k'))
+ {
+ if(!IsDlgButtonChecked(hwndDlg, IDC_CHECK5) )
+ {
+ lstrcat(toremove, "k");
+ appendixremove += " ";
+ appendixremove += wi->pszPassword;
+ }
+ else if(GetWindowTextLength(GetDlgItem(hwndDlg, IDC_KEY)))
+ {
+ char temp[400];
+ GetDlgItemText(hwndDlg, IDC_KEY, temp, 14);
+
+ if(Key != temp) {
+ lstrcat(toremove, "k");
+ lstrcat(toadd, "k");
+ appendixadd += " ";
+ appendixadd += temp;
+ appendixremove += " ";
+ appendixremove += wi->pszPassword;
+ }
+ }
+ }
+ else
+ {
+ if(IsDlgButtonChecked(hwndDlg, IDC_CHECK5) && GetWindowTextLength(GetDlgItem(hwndDlg, IDC_KEY)))
+ {
+ lstrcat(toadd, "k");
+ appendixadd +=" ";
+ char temp[400];
+ GetDlgItemText(hwndDlg, IDC_KEY, temp, 399);
+ appendixadd += temp;
+ }
+
+ }
+
+ if(strchr(wi->pszMode, 'l'))
+ {
+ if(!IsDlgButtonChecked(hwndDlg, IDC_CHECK6) )
+ lstrcat(toremove, "l");
+ else if(GetWindowTextLength(GetDlgItem(hwndDlg, IDC_LIMIT)))
+ {
+ char temp[15];
+ GetDlgItemText(hwndDlg, IDC_LIMIT, temp, 14);
+ if(wi->pszLimit && lstrcmpi(wi->pszLimit, temp))
+ {
+ lstrcat(toadd, "l");
+ appendixadd += " ";
+ appendixadd += temp;
+
+ }
+
+
+ }
+ }
+ else
+ {
+ if(IsDlgButtonChecked(hwndDlg, IDC_CHECK6) && GetWindowTextLength(GetDlgItem(hwndDlg, IDC_LIMIT)))
+ {
+ lstrcat(toadd, "l");
+ appendixadd +=" ";
+ char temp[15];
+ GetDlgItemText(hwndDlg, IDC_LIMIT, temp, 14);
+ appendixadd += temp;
+ }
+
+ }
+
+
+ if (lstrlen(toadd) || lstrlen(toremove))
+ {
+ char temp[500];
+ lstrcpy(temp, "/mode ");
+ lstrcat(temp, window);
+ lstrcat(temp, " ");
+ if(lstrlen(toremove))
+ mir_snprintf(temp, 499, "%s-%s", temp, toremove);
+ if(lstrlen(toadd))
+ mir_snprintf(temp, 499, "%s+%s", temp, toadd);
+ if (!appendixremove.empty())
+ lstrcat(temp, appendixremove.c_str());
+ if (!appendixadd.empty())
+ lstrcat(temp, appendixadd.c_str());
+ PostIrcMessage ( temp);
+ }
+ }
+ EnableWindow(GetDlgItem(hwndDlg, IDC_APPLYMODES), false);
+
+ }
+
+ } break;
+ case IRC_QUESTIONCLOSE:
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_ADD), true);
+ if(SendDlgItemMessage(hwndDlg, IDC_LIST, LB_GETCURSEL, 0, 0) != LB_ERR)
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVE), true);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_EDIT), true);
+ }
+
+ }break;
+ case IRC_QUESTIONAPPLY:
+ {
+ char window[256];
+ GetDlgItemText(hwndDlg, IDC_CAPTION, window, 255);
+
+ char mode[3];
+ lstrcpy(mode, "+b");
+ if (IsDlgButtonChecked(hwndDlg, IDC_RADIO2))
+ lstrcpy(mode, "+I");
+ if (IsDlgButtonChecked(hwndDlg, IDC_RADIO3))
+ lstrcpy(mode, "+e");
+ SendDlgItemMessage(hwndDlg, IDC_LIST, LB_RESETCONTENT, 0, 0);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_RADIO1), false);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_RADIO2), false);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_RADIO3), false);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_ADD), false);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_EDIT), false);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVE), false);
+ PostIrcMessage( "%s %s %s", "/MODE", window, mode); //wrong overloaded operator if three args
+
+ }break;
+ case WM_CLOSE:
+ {
+ if (lParam != 3)
+ {
+ if (IsWindowEnabled(GetDlgItem(hwndDlg, IDC_APPLYMODES)) || IsWindowEnabled(GetDlgItem(hwndDlg, IDC_APPLYTOPIC)))
+ {
+ int i = MessageBox(hwndDlg, Translate( "You have not applied all changes!\n\nApply before exiting?" ), Translate( "IRC warning" ), MB_YESNOCANCEL|MB_ICONWARNING|MB_DEFBUTTON3);
+ if( i== IDCANCEL)
+ return false;
+
+ if (i == IDYES)
+ {
+ if(IsWindowEnabled(GetDlgItem(hwndDlg, IDC_APPLYMODES)))
+ SendMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(IDC_APPLYMODES, BN_CLICKED), 0);
+ if(IsWindowEnabled(GetDlgItem(hwndDlg, IDC_APPLYTOPIC)))
+ SendMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(IDC_APPLYTOPIC, BN_CLICKED), 0);
+ }
+ }
+ }
+
+ char window[256];
+ GetDlgItemText(hwndDlg, IDC_CAPTION, window, 255);
+ String S = "";
+ char temp[1000];
+ for (int i = 0; i<5; i++)
+ {
+ if (SendDlgItemMessage(hwndDlg, IDC_TOPIC, CB_GETLBTEXT, i, (LPARAM)temp) != LB_ERR)
+ {
+ S += " ";
+ S += ReplaceString(temp ," " , "%¤");
+ }
+ }
+
+ if (S != "" && g_ircSession)
+ {
+ mir_snprintf(temp, sizeof(temp), "Topic%s%s", window, g_ircSession.GetInfo().sNetwork.c_str());
+ DBWriteContactSettingString(NULL, IRCPROTONAME, temp, S.c_str());
+ }
+ DestroyWindow(hwndDlg);
+
+ } break;
+ case WM_DESTROY:
+ {
+ HFONT hFont;
+ hFont=(HFONT)SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_GETFONT,0,0);
+ SendDlgItemMessage(hwndDlg,IDC_CAPTION,WM_SETFONT,SendDlgItemMessage(hwndDlg,IDNOK,WM_GETFONT,0,0),0);
+ DeleteObject(hFont);
+ manager_hWnd = NULL;
+
+ } break;
+ default:break;
+ }
+ return(false);
+}
+
+LRESULT CALLBACK MgrEditSubclassProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+
+ switch(msg)
+ {
+ case WM_CHAR :
+ {
+ if (wParam == 21 || wParam == 11 || wParam == 2)
+ {
+ char w[2];
+ if (wParam == 11)
+ {
+ w[0] = 3;
+ w[1] = '\0';
+ }
+ if (wParam == 2)
+ {
+ w[0] = 2;
+ w[1] = '\0';
+ }
+ if (wParam == 21)
+ {
+ w[0] = 31;
+ w[1] = '\0';
+ }
+ SendMessage(hwndDlg, EM_REPLACESEL, false, (LPARAM) w);
+ SendMessage(hwndDlg, EM_SCROLLCARET, 0,0);
+ return 0;
+ }
+
+ } break;
+ default: break;
+
+ }
+ return CallWindowProc(OldMgrEditProc, hwndDlg, msg, wParam, lParam);
+
+}
|