From f04d64869f3b1de54fb343f28f955584780001b8 Mon Sep 17 00:00:00 2001 From: mataes2007 Date: Sat, 26 Nov 2011 15:41:10 +0000 Subject: Project folders rename part 3 git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@215 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- Popup/Deprecated/notify_imp.cpp | 296 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 296 insertions(+) create mode 100644 Popup/Deprecated/notify_imp.cpp (limited to 'Popup/Deprecated/notify_imp.cpp') diff --git a/Popup/Deprecated/notify_imp.cpp b/Popup/Deprecated/notify_imp.cpp new file mode 100644 index 0000000..071fb5d --- /dev/null +++ b/Popup/Deprecated/notify_imp.cpp @@ -0,0 +1,296 @@ +/* +Popup Plus plugin for Miranda IM + +Copyright © 2002 Luca Santarelli, + © 2004-2007 Victor Pavlychko + © 2010 MPK + © 2010 Merlin_de + +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 "headers.h" + +static HANDLE hhkShow=0, hhkUpdate=0, hhkRemove=0; + +//static void PopupThread(void *arg); +static INT_PTR Popup2Show(WPARAM wParam, LPARAM lParam); +static INT_PTR Popup2Update(WPARAM wParam, LPARAM lParam); +static INT_PTR Popup2Remove(WPARAM wParam, LPARAM lParam); +static INT_PTR svcPopup2DefaultActions(WPARAM wParam, LPARAM lParam); +static INT_PTR __stdcall PopupNotifyWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); + +void LoadNotifyImp() +{ + hhkShow = HookEvent(ME_NOTIFY_SHOW, (MIRANDAHOOK)Popup2Show); + hhkUpdate = HookEvent(ME_NOTIFY_UPDATE, (MIRANDAHOOK)Popup2Update); + hhkRemove = HookEvent(ME_NOTIFY_REMOVE, (MIRANDAHOOK)Popup2Remove); + + CreateServiceFunction("Popup2/DefaultActions", svcPopup2DefaultActions); + + CreateServiceFunction(MS_POPUP2_SHOW, Popup2Show); + CreateServiceFunction(MS_POPUP2_UPDATE, Popup2Update); + CreateServiceFunction(MS_POPUP2_REMOVE, Popup2Remove); +} + +void UnloadNotifyImp() +{ + UnhookEvent(hhkShow); + UnhookEvent(hhkUpdate); + UnhookEvent(hhkRemove); +} + +static INT_PTR svcPopup2DefaultActions(WPARAM wParam, LPARAM lParam) +{ + HWND hwnd = (HWND)MNotifyGetDWord((HANDLE)lParam, "Popup2/hwnd", (DWORD)NULL); + if (!hwnd) return 0; + + HANDLE hNotify = (HANDLE)PUGetPluginData(hwnd); + if (!hNotify || (hNotify == INVALID_HANDLE_VALUE)) return 0; + + switch (wParam) + { + case 0: + { // send message + if (HANDLE hContact = (HANDLE)MNotifyGetDWord(hNotify, NFOPT_CONTACT, 0)) + CallServiceSync(MS_MSG_SENDMESSAGE, (WPARAM)hContact, 0); + SendMessage(hwnd, UM_DESTROYPOPUP, 0, 0); + break; + } + case 1: + { // dismiss popup + SendMessage(hwnd, UM_DESTROYPOPUP, 0, 0); + break; + } + } + return 0; +} + +static INT_PTR __stdcall PopupNotifyWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + HANDLE hNotify = (HANDLE)PUGetPluginData(hwnd); + + if (!hNotify || (hNotify == INVALID_HANDLE_VALUE)) + return DefWindowProc(hwnd, msg, wParam, lParam); + + switch (msg) + { + case UM_INITPOPUP: + { + MNotifyAddRef(hNotify); + MNotifySetDWord(hNotify, "Popup2/hwnd", (DWORD)hwnd); + break; + } + case UM_FREEPLUGINDATA: + { + int result = 0; + if (WNDPROC PluginWndProc = (WNDPROC)MNotifyGetDWord(hNotify, NFOPT_POPUP2_WNDPROC, NULL)) + result = PluginWndProc(hwnd, msg, wParam, lParam); + result = DefWindowProc(hwnd, msg, wParam, lParam); + + MNotifySetDWord(hNotify, "Popup2/hwnd", (DWORD)NULL); + MNotifyRelease(hNotify); + + return result; + } + + case WM_LBUTTONDOWN: + { + const char *service = MNotifyGetString(hNotify, NFOPT_POPUP2_LCLICKSVC, "Popup2/DefaultActions"); + DWORD cookie = MNotifyGetDWord(hNotify, NFOPT_POPUP2_LCLICKCOOKIE, 0); + CallService(service, cookie, (LPARAM)hNotify); + break; + } + case WM_RBUTTONDOWN: + { + const char *service = MNotifyGetString(hNotify, NFOPT_POPUP2_LCLICKSVC, "Popup2/DefaultActions"); + DWORD cookie = MNotifyGetDWord(hNotify, NFOPT_POPUP2_LCLICKCOOKIE, 1); + CallService(service, cookie, (LPARAM)hNotify); + break; + } + } + + if (WNDPROC PluginWndProc = (WNDPROC)MNotifyGetDWord(hNotify, NFOPT_POPUP2_WNDPROC, NULL)) + return PluginWndProc(hwnd, msg, wParam, lParam); + + return DefWindowProc(hwnd, msg, wParam, lParam); +} + +static INT_PTR Popup2Show(WPARAM wParam, LPARAM lParam) +{ + if (!gbPopupLoaded) return -1; + + HANDLE hNotify = (HANDLE)lParam; + if (!hNotify) return -1; + + POPUPDATA2 ppd2 = {0}; + ppd2.cbSize = sizeof(ppd2); + ppd2.flags = 0; + ppd2.lchContact = (HANDLE)MNotifyGetDWord(hNotify, NFOPT_CONTACT, NULL);; + ppd2.lchEvent = (HANDLE)MNotifyGetDWord(hNotify, NFOPT_CONTACT, NULL); + ppd2.lchIcon = (HICON)MNotifyGetDWord(hNotify, NFOPT_ICON, (DWORD)LoadSkinnedIcon(SKINICON_OTHER_MIRANDA)); + + if (PopUpOptions.UseWinColors) + { + ppd2.colorBack = GetSysColor(COLOR_BTNFACE); + ppd2.colorText = GetSysColor(COLOR_WINDOWTEXT); + } else + { + ppd2.colorBack = fonts.clBack; + ppd2.colorText = fonts.clText; + } + ppd2.colorBack = (COLORREF)MNotifyGetDWord(hNotify, NFOPT_POPUP2_BACKCOLOR, MNotifyGetDWord(hNotify, NFOPT_BACKCOLOR, ppd2.colorBack)); + ppd2.colorText = (COLORREF)MNotifyGetDWord(hNotify, NFOPT_POPUP2_TEXTCOLOR, MNotifyGetDWord(hNotify, NFOPT_TEXTCOLOR, ppd2.colorText)); + ppd2.PluginWindowProc = (WNDPROC)MNotifyGetDWord(hNotify, NFOPT_POPUP2_WNDPROC, NULL); + ppd2.PluginData = (LPVOID)MNotifyGetDWord(hNotify, NFOPT_POPUP2_PLUGINDATA, NULL); + ppd2.iSeconds = (int)MNotifyGetDWord(hNotify, NFOPT_POPUP2_TIMEOUT, MNotifyGetDWord(hNotify, NFOPT_TIMEOUT, PopUpOptions.Seconds)); + + WCHAR *lpwzTitle, *lpwzText; + char *lpzTitle, *lpzText; + lpwzTitle = (WCHAR *)MNotifyGetWString(hNotify, NFOPT_TITLEW, NULL); + lpzTitle = (char *)MNotifyGetString(hNotify, NFOPT_TITLE, NULL); + lpwzText = (WCHAR *)MNotifyGetWString(hNotify, NFOPT_TEXTW, NULL); + lpzText = (char *)MNotifyGetString(hNotify, NFOPT_TEXT, NULL); + if (lpwzTitle && lpwzText) + { + ppd2.lpwzTitle = lpwzTitle; + ppd2.lpwzText = lpwzText; + ppd2.flags |= PU2_UNICODE; + } else + if (lpzTitle && lpzText) + { + ppd2.lpzTitle = lpzTitle; + ppd2.lpzText = lpzText; + ppd2.flags |= PU2_ANSI; + } else + { + ppd2.lpzText = ppd2.lpzTitle = Translate(""); + ppd2.flags |= PU2_ANSI; + } + + DWORD dwStatusMode = MNotifyGetDWord(hNotify, NFOPT_POPUP2_STATUSMODE, 0x3ff); + + DWORD dwFlags = APF_RETURN_HWND; + switch (PopUpOptions.CurrentStatus) + { + case ID_STATUS_OFFLINE: if (!(dwStatusMode&0x001)) dwFlags |= APF_NO_POPUP; break; + case ID_STATUS_ONLINE: if (!(dwStatusMode&0x002)) dwFlags |= APF_NO_POPUP; break; + case ID_STATUS_AWAY: if (!(dwStatusMode&0x004)) dwFlags |= APF_NO_POPUP; break; + case ID_STATUS_DND: if (!(dwStatusMode&0x008)) dwFlags |= APF_NO_POPUP; break; + case ID_STATUS_NA: if (!(dwStatusMode&0x010)) dwFlags |= APF_NO_POPUP; break; + case ID_STATUS_OCCUPIED: if (!(dwStatusMode&0x020)) dwFlags |= APF_NO_POPUP; break; + case ID_STATUS_FREECHAT: if (!(dwStatusMode&0x040)) dwFlags |= APF_NO_POPUP; break; + case ID_STATUS_INVISIBLE: if (!(dwStatusMode&0x080)) dwFlags |= APF_NO_POPUP; break; + case ID_STATUS_ONTHEPHONE: if (!(dwStatusMode&0x100)) dwFlags |= APF_NO_POPUP; break; + case ID_STATUS_OUTTOLUNCH: if (!(dwStatusMode&0x200)) dwFlags |= APF_NO_POPUP; break; + } + + ppd2.PluginData = hNotify; + ppd2.PluginWindowProc = (WNDPROC)PopupNotifyWndProc; + + return PopUp_AddPopUp2((WPARAM)&ppd2, dwFlags); +} + +static INT_PTR Popup2Update(WPARAM wParam, LPARAM lParam) +{ + if (!gbPopupLoaded) return -1; + + HANDLE hNotify = (HANDLE)lParam; + if (!hNotify) return -1; + + HWND hwnd = (HWND)MNotifyGetDWord(hNotify, "Popup2/hwnd", 0); + if (!hwnd) return -1; + + POPUPDATA2 ppd2 = {0}; + ppd2.cbSize = sizeof(ppd2); + ppd2.flags = 0; + ppd2.lchContact = (HANDLE)MNotifyGetDWord(hNotify, NFOPT_CONTACT, NULL);; + ppd2.lchEvent = (HANDLE)MNotifyGetDWord(hNotify, NFOPT_CONTACT, NULL); + ppd2.lchIcon = (HICON)MNotifyGetDWord(hNotify, NFOPT_ICON, (DWORD)LoadSkinnedIcon(SKINICON_OTHER_MIRANDA)); + + if (PopUpOptions.UseWinColors) + { + ppd2.colorBack = GetSysColor(COLOR_BTNFACE); + ppd2.colorText = GetSysColor(COLOR_WINDOWTEXT); + } else + { + ppd2.colorBack = fonts.clBack; + ppd2.colorText = fonts.clText; + } + ppd2.colorBack = (COLORREF)MNotifyGetDWord(hNotify, NFOPT_POPUP2_BACKCOLOR, MNotifyGetDWord(hNotify, NFOPT_BACKCOLOR, ppd2.colorBack)); + ppd2.colorText = (COLORREF)MNotifyGetDWord(hNotify, NFOPT_POPUP2_TEXTCOLOR, MNotifyGetDWord(hNotify, NFOPT_TEXTCOLOR, ppd2.colorText)); + ppd2.PluginWindowProc = (WNDPROC)MNotifyGetDWord(hNotify, NFOPT_POPUP2_WNDPROC, NULL); + ppd2.PluginData = (LPVOID)MNotifyGetDWord(hNotify, NFOPT_POPUP2_PLUGINDATA, NULL); + ppd2.iSeconds = (int)MNotifyGetDWord(hNotify, NFOPT_POPUP2_TIMEOUT, MNotifyGetDWord(hNotify, NFOPT_TIMEOUT, PopUpOptions.Seconds)); + + WCHAR *lpwzTitle, *lpwzText; + char *lpzTitle, *lpzText; + lpwzTitle = (WCHAR *)MNotifyGetWString(hNotify, NFOPT_TITLEW, NULL); + lpzTitle = (char *)MNotifyGetString(hNotify, NFOPT_TITLE, NULL); + lpwzText = (WCHAR *)MNotifyGetWString(hNotify, NFOPT_TEXTW, NULL); + lpzText = (char *)MNotifyGetString(hNotify, NFOPT_TEXT, NULL); + if (lpwzTitle && lpwzText) + { + ppd2.lpwzTitle = lpwzTitle; + ppd2.lpwzText = lpwzText; + ppd2.flags |= PU2_UNICODE; + } else + if (lpzTitle && lpzText) + { + ppd2.lpzTitle = lpzTitle; + ppd2.lpzText = lpzText; + ppd2.flags |= PU2_ANSI; + } else + { + ppd2.lpzText = ppd2.lpzTitle = Translate(""); + ppd2.flags |= PU2_ANSI; + } + + DWORD dwStatusMode = MNotifyGetDWord(hNotify, NFOPT_POPUP2_STATUSMODE, 0x3ff); + + DWORD dwFlags = 0; + switch (PopUpOptions.CurrentStatus) + { + case ID_STATUS_OFFLINE: if (!(dwStatusMode&0x001)) dwFlags |= APF_NO_POPUP; break; + case ID_STATUS_ONLINE: if (!(dwStatusMode&0x002)) dwFlags |= APF_NO_POPUP; break; + case ID_STATUS_AWAY: if (!(dwStatusMode&0x004)) dwFlags |= APF_NO_POPUP; break; + case ID_STATUS_DND: if (!(dwStatusMode&0x008)) dwFlags |= APF_NO_POPUP; break; + case ID_STATUS_NA: if (!(dwStatusMode&0x010)) dwFlags |= APF_NO_POPUP; break; + case ID_STATUS_OCCUPIED: if (!(dwStatusMode&0x020)) dwFlags |= APF_NO_POPUP; break; + case ID_STATUS_FREECHAT: if (!(dwStatusMode&0x040)) dwFlags |= APF_NO_POPUP; break; + case ID_STATUS_INVISIBLE: if (!(dwStatusMode&0x080)) dwFlags |= APF_NO_POPUP; break; + case ID_STATUS_ONTHEPHONE: if (!(dwStatusMode&0x100)) dwFlags |= APF_NO_POPUP; break; + case ID_STATUS_OUTTOLUNCH: if (!(dwStatusMode&0x200)) dwFlags |= APF_NO_POPUP; break; + } + + ppd2.PluginData = hNotify; + ppd2.PluginWindowProc = (WNDPROC)PopupNotifyWndProc; + + return PopUp_Change2((WPARAM)hwnd, (LPARAM)&ppd2); +} + +static INT_PTR Popup2Remove(WPARAM wParam, LPARAM lParam) +{ + if (!gbPopupLoaded) return -1; + + HANDLE hNotify = (HANDLE)lParam; + if (!hNotify) return -1; + + HWND hwnd = (HWND)MNotifyGetDWord(hNotify, "Popup2/hwnd", 0); + if (!hwnd) return -1; + + SendMessage(hwnd, UM_DESTROYPOPUP, 0, 0); + return 0; +} -- cgit v1.2.3