From cb4a46e7fbe62d788e66ed6121c717a2d22a4d7c Mon Sep 17 00:00:00 2001 From: watcherhd Date: Thu, 21 Apr 2011 14:14:52 +0000 Subject: svn.miranda.im is moving to a new home! git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@7 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- irc_mod/windows.cpp | 1800 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1800 insertions(+) create mode 100644 irc_mod/windows.cpp (limited to 'irc_mod/windows.cpp') 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); + +} -- cgit v1.2.3