summaryrefslogtreecommitdiff
path: root/icqj_s7_sss_mod/icq_popups.c
diff options
context:
space:
mode:
Diffstat (limited to 'icqj_s7_sss_mod/icq_popups.c')
-rw-r--r--icqj_s7_sss_mod/icq_popups.c274
1 files changed, 274 insertions, 0 deletions
diff --git a/icqj_s7_sss_mod/icq_popups.c b/icqj_s7_sss_mod/icq_popups.c
new file mode 100644
index 0000000..ef5a20e
--- /dev/null
+++ b/icqj_s7_sss_mod/icq_popups.c
@@ -0,0 +1,274 @@
+// ---------------------------------------------------------------------------80
+// ICQ plugin for Miranda Instant Messenger
+// ________________________________________
+//
+// Copyright © 2000,2001 Richard Hughes, Roland Rabien, Tristan Van de Vreede
+// Copyright © 2001,2002 Jon Keating, Richard Hughes
+// Copyright © 2002,2003,2004 Martin Öberg, Sam Kothari, Robert Rainwater
+// Copyright © 2004,2005,2006,2007 Joe Kucera
+// Copyright © 2006,2007 [sss], chaos.persei, [sin], Faith Healer, Theif, nullbie
+//
+// 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.
+//
+// -----------------------------------------------------------------------------
+//
+// File name : $Source$
+// Revision : $Revision: 50 $
+// Last change on : $Date: 2007-08-28 02:57:00 +0300 (Вт, 28 авг 2007) $
+// Last change by : $Author: sss123next $
+//
+// DESCRIPTION:
+//
+// PopUp Plugin stuff
+//
+// -----------------------------------------------------------------------------
+
+#include "icqoscar.h"
+
+
+static BOOL CALLBACK DlgProcIcqPopupOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
+
+
+
+static void LoadDBCheckState(HWND hwndDlg, int idCtrl, const char* szSetting, BYTE bDef)
+{
+ CheckDlgButton(hwndDlg, idCtrl, ICQGetContactSettingByte(NULL, szSetting, bDef));
+}
+
+static void StoreDBCheckState(HWND hwndDlg, int idCtrl, const char* szSetting)
+{
+ ICQWriteContactSettingByte(NULL, szSetting, (BYTE)IsDlgButtonChecked(hwndDlg, idCtrl));
+}
+
+
+
+
+static int CALLBACK PopupDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ switch(message) {
+ case WM_COMMAND:
+ if (HIWORD(wParam) == STN_CLICKED) {
+ // HANDLE hContact = PUGetContact(hWnd);
+ // if (hContact)
+ // NotifyEventHooks(hHookSendMessage, (WPARAM)hContact, 0);
+ PUDeletePopUp(hWnd);
+ return 1;
+ }
+ break;
+ case WM_CONTEXTMENU:
+ PUDeletePopUp(hWnd);
+ return 1;
+ case UM_INITPOPUP:
+ WindowList_Add(hPopUpsList,hWnd,(HANDLE)CallService(MS_POPUP_GETCONTACT,(WPARAM)hWnd,0));
+ return 1;
+ case UM_FREEPLUGINDATA:
+ WindowList_Remove(hPopUpsList,hWnd);
+ return 1;
+ default:
+ break;
+ }
+ return DefWindowProc(hWnd, message, wParam, lParam);
+}
+
+
+
+int ShowPopUpMsg(HANDLE hContact, DWORD dwUin, const char* szTitle, const char* szMsg, BYTE bType)
+{
+ if (bPopUpService && bPopUpsEnabled)
+ {
+ POPUPDATAEX ppd = {0};
+ POPUPDATAW ppdw = {0};
+ LPCTSTR rsIcon;
+ HINSTANCE hIcons = NULL;
+ HWND hPopUpWnd = NULL;
+ char szPrefix[64], szSetting[32], szText [64];
+
+ strcpy(szPrefix, "Popups");
+ ppd.iSeconds = 0;
+
+ switch(bType)
+ {
+ case LOG_NOTE:
+ rsIcon = MAKEINTRESOURCE(IDI_INFORMATION);
+ ppd.colorBack = RGB(0,0,0);
+ ppd.colorText = RGB(255,255,255);
+ strcat(szPrefix, "0");
+ break;
+
+ case LOG_WARNING:
+ rsIcon = MAKEINTRESOURCE(IDI_WARNING);
+ ppd.colorBack = RGB(0,0,0);
+ ppd.colorText = RGB(255,255,255);
+ strcat(szPrefix, "1");
+ break;
+
+ case LOG_ERROR:
+ rsIcon = MAKEINTRESOURCE(IDI_ERROR);
+ ppd.colorBack = RGB(0,0,0);
+ ppd.colorText = RGB(255,255,255);
+ strcat(szPrefix, "2");
+ break;
+
+ case LOG_FATAL:
+ rsIcon = MAKEINTRESOURCE(IDI_ERROR);
+ ppd.colorBack = RGB(0,0,0);
+ ppd.colorText = RGB(255,255,255);
+ strcat(szPrefix, "3");
+ break;
+
+ case POPTYPE_SPAM:
+ rsIcon = MAKEINTRESOURCE(IDI_WARNING);
+ ppd.colorBack = RGB(0,0,0);
+ ppd.colorText = RGB(255,255,255);
+ strcat(szPrefix, "Spam");
+ break;
+
+ case POPTYPE_UNKNOWN:
+ rsIcon = MAKEINTRESOURCE(IDI_WARNING);
+ ppd.colorBack = RGB(0,0,0);
+ ppd.colorText = RGB(255,255,255);
+ strcat(szPrefix, "Unknown");
+ break;
+
+ case POPTYPE_VIS:
+ rsIcon = MAKEINTRESOURCE(IDI_INFORMATION);
+ ppd.colorBack = RGB(0,0,0);
+ ppd.colorText = RGB(255,255,255);
+ strcat(szPrefix, "Vis");
+ break;
+
+
+ case POPTYPE_FOUND:
+ hIcons = hInst;
+ rsIcon = MAKEINTRESOURCE(IDI_HIDDEN);
+ ppd.colorBack = RGB(0,0,0);
+ ppd.colorText = RGB(255,255,255);
+ strcat(szPrefix, "Found");
+ break;
+
+ case POPTYPE_SCAN:
+ hIcons = hInst;
+ rsIcon = gbScan?MAKEINTRESOURCE(IDI_START):MAKEINTRESOURCE(IDI_STOP);
+ ppd.colorBack = RGB(0,0,0);
+ ppd.colorText = RGB(255,255,255);
+ strcat(szPrefix, "Finished");
+ break;
+ case POPTYPE_CLIENT_CHANGE:
+ rsIcon = MAKEINTRESOURCE(IDI_INFORMATION);
+ ppd.colorBack = RGB(0,0,0);
+ ppd.colorText = RGB(255,255,255);
+ strcat(szPrefix, "ClientChange");
+ break;
+ case POPTYPE_INFO_REQUEST:
+ rsIcon = MAKEINTRESOURCE(IDI_INFORMATION);
+ ppd.colorBack = RGB(0,0,0);
+ ppd.colorText = RGB(255,255,255);
+ strcat(szPrefix, "InfoRequest");
+ break;
+ case POPTYPE_IGNORE_CHECK:
+ rsIcon = MAKEINTRESOURCE(IDI_INFORMATION);
+ ppd.colorBack = RGB(0,0,0);
+ ppd.colorText = RGB(255,255,255);
+ strcat(szPrefix, "IgnoreCheck");
+ break;
+ case POPTYPE_SELFREMOVE:
+ rsIcon = MAKEINTRESOURCE(IDI_INFORMATION);
+ ppd.colorBack = RGB(0,0,0);
+ ppd.colorText = RGB(255,255,255);
+ strcat(szPrefix, "RemoveHimself");
+ break;
+ case POPTYPE_AUTH:
+ rsIcon = MAKEINTRESOURCE(IDI_INFORMATION);
+ ppd.colorBack = RGB(0,0,0);
+ ppd.colorText = RGB(255,255,255);
+ strcat(szPrefix, "Auth");
+ break;
+ case POPTYPE_XUPDATER:
+ rsIcon = MAKEINTRESOURCE(IDI_INFORMATION);
+ ppd.colorBack = RGB(0,0,0);
+ ppd.colorText = RGB(255,255,255);
+ strcat(szPrefix, "XUpdater");
+ break;
+ default:
+ return -1;
+ }
+ if (!ICQGetContactSettingByte(NULL, "PopupsSysIcons", 1))
+ {
+ hIcons = hInst;
+ rsIcon = MAKEINTRESOURCE(IDI_ICQ);
+ }
+ ppd.lchIcon = (HICON)LoadImage(hIcons, rsIcon, IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED);
+ if (ICQGetContactSettingByte(NULL, "PopupsWinColors", 0))
+ {
+ ppd.colorText = GetSysColor(COLOR_WINDOWTEXT);
+ ppd.colorBack = GetSysColor(COLOR_WINDOW);
+ }
+ else
+ {
+ strcpy(szSetting, szPrefix);
+ strcat(szSetting, "TextColor");
+ ppd.colorText = ICQGetContactSettingDword(NULL, szSetting, ppd.colorText);
+ strcpy(szSetting, szPrefix);
+ strcat(szSetting, "BackColor");
+ ppd.colorBack = ICQGetContactSettingDword(NULL, szSetting, ppd.colorBack);
+ }
+ strcpy(szSetting, szPrefix);
+ strcat(szSetting, "Timeout");
+ ppd.iSeconds = ICQGetContactSettingDword(NULL, szSetting, ppd.iSeconds);
+
+ //by chaos.persei @ 9.12.2006 15:25
+ //bug - unhiding popups - fix
+ if (ppd.iSeconds == 0) ppd.iSeconds = 10;
+
+ hPopUpWnd = WindowList_Find(hPopUpsList,hContact);
+ if ((bType == POPTYPE_VIS) && hPopUpWnd)
+ return -1;
+ if(dwUin && bUinPopup)
+ mir_snprintf(szText, sizeof(szText), "%s, %s: (%u)", szTitle, ICQTranslateUtf("UIN"), dwUin);
+ else
+ strcpy(szText,szTitle);
+
+ if (gbUnicodeAPI && ServiceExists(MS_POPUP_ADDPOPUPW))
+ { // call unicode popup module - only on unicode OS otherwise it will not work properly :(
+ // due to Popup Plug bug in ADDPOPUPW implementation
+ char str[MAX_PATH];
+
+ make_unicode_string_static(ICQTranslateUtfStatic(szText, str, MAX_PATH), ppdw.lpwzContactName, MAX_CONTACTNAME);
+ make_unicode_string_static(ICQTranslateUtfStatic(szMsg, str, MAX_PATH), ppdw.lpwzText, MAX_SECONDLINE);
+ ppdw.lchContact = hContact;
+ ppdw.lchIcon = ppd.lchIcon;
+ ppdw.colorBack = ppd.colorBack;
+ ppdw.colorText = ppd.colorText;
+ ppdw.PluginWindowProc = (WNDPROC)PopupDlgProc;
+ ppdw.PluginData = NULL;
+ ppdw.iSeconds = ppd.iSeconds;
+
+ return CallService(MS_POPUP_ADDPOPUPW, (WPARAM)&ppdw, 0);
+ }
+ else
+ {
+ char str[MAX_PATH];
+
+ utf8_decode_static(ICQTranslateUtfStatic(szText, str, MAX_PATH), ppd.lpzContactName, MAX_CONTACTNAME);
+ utf8_decode_static(ICQTranslateUtfStatic(szMsg, str, MAX_PATH), ppd.lpzText, MAX_SECONDLINE);
+ ppd.lchContact = hContact;
+ ppd.PluginWindowProc = (WNDPROC)PopupDlgProc;
+ ppd.PluginData = NULL;
+
+ return CallService(MS_POPUP_ADDPOPUPEX, (WPARAM)&ppd, 0);
+ }
+ }
+ return -1; // Failure
+}