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/popups.cpp | 274 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 274 insertions(+) create mode 100644 irc_mod/popups.cpp (limited to 'irc_mod/popups.cpp') diff --git a/irc_mod/popups.cpp b/irc_mod/popups.cpp new file mode 100644 index 0000000..9d3966b --- /dev/null +++ b/irc_mod/popups.cpp @@ -0,0 +1,274 @@ +/* +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 +} \ No newline at end of file -- cgit v1.2.3