/* 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 char * IRCPROTONAME; extern char * ALTIRCPROTONAME; static BOOL bPopUpService = FALSE; void InitPopUps() { if (ServiceExists(MS_POPUP_ADDPOPUPEX)) { bPopUpService = TRUE; } } static const UINT IRCPopupsControls[] = {IDC_POPUP_ERROR,IDC_POPUP_NOUSER,IDC_POPUP_WHOIS,IDC_PREVIEW,IDC_POPUP_LOG0_TIMEOUT,IDC_POPUP_LOG1_TIMEOUT,IDC_POPUP_LOG2_TIMEOUT,IDC_POPUP_LOG3_TIMEOUT}; static const UINT IRCPopupColorControls[] = {IDC_POPUP_LOG0_TEXTCOLOR,IDC_POPUP_LOG1_TEXTCOLOR,IDC_POPUP_LOG2_TEXTCOLOR,IDC_POPUP_LOG3_TEXTCOLOR, IDC_POPUP_LOG0_BACKCOLOR,IDC_POPUP_LOG1_BACKCOLOR,IDC_POPUP_LOG2_BACKCOLOR,IDC_POPUP_LOG3_BACKCOLOR}; static BOOL CALLBACK DlgProcIRCPopupOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { BYTE bEnabled; switch (msg) { case WM_INITDIALOG: { TranslateDialogDefault(hwndDlg); CheckDlgButton(hwndDlg,IDC_POPUPS_ENABLED, ((prefs->PopupsEnabled) ? (BST_CHECKED) : (BST_UNCHECKED))); CheckDlgButton(hwndDlg,IDC_POPUP_ERROR, ((prefs->PopupsErrors) ? (BST_CHECKED) : (BST_UNCHECKED))); CheckDlgButton(hwndDlg,IDC_POPUP_WHOIS, ((prefs->PopupWhois) ? (BST_CHECKED) : (BST_UNCHECKED))); CheckDlgButton(hwndDlg,IDC_POPUP_NOUSER, ((prefs->PopupsWhoisNoUser) ? (BST_CHECKED) : (BST_UNCHECKED))); SendDlgItemMessage(hwndDlg, IDC_POPUP_LOG0_TEXTCOLOR, CPM_SETCOLOUR, 0, IRCGetContactSettingDword(NULL,"Popups0TextColor",DEFAULT_LOG0_TEXT_COLORS)); SendDlgItemMessage(hwndDlg, IDC_POPUP_LOG0_BACKCOLOR, CPM_SETCOLOUR, 0, IRCGetContactSettingDword(NULL,"Popups0BackColor",DEFAULT_LOG0_BACK_COLORS)); SetDlgItemInt(hwndDlg, IDC_POPUP_LOG0_TIMEOUT, IRCGetContactSettingDword(NULL,"Popups0Timeout",DEFAULT_LOG0_TIMEOUT),FALSE); SendDlgItemMessage(hwndDlg, IDC_POPUP_LOG1_TEXTCOLOR, CPM_SETCOLOUR, 0, IRCGetContactSettingDword(NULL,"Popups1TextColor",DEFAULT_LOG1_TEXT_COLORS)); SendDlgItemMessage(hwndDlg, IDC_POPUP_LOG1_BACKCOLOR, CPM_SETCOLOUR, 0, IRCGetContactSettingDword(NULL,"Popups1BackColor",DEFAULT_LOG1_BACK_COLORS)); SetDlgItemInt(hwndDlg, IDC_POPUP_LOG1_TIMEOUT, IRCGetContactSettingDword(NULL,"Popups1Timeout",DEFAULT_LOG1_TIMEOUT),FALSE); SendDlgItemMessage(hwndDlg, IDC_POPUP_LOG2_TEXTCOLOR, CPM_SETCOLOUR, 0, IRCGetContactSettingDword(NULL,"Popups2TextColor",DEFAULT_LOG2_TEXT_COLORS)); SendDlgItemMessage(hwndDlg, IDC_POPUP_LOG2_BACKCOLOR, CPM_SETCOLOUR, 0, IRCGetContactSettingDword(NULL,"Popups2BackColor",DEFAULT_LOG2_BACK_COLORS)); SetDlgItemInt(hwndDlg, IDC_POPUP_LOG2_TIMEOUT, IRCGetContactSettingDword(NULL,"Popups2Timeout",DEFAULT_LOG2_TIMEOUT),FALSE); SendDlgItemMessage(hwndDlg, IDC_POPUP_LOG3_TEXTCOLOR, CPM_SETCOLOUR, 0, IRCGetContactSettingDword(NULL,"Popups3TextColor",DEFAULT_LOG3_TEXT_COLORS)); SendDlgItemMessage(hwndDlg, IDC_POPUP_LOG3_BACKCOLOR, CPM_SETCOLOUR, 0, IRCGetContactSettingDword(NULL,"Popups3BackColor",DEFAULT_LOG3_BACK_COLORS)); SetDlgItemInt(hwndDlg, IDC_POPUP_LOG3_TIMEOUT, IRCGetContactSettingDword(NULL,"Popups3Timeout",DEFAULT_LOG3_TIMEOUT),FALSE); bEnabled = IRCGetContactSettingByte(NULL,"PopupsEnabled",DEFAULT_POPUPS_ENABLED); CheckDlgButton(hwndDlg, IDC_POPUPS_ENABLED, bEnabled); IRC_EnableMultipleControls(hwndDlg, IRCPopupsControls, sizeof(IRCPopupsControls)/sizeof(IRCPopupsControls[0]), bEnabled); IRC_EnableMultipleControls(hwndDlg, IRCPopupColorControls, sizeof(IRCPopupColorControls)/sizeof(IRCPopupColorControls[0]), bEnabled); } break; case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_PREVIEW: { ShowPopUpMsg(NULL, "Popup Title", "Sample Note", LOG_NOTE); ShowPopUpMsg(NULL, "Popup Title", "Sample Warning", LOG_WARNING); ShowPopUpMsg(NULL, "Popup Title", "Sample Error", LOG_ERROR); // ShowPopUpMsg(NULL, "Popup Title", "Sample Fatal", LOG_FATAL); return TRUE; } break; case IDC_POPUPS_ENABLED: { bEnabled = IsDlgButtonChecked(hwndDlg,IDC_POPUPS_ENABLED); IRC_EnableMultipleControls(hwndDlg, IRCPopupsControls, sizeof(IRCPopupsControls)/sizeof(IRCPopupsControls[0]), bEnabled); IRC_EnableMultipleControls(hwndDlg, IRCPopupColorControls, sizeof(IRCPopupColorControls)/sizeof(IRCPopupColorControls[0]), bEnabled & IsDlgButtonChecked(hwndDlg,IDC_POPUPS_ENABLED)); } break; } SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; } case WM_NOTIFY: { switch(((LPNMHDR)lParam)->idFrom) { case 0: switch (((LPNMHDR)lParam)->code) { case PSN_APPLY: { prefs->PopupsEnabled = IsDlgButtonChecked(hwndDlg,IDC_POPUPS_ENABLED)== BST_CHECKED; DBWriteContactSettingByte(NULL,IRCPROTONAME,"PopupsEnabled",prefs->PopupsEnabled); prefs->PopupsErrors = IsDlgButtonChecked(hwndDlg,IDC_POPUP_ERROR)== BST_CHECKED; DBWriteContactSettingByte(NULL,IRCPROTONAME,"PopupsErrors",prefs->PopupsErrors); prefs->PopupWhois = IsDlgButtonChecked(hwndDlg,IDC_POPUP_WHOIS)== BST_CHECKED; DBWriteContactSettingByte(NULL,IRCPROTONAME,"PopupWhois",prefs->PopupWhois); prefs->PopupsWhoisNoUser = IsDlgButtonChecked(hwndDlg,IDC_POPUP_NOUSER)== BST_CHECKED; DBWriteContactSettingByte(NULL,IRCPROTONAME,"PopupsWhoisNoUser",prefs->PopupsWhoisNoUser); IRCWriteContactSettingDword(NULL,"Popups0TextColor",SendDlgItemMessage(hwndDlg,IDC_POPUP_LOG0_TEXTCOLOR,CPM_GETCOLOUR,0,0)); IRCWriteContactSettingDword(NULL,"Popups0BackColor",SendDlgItemMessage(hwndDlg,IDC_POPUP_LOG0_BACKCOLOR,CPM_GETCOLOUR,0,0)); IRCWriteContactSettingDword(NULL,"Popups0Timeout",GetDlgItemInt(hwndDlg, IDC_POPUP_LOG0_TIMEOUT, NULL, FALSE)); IRCWriteContactSettingDword(NULL,"Popups1TextColor",SendDlgItemMessage(hwndDlg,IDC_POPUP_LOG1_TEXTCOLOR,CPM_GETCOLOUR,0,0)); IRCWriteContactSettingDword(NULL,"Popups1BackColor",SendDlgItemMessage(hwndDlg,IDC_POPUP_LOG1_BACKCOLOR,CPM_GETCOLOUR,0,0)); IRCWriteContactSettingDword(NULL,"Popups1Timeout",GetDlgItemInt(hwndDlg, IDC_POPUP_LOG1_TIMEOUT, NULL, FALSE)); IRCWriteContactSettingDword(NULL,"Popups2TextColor",SendDlgItemMessage(hwndDlg,IDC_POPUP_LOG2_TEXTCOLOR,CPM_GETCOLOUR,0,0)); IRCWriteContactSettingDword(NULL,"Popups2BackColor",SendDlgItemMessage(hwndDlg,IDC_POPUP_LOG2_BACKCOLOR,CPM_GETCOLOUR,0,0)); IRCWriteContactSettingDword(NULL,"Popups2Timeout",GetDlgItemInt(hwndDlg, IDC_POPUP_LOG2_TIMEOUT, NULL, FALSE)); IRCWriteContactSettingDword(NULL,"Popups3TextColor",SendDlgItemMessage(hwndDlg,IDC_POPUP_LOG3_TEXTCOLOR,CPM_GETCOLOUR,0,0)); IRCWriteContactSettingDword(NULL,"Popups3BackColor",SendDlgItemMessage(hwndDlg,IDC_POPUP_LOG3_BACKCOLOR,CPM_GETCOLOUR,0,0)); IRCWriteContactSettingDword(NULL,"Popups3Timeout",GetDlgItemInt(hwndDlg, IDC_POPUP_LOG3_TIMEOUT, NULL, FALSE)); return TRUE; } } } }break; default:break; } return FALSE; } void InitPopupOpts(WPARAM wParam) { OPTIONSDIALOGPAGE odp = { 0 }; if (bPopUpService) { /* odp.cbSize = sizeof(odp); odp.position = 100000000; odp.hInstance = g_hInstance; odp.pszTemplate = MAKEINTRESOURCE(IDD_OPT_POPUPS); odp.groupPosition = 900000000; odp.pfnDlgProc = DlgProcIRCPopupOpts; odp.flags = ODPF_BOLDGROUPS; odp.nIDBottomSimpleControl = 0; AddOptionsPageUtf(&odp, wParam, "Popups", ALTIRCPROTONAME); */ odp.cbSize = sizeof(odp); odp.hInstance = g_hInstance; #ifdef _UNICODE odp.pszTemplate = (char *)MAKEINTRESOURCE(IDD_PREFS_POPUPS); #else odp.pszTemplate = MAKEINTRESOURCE(IDD_PREFS_POPUPS); #endif odp.pszTitle = ALTIRCPROTONAME; odp.pszGroup = Translate("Popups"); odp.flags=ODPF_BOLDGROUPS; odp.pfnDlgProc = DlgProcIRCPopupOpts; CallService(MS_OPT_ADDPAGE,wParam,(LPARAM)&odp); } } int ShowPopUpMsg(HANDLE hContact, const char* szTitle, const char* szMsg, BYTE bType) { if (bPopUpService && IRCGetContactSettingByte(NULL, "PopupsEnabled", DEFAULT_POPUPS_ENABLED)) { POPUPDATAEX ppd = {0}; POPUPDATAW ppdw = {0}; LPCTSTR rsIcon; HINSTANCE hIcons = NULL; char szPrefix[32], szSetting[32]; strcpy(szPrefix, "Popups"); ppd.iSeconds = 0; hIcons = g_hInstance; switch(bType) { case LOG_NOTE: rsIcon = MAKEINTRESOURCE(IDI_ICON_INFORMATION); ppd.colorBack = DEFAULT_LOG0_BACK_COLORS; ppd.colorText = DEFAULT_LOG0_TEXT_COLORS; strcat(szPrefix, "0"); break; case LOG_WARNING: rsIcon = MAKEINTRESOURCE(IDI_ICON_WARNING); ppd.colorBack = DEFAULT_LOG1_BACK_COLORS; ppd.colorText = DEFAULT_LOG1_TEXT_COLORS; strcat(szPrefix, "1"); break; case LOG_ERROR: rsIcon = MAKEINTRESOURCE(IDI_ICON_ERROR); ppd.colorBack = DEFAULT_LOG2_BACK_COLORS; ppd.colorText = DEFAULT_LOG2_TEXT_COLORS; strcat(szPrefix, "2"); break; case LOG_FATAL: rsIcon = MAKEINTRESOURCE(IDI_ICON_FATAL); ppd.colorBack = DEFAULT_LOG3_BACK_COLORS; ppd.colorText = DEFAULT_LOG3_TEXT_COLORS; strcat(szPrefix, "3"); break; default: return -1; } ppd.lchIcon = (HICON)LoadImage(hIcons, rsIcon, IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED); strcpy(szSetting, szPrefix); strcat(szSetting, "TextColor"); ppd.colorText = IRCGetContactSettingDword(NULL, szSetting, ppd.colorText); strcpy(szSetting, szPrefix); strcat(szSetting, "BackColor"); ppd.colorBack = IRCGetContactSettingDword(NULL, szSetting, ppd.colorBack); strcpy(szSetting, szPrefix); strcat(szSetting, "Timeout"); ppd.iSeconds = IRCGetContactSettingDword(NULL, szSetting, ppd.iSeconds); if (ServiceExists(MS_POPUP_ADDPOPUPW)) { // call unicode popup module wchar_t *tmp; char str[MAX_SECONDLINE]; tmp = make_unicode_string((const unsigned char*)IRCTranslateUtfStatic(szTitle, str)); memmove(ppdw.lpwzContactName, tmp, wcslen(tmp)*sizeof(wchar_t)); SAFE_FREE((void **)&tmp); tmp = make_unicode_string((const unsigned char*)IRCTranslateUtfStatic(szMsg, str)); memmove(ppdw.lpwzText, tmp, wcslen(tmp)*sizeof(wchar_t)); SAFE_FREE((void **)&tmp); ppdw.lchContact = hContact; ppdw.lchIcon = ppd.lchIcon; ppdw.colorBack = ppd.colorBack; ppdw.colorText = ppd.colorText; ppdw.PluginWindowProc = NULL; ppdw.PluginData = NULL; ppdw.iSeconds = ppd.iSeconds; return CallService(MS_POPUP_ADDPOPUPW, (WPARAM)&ppdw, 0); } else { char str[MAX_SECONDLINE]; utf8_decode_static(IRCTranslateUtfStatic(szTitle, str), ppd.lpzContactName, MAX_CONTACTNAME); utf8_decode_static(IRCTranslateUtfStatic(szMsg, str), ppd.lpzText, MAX_SECONDLINE); ppd.lchContact = hContact; ppd.PluginWindowProc = NULL; ppd.PluginData = NULL; return CallService(MS_POPUP_ADDPOPUPEX, (WPARAM)&ppd, 0); } } return -1; // Failure }