From b25fef05f6feb88edd6ddad6a27193db9257d2de Mon Sep 17 00:00:00 2001 From: Vadim Dashevskiy Date: Fri, 20 Jul 2012 12:16:27 +0000 Subject: MenuItemEx: changed folder structure git-svn-id: http://svn.miranda-ng.org/main/trunk@1078 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/MenuItemEx/docs/menuitemex-translation.txt | 55 + plugins/MenuItemEx/icons/Always Visible.ico | Bin 2038 -> 0 bytes plugins/MenuItemEx/icons/CopyID_overlay.ico | Bin 2550 -> 0 bytes plugins/MenuItemEx/icons/CopyMirVer.ico | Bin 2550 -> 0 bytes plugins/MenuItemEx/icons/Ignore_list.ico | Bin 2550 -> 0 bytes plugins/MenuItemEx/icons/Never Visible.ico | Bin 2038 -> 0 bytes plugins/MenuItemEx/icons/auth_added.ico | Bin 2550 -> 0 bytes plugins/MenuItemEx/icons/auth_ask.ico | Bin 2550 -> 0 bytes plugins/MenuItemEx/icons/change_proto.ico | Bin 2550 -> 0 bytes plugins/MenuItemEx/icons/copyip_overlay.ico | Bin 2550 -> 0 bytes plugins/MenuItemEx/icons/hide_from_list.ico | Bin 2550 -> 0 bytes plugins/MenuItemEx/icons/msg_status.ico | Bin 2550 -> 0 bytes plugins/MenuItemEx/icons/msg_xStatus.ico | Bin 2550 -> 0 bytes plugins/MenuItemEx/icons/recv_files.ico | Bin 2550 -> 0 bytes plugins/MenuItemEx/icons/salad.right.ico | Bin 2550 -> 0 bytes plugins/MenuItemEx/icons/show_in_list.ico | Bin 1150 -> 0 bytes plugins/MenuItemEx/images.cpp | 363 ----- plugins/MenuItemEx/images.h | 8 - plugins/MenuItemEx/main.cpp | 1386 -------------------- plugins/MenuItemEx/menuex.h | 73 -- plugins/MenuItemEx/menuex.rc | 156 --- plugins/MenuItemEx/menuex_10.vcxproj | 34 +- plugins/MenuItemEx/menuex_10.vcxproj.filters | 62 +- plugins/MenuItemEx/menuitemex-translation.txt | 55 - plugins/MenuItemEx/options.cpp | 136 -- plugins/MenuItemEx/res/Always Visible.ico | Bin 0 -> 2038 bytes plugins/MenuItemEx/res/CopyID_overlay.ico | Bin 0 -> 2550 bytes plugins/MenuItemEx/res/CopyMirVer.ico | Bin 0 -> 2550 bytes plugins/MenuItemEx/res/Ignore_list.ico | Bin 0 -> 2550 bytes plugins/MenuItemEx/res/Never Visible.ico | Bin 0 -> 2038 bytes plugins/MenuItemEx/res/auth_added.ico | Bin 0 -> 2550 bytes plugins/MenuItemEx/res/auth_ask.ico | Bin 0 -> 2550 bytes plugins/MenuItemEx/res/change_proto.ico | Bin 0 -> 2550 bytes plugins/MenuItemEx/res/copyip_overlay.ico | Bin 0 -> 2550 bytes plugins/MenuItemEx/res/hide_from_list.ico | Bin 0 -> 2550 bytes plugins/MenuItemEx/res/msg_status.ico | Bin 0 -> 2550 bytes plugins/MenuItemEx/res/msg_xStatus.ico | Bin 0 -> 2550 bytes plugins/MenuItemEx/res/recv_files.ico | Bin 0 -> 2550 bytes plugins/MenuItemEx/res/resource.rc | 162 +++ plugins/MenuItemEx/res/salad.right.ico | Bin 0 -> 2550 bytes plugins/MenuItemEx/res/show_in_list.ico | Bin 0 -> 1150 bytes plugins/MenuItemEx/res/version.rc | 43 + plugins/MenuItemEx/resource.h | 52 - plugins/MenuItemEx/resource.rc | 201 --- plugins/MenuItemEx/src/images.cpp | 363 +++++ plugins/MenuItemEx/src/images.h | 8 + plugins/MenuItemEx/src/main.cpp | 1386 ++++++++++++++++++++ plugins/MenuItemEx/src/menuex.h | 73 ++ plugins/MenuItemEx/src/options.cpp | 136 ++ plugins/MenuItemEx/src/resource.h | 52 + plugins/MenuItemEx/src/version.h | 13 + plugins/MenuItemEx/version.h | 23 - plugins/MenuItemEx/version.rc | 42 - 53 files changed, 2312 insertions(+), 2570 deletions(-) create mode 100644 plugins/MenuItemEx/docs/menuitemex-translation.txt delete mode 100644 plugins/MenuItemEx/icons/Always Visible.ico delete mode 100644 plugins/MenuItemEx/icons/CopyID_overlay.ico delete mode 100644 plugins/MenuItemEx/icons/CopyMirVer.ico delete mode 100644 plugins/MenuItemEx/icons/Ignore_list.ico delete mode 100644 plugins/MenuItemEx/icons/Never Visible.ico delete mode 100644 plugins/MenuItemEx/icons/auth_added.ico delete mode 100644 plugins/MenuItemEx/icons/auth_ask.ico delete mode 100644 plugins/MenuItemEx/icons/change_proto.ico delete mode 100644 plugins/MenuItemEx/icons/copyip_overlay.ico delete mode 100644 plugins/MenuItemEx/icons/hide_from_list.ico delete mode 100644 plugins/MenuItemEx/icons/msg_status.ico delete mode 100644 plugins/MenuItemEx/icons/msg_xStatus.ico delete mode 100644 plugins/MenuItemEx/icons/recv_files.ico delete mode 100644 plugins/MenuItemEx/icons/salad.right.ico delete mode 100644 plugins/MenuItemEx/icons/show_in_list.ico delete mode 100644 plugins/MenuItemEx/images.cpp delete mode 100644 plugins/MenuItemEx/images.h delete mode 100644 plugins/MenuItemEx/main.cpp delete mode 100644 plugins/MenuItemEx/menuex.h delete mode 100644 plugins/MenuItemEx/menuex.rc delete mode 100644 plugins/MenuItemEx/menuitemex-translation.txt delete mode 100644 plugins/MenuItemEx/options.cpp create mode 100644 plugins/MenuItemEx/res/Always Visible.ico create mode 100644 plugins/MenuItemEx/res/CopyID_overlay.ico create mode 100644 plugins/MenuItemEx/res/CopyMirVer.ico create mode 100644 plugins/MenuItemEx/res/Ignore_list.ico create mode 100644 plugins/MenuItemEx/res/Never Visible.ico create mode 100644 plugins/MenuItemEx/res/auth_added.ico create mode 100644 plugins/MenuItemEx/res/auth_ask.ico create mode 100644 plugins/MenuItemEx/res/change_proto.ico create mode 100644 plugins/MenuItemEx/res/copyip_overlay.ico create mode 100644 plugins/MenuItemEx/res/hide_from_list.ico create mode 100644 plugins/MenuItemEx/res/msg_status.ico create mode 100644 plugins/MenuItemEx/res/msg_xStatus.ico create mode 100644 plugins/MenuItemEx/res/recv_files.ico create mode 100644 plugins/MenuItemEx/res/resource.rc create mode 100644 plugins/MenuItemEx/res/salad.right.ico create mode 100644 plugins/MenuItemEx/res/show_in_list.ico create mode 100644 plugins/MenuItemEx/res/version.rc delete mode 100644 plugins/MenuItemEx/resource.h delete mode 100644 plugins/MenuItemEx/resource.rc create mode 100644 plugins/MenuItemEx/src/images.cpp create mode 100644 plugins/MenuItemEx/src/images.h create mode 100644 plugins/MenuItemEx/src/main.cpp create mode 100644 plugins/MenuItemEx/src/menuex.h create mode 100644 plugins/MenuItemEx/src/options.cpp create mode 100644 plugins/MenuItemEx/src/resource.h create mode 100644 plugins/MenuItemEx/src/version.h delete mode 100644 plugins/MenuItemEx/version.h delete mode 100644 plugins/MenuItemEx/version.rc (limited to 'plugins') diff --git a/plugins/MenuItemEx/docs/menuitemex-translation.txt b/plugins/MenuItemEx/docs/menuitemex-translation.txt new file mode 100644 index 0000000000..e894e19776 --- /dev/null +++ b/plugins/MenuItemEx/docs/menuitemex-translation.txt @@ -0,0 +1,55 @@ +; Common strings that belong to many files +;[&Cancel] +;[&Send] +;[* Use Ctrl+click to see popup with the copied text] +;[Add item name] +;[Add protocol name] +;[Browse Received Files] +;[Copy ID] +;[Copy IP] +;[Copy MirVer] +;[Copy Status Message] +;[Copy to Account (Ctrl+click for move to Account)] +;[Enter an authorization request] +;[Hide contact on 'Ignore all'] +;[Hide from list] +;[Ignore] +;[Request Authorization] +;[Send 'You were added'] +;[Show ID in menu item] +;[Show alpha icons] +;[Shown menu items] +;[Trim too long ID] +;[Visibility] + +; ../../plugins/MenuItemEx/main.cpp +;[Activity text] +;[Activity title] +;[All] +;[Always visible] +;[Authorization] +;[Copy to Account] +;[Do you want to send authorization request\nto new contact?] +;[Files] +;[Listening to] +;[Messages] +;[Miranda IM] +;[Never visible] +;[Open ignore settings] +;[Please authorize me to add you to my contact list.] +;[Request authorization] +;[Show in list] +;[Status message] +;[Typing Notify] +;[URL] +;[User Online] +;[XStatus message] +;[XStatus title] +;[You Were Added] + +; ../../plugins/MenuItemEx/options.cpp +;[Customize] + +; ../../plugins/MenuItemEx/resource.rc +;[Automatically refresh contact's details after they come online] +;[Other options] diff --git a/plugins/MenuItemEx/icons/Always Visible.ico b/plugins/MenuItemEx/icons/Always Visible.ico deleted file mode 100644 index 25c1a925ee..0000000000 Binary files a/plugins/MenuItemEx/icons/Always Visible.ico and /dev/null differ diff --git a/plugins/MenuItemEx/icons/CopyID_overlay.ico b/plugins/MenuItemEx/icons/CopyID_overlay.ico deleted file mode 100644 index 4c5bc0af9e..0000000000 Binary files a/plugins/MenuItemEx/icons/CopyID_overlay.ico and /dev/null differ diff --git a/plugins/MenuItemEx/icons/CopyMirVer.ico b/plugins/MenuItemEx/icons/CopyMirVer.ico deleted file mode 100644 index 9b7bc67cf9..0000000000 Binary files a/plugins/MenuItemEx/icons/CopyMirVer.ico and /dev/null differ diff --git a/plugins/MenuItemEx/icons/Ignore_list.ico b/plugins/MenuItemEx/icons/Ignore_list.ico deleted file mode 100644 index 5635149232..0000000000 Binary files a/plugins/MenuItemEx/icons/Ignore_list.ico and /dev/null differ diff --git a/plugins/MenuItemEx/icons/Never Visible.ico b/plugins/MenuItemEx/icons/Never Visible.ico deleted file mode 100644 index 131ae02580..0000000000 Binary files a/plugins/MenuItemEx/icons/Never Visible.ico and /dev/null differ diff --git a/plugins/MenuItemEx/icons/auth_added.ico b/plugins/MenuItemEx/icons/auth_added.ico deleted file mode 100644 index fa37e9357c..0000000000 Binary files a/plugins/MenuItemEx/icons/auth_added.ico and /dev/null differ diff --git a/plugins/MenuItemEx/icons/auth_ask.ico b/plugins/MenuItemEx/icons/auth_ask.ico deleted file mode 100644 index d8879d15bb..0000000000 Binary files a/plugins/MenuItemEx/icons/auth_ask.ico and /dev/null differ diff --git a/plugins/MenuItemEx/icons/change_proto.ico b/plugins/MenuItemEx/icons/change_proto.ico deleted file mode 100644 index 07c72f9287..0000000000 Binary files a/plugins/MenuItemEx/icons/change_proto.ico and /dev/null differ diff --git a/plugins/MenuItemEx/icons/copyip_overlay.ico b/plugins/MenuItemEx/icons/copyip_overlay.ico deleted file mode 100644 index 2823f13456..0000000000 Binary files a/plugins/MenuItemEx/icons/copyip_overlay.ico and /dev/null differ diff --git a/plugins/MenuItemEx/icons/hide_from_list.ico b/plugins/MenuItemEx/icons/hide_from_list.ico deleted file mode 100644 index 69fb9f91c4..0000000000 Binary files a/plugins/MenuItemEx/icons/hide_from_list.ico and /dev/null differ diff --git a/plugins/MenuItemEx/icons/msg_status.ico b/plugins/MenuItemEx/icons/msg_status.ico deleted file mode 100644 index 1d0607d4ad..0000000000 Binary files a/plugins/MenuItemEx/icons/msg_status.ico and /dev/null differ diff --git a/plugins/MenuItemEx/icons/msg_xStatus.ico b/plugins/MenuItemEx/icons/msg_xStatus.ico deleted file mode 100644 index d057d353ff..0000000000 Binary files a/plugins/MenuItemEx/icons/msg_xStatus.ico and /dev/null differ diff --git a/plugins/MenuItemEx/icons/recv_files.ico b/plugins/MenuItemEx/icons/recv_files.ico deleted file mode 100644 index d8e15aa836..0000000000 Binary files a/plugins/MenuItemEx/icons/recv_files.ico and /dev/null differ diff --git a/plugins/MenuItemEx/icons/salad.right.ico b/plugins/MenuItemEx/icons/salad.right.ico deleted file mode 100644 index 03dd1f4e9d..0000000000 Binary files a/plugins/MenuItemEx/icons/salad.right.ico and /dev/null differ diff --git a/plugins/MenuItemEx/icons/show_in_list.ico b/plugins/MenuItemEx/icons/show_in_list.ico deleted file mode 100644 index bea1dfd738..0000000000 Binary files a/plugins/MenuItemEx/icons/show_in_list.ico and /dev/null differ diff --git a/plugins/MenuItemEx/images.cpp b/plugins/MenuItemEx/images.cpp deleted file mode 100644 index 51903294bb..0000000000 --- a/plugins/MenuItemEx/images.cpp +++ /dev/null @@ -1,363 +0,0 @@ -#include "menuex.h" -#include "images.h" - -extern HINSTANCE hinstance; - - -void HalfBitmap32Alpha(HBITMAP hBitmap) -{ - BITMAP bmp; - DWORD dwLen; - BYTE *p; - int x, y; - - GetObject(hBitmap, sizeof(bmp), &bmp); - - if (bmp.bmBitsPixel != 32) - return; - - dwLen = bmp.bmWidth * bmp.bmHeight * (bmp.bmBitsPixel / 8); - p = (BYTE *)malloc(dwLen); - if (p == NULL) - return; - memset(p, 0, dwLen); - - GetBitmapBits(hBitmap, dwLen, p); - - for (y = 0; y < bmp.bmHeight; ++y) { - BYTE *px = p + bmp.bmWidth * 4 * y; - - for (x = 0; x < bmp.bmWidth; ++x) - { - px[3]>>=1; - px += 4; - } - } - - SetBitmapBits(hBitmap, dwLen, p); - - free(p); -} - - -// Make a bitmap all transparent, but only if it is a 32bpp -//void MakeBmpTransparent(HBITMAP hBitmap) -//{ -// BITMAP bmp; -// DWORD dwLen; -// BYTE *p; -// -// GetObject(hBitmap, sizeof(bmp), &bmp); -// -// if (bmp.bmBitsPixel != 32) -// return; -// -// dwLen = bmp.bmWidth * bmp.bmHeight * (bmp.bmBitsPixel / 8); -// p = (BYTE *)malloc(dwLen); -// if (p == NULL) -// return; -// -// memset(p, 0, dwLen); -// SetBitmapBits(hBitmap, dwLen, p); -// -// free(p); -//} - - -// Correct alpha from bitmaps loaded without it (it cames with 0 and should be 255) -void CorrectBitmap32Alpha(HBITMAP hBitmap, BOOL force) -{ - BITMAP bmp; - DWORD dwLen; - BYTE *p; - int x, y; - BOOL fixIt; - - GetObject(hBitmap, sizeof(bmp), &bmp); - - if (bmp.bmBitsPixel != 32) - return; - - dwLen = bmp.bmWidth * bmp.bmHeight * (bmp.bmBitsPixel / 8); - p = (BYTE *)malloc(dwLen); - if (p == NULL) - return; - memset(p, 0, dwLen); - - GetBitmapBits(hBitmap, dwLen, p); - - fixIt = TRUE; - for (y = 0; fixIt && y < bmp.bmHeight; ++y) { - BYTE *px = p + bmp.bmWidth * 4 * y; - - for (x = 0; fixIt && x < bmp.bmWidth; ++x) - { - if (px[3] != 0 && !force) - { - fixIt = FALSE; - } - else - { - if (px[0] != 0 || px[1] != 0 || px[2] != 0) - px[3] = 255; - } - - px += 4; - } - } - - if (fixIt) - SetBitmapBits(hBitmap, dwLen, p); - - free(p); -} - - -HBITMAP CopyBitmapTo32(HBITMAP hBitmap) -{ - BITMAPINFO RGB32BitsBITMAPINFO; - BYTE * ptPixels; - HBITMAP hDirectBitmap; - - BITMAP bmp; - DWORD dwLen; - BYTE *p; - - GetObject(hBitmap, sizeof(bmp), &bmp); - - dwLen = bmp.bmWidth * bmp.bmHeight * 4; - p = (BYTE *)malloc(dwLen); - if (p == NULL) - return NULL; - - // Create bitmap - ZeroMemory(&RGB32BitsBITMAPINFO, sizeof(BITMAPINFO)); - RGB32BitsBITMAPINFO.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - RGB32BitsBITMAPINFO.bmiHeader.biWidth = bmp.bmWidth; - RGB32BitsBITMAPINFO.bmiHeader.biHeight = bmp.bmHeight; - RGB32BitsBITMAPINFO.bmiHeader.biPlanes = 1; - RGB32BitsBITMAPINFO.bmiHeader.biBitCount = 32; - - hDirectBitmap = CreateDIBSection(NULL, - (BITMAPINFO *)&RGB32BitsBITMAPINFO, - DIB_RGB_COLORS, - (void **)&ptPixels, - NULL, 0); - - // Copy data - if (bmp.bmBitsPixel != 32) - { - HDC hdcOrig, hdcDest; - HBITMAP oldOrig, oldDest; - - hdcOrig = CreateCompatibleDC(NULL); - oldOrig = (HBITMAP) SelectObject(hdcOrig, hBitmap); - - hdcDest = CreateCompatibleDC(NULL); - oldDest = (HBITMAP) SelectObject(hdcDest, hDirectBitmap); - - BitBlt(hdcDest, 0, 0, bmp.bmWidth, bmp.bmHeight, hdcOrig, 0, 0, SRCCOPY); - - SelectObject(hdcDest, oldDest); - DeleteObject(hdcDest); - SelectObject(hdcOrig, oldOrig); - DeleteObject(hdcOrig); - - // Set alpha - CorrectBitmap32Alpha(hDirectBitmap, FALSE); - } - else - { - GetBitmapBits(hBitmap, dwLen, p); - SetBitmapBits(hDirectBitmap, dwLen, p); - } - - free(p); - - return hDirectBitmap; -} - - -//HBITMAP CreateBitmap32(int cx, int cy) -//{ -// BITMAPINFO RGB32BitsBITMAPINFO; -// UINT * ptPixels; -// HBITMAP DirectBitmap; -// -// ZeroMemory(&RGB32BitsBITMAPINFO,sizeof(BITMAPINFO)); -// RGB32BitsBITMAPINFO.bmiHeader.biSize=sizeof(BITMAPINFOHEADER); -// RGB32BitsBITMAPINFO.bmiHeader.biWidth=cx;//bm.bmWidth; -// RGB32BitsBITMAPINFO.bmiHeader.biHeight=cy;//bm.bmHeight; -// RGB32BitsBITMAPINFO.bmiHeader.biPlanes=1; -// RGB32BitsBITMAPINFO.bmiHeader.biBitCount=32; -// -// DirectBitmap = CreateDIBSection(NULL, -// (BITMAPINFO *)&RGB32BitsBITMAPINFO, -// DIB_RGB_COLORS, -// (void **)&ptPixels, -// NULL, 0); -// return DirectBitmap; -//} - - -BOOL MakeBitmap32(HBITMAP *hBitmap) -{ - BITMAP bmp; - - GetObject(*hBitmap, sizeof(bmp), &bmp); - - if (bmp.bmBitsPixel != 32) { - // Convert to 32 bpp - HBITMAP hBmpTmp = CopyBitmapTo32(*hBitmap); - DeleteObject(*hBitmap); - *hBitmap = hBmpTmp; - } - - return TRUE; -} - - -//#define GET_PIXEL(__P__, __X__, __Y__) ( __P__ + width * 4 * (__Y__) + 4 * (__X__)) - -//BOOL MakeGrayscale(HBITMAP *hBitmap) -//{ -// BYTE *p = NULL; -// BYTE *p1; -// DWORD dwLen; -// int width, height, x, y; -// BITMAP bmp; -// -// GetObject(*hBitmap, sizeof(bmp), &bmp); -// width = bmp.bmWidth; -// height = bmp.bmHeight; -// -// dwLen = width * height * 4; -// p = (BYTE *)malloc(dwLen); -// if (p == NULL) -// { -// return FALSE; -// } -// -// if (bmp.bmBitsPixel != 32) -// { -// // Convert to 32 bpp -// HBITMAP hBmpTmp = CopyBitmapTo32(*hBitmap); -// DeleteObject(*hBitmap); -// *hBitmap = hBmpTmp; -// } -// GetBitmapBits(*hBitmap, dwLen, p); -// -// // Make grayscale -// for (y = 0 ; y < height ; y++) -// { -// for (x = 0 ; x < width ; x++) -// { -// p1 = GET_PIXEL(p, x, y); -// p1[0] = p1[1] = p1[2] = ( p1[0] + p1[1] + p1[2] ) / 3; -// } -// } -// -// dwLen = SetBitmapBits(*hBitmap, dwLen, p); -// free(p); -// -// return TRUE; -//} - - -HICON MakeHalfAlphaIcon(HICON SourceIcon) -{ - ICONINFO TargetIconInfo; - BITMAP TargetBitmapInfo; - HICON TargetIcon, TempIcon; - - TempIcon = CopyIcon(SourceIcon); - if ( !GetIconInfo(TempIcon, &TargetIconInfo)) - return NULL; - - if ( !GetObject(TargetIconInfo.hbmColor, sizeof(BITMAP), &TargetBitmapInfo)) - return NULL; - - MakeBitmap32(&TargetIconInfo.hbmColor); - HalfBitmap32Alpha(TargetIconInfo.hbmColor); - TargetIcon = CreateIconIndirect(&TargetIconInfo); - - DestroyIcon(TempIcon); - DeleteObject(TargetIconInfo.hbmColor); - DeleteObject(TargetIconInfo.hbmMask); - return TargetIcon; -} - - -//HICON MakeGrayscaleIcon(HICON SourceIcon) -//{ -// ICONINFO TargetIconInfo; -// BITMAP TargetBitmapInfo; -// HICON TargetIcon, TempIcon; -// -// TempIcon = CopyIcon(SourceIcon); -// if (! GetIconInfo(TempIcon, &TargetIconInfo) || GetObject(TargetIconInfo.hbmColor, sizeof(BITMAP), &TargetBitmapInfo)==0) return NULL; -// -// MakeGrayscale(&TargetIconInfo.hbmColor); -// -// TargetIcon = CreateIconIndirect(&TargetIconInfo); -// DestroyIcon(TempIcon); -// -// return TargetIcon; -//} - - -HICON BindOverlayIcon(HICON SourceIcon,LPCSTR OverlayIconName) -{ - ICONINFO OverlayIconInfo, TargetIconInfo; - BITMAP OverlayBitmapInfo, TargetBitmapInfo; - HBITMAP OldOverlayBitmap, OldTargetBitmap; - HICON OverlayIcon, TargetIcon, TempIcon; - HDC OverlayDC, TargetDC; - BLENDFUNCTION bf = {0,0,255,1}; - - TempIcon = CopyIcon(SourceIcon); - if ( !GetIconInfo( TempIcon, &TargetIconInfo )) - return NULL; - - MakeBitmap32(&TargetIconInfo.hbmColor); - CorrectBitmap32Alpha(TargetIconInfo.hbmColor, FALSE); - GetObject(TargetIconInfo.hbmColor, sizeof(BITMAP), &TargetBitmapInfo); - - OverlayIcon = (HICON)CallService( MS_SKIN2_GETICON, 0, (LPARAM)OverlayIconName); - if ( !GetIconInfo(OverlayIcon, &OverlayIconInfo) || !GetObject(OverlayIconInfo.hbmColor, sizeof(BITMAP), &OverlayBitmapInfo)) - return NULL; - - TargetDC = CreateCompatibleDC(NULL); - OldTargetBitmap = (HBITMAP)SelectObject(TargetDC, TargetIconInfo.hbmColor); - - OverlayDC = CreateCompatibleDC(NULL); - OldOverlayBitmap = (HBITMAP)SelectObject(OverlayDC, OverlayIconInfo.hbmColor); - - AlphaBlend(TargetDC, 0, 0, TargetBitmapInfo.bmWidth, TargetBitmapInfo.bmHeight, - OverlayDC, 0, 0, OverlayBitmapInfo.bmWidth, OverlayBitmapInfo.bmHeight, bf); - - SelectObject(TargetDC, TargetIconInfo.hbmMask); - SelectObject(OverlayDC, OverlayIconInfo.hbmMask); - - BitBlt(TargetDC, 0, 0, TargetBitmapInfo.bmWidth, TargetBitmapInfo.bmHeight, - OverlayDC, 0, 0, SRCCOPY); - - TargetIcon = CreateIconIndirect(&TargetIconInfo); - DestroyIcon(TempIcon); - //DestroyIcon(OverlayIcon); - - SelectObject(TargetDC, OldTargetBitmap); - DeleteObject(TargetIconInfo.hbmColor); - DeleteObject(TargetIconInfo.hbmMask); - DeleteDC(TargetDC); - - SelectObject(OverlayDC, OldOverlayBitmap); - DeleteObject(OverlayIconInfo.hbmColor); - DeleteObject(OverlayIconInfo.hbmMask); - DeleteDC(OverlayDC); - - return TargetIcon; -} - - -// EOF diff --git a/plugins/MenuItemEx/images.h b/plugins/MenuItemEx/images.h deleted file mode 100644 index e8288714f7..0000000000 --- a/plugins/MenuItemEx/images.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef __IMAGE_UTILS_H__ -#define __IMAGE_UTILS_H__ - -HICON BindOverlayIcon(HICON,LPCSTR); -//HICON MakeGrayscaleIcon(HICON); -HICON MakeHalfAlphaIcon(HICON); - -#endif // __IMAGE_UTILS_H__ diff --git a/plugins/MenuItemEx/main.cpp b/plugins/MenuItemEx/main.cpp deleted file mode 100644 index ed053b2223..0000000000 --- a/plugins/MenuItemEx/main.cpp +++ /dev/null @@ -1,1386 +0,0 @@ -#include "menuex.h" -#include "images.h" -#include "version.h" - -#define MS_SETINVIS "MenuEx/SetInvis" -#define MS_SETVIS "MenuEx/SetVis" -#define MS_HIDE "MenuEx/Hide" -#define MS_IGNORE "MenuEx/Ignore" -#define MS_PROTO "MenuEx/ChangeProto" -#define MS_ADDED "MenuEx/SendAdded" -#define MS_AUTHREQ "MenuEx/SendAuthReq" -#define MS_COPYID "MenuEx/CopyID" -#define MS_RECVFILES "MenuEx/RecvFiles" -#define MS_STATUSMSG "MenuEx/CopyStatusMsg" -#define MS_COPYIP "MenuEx/CopyIP" -#define MS_COPYMIRVER "MenuEx/CopyMirVer" - - -const int vf_default = VF_VS|VF_HFL|VF_IGN|VF_CID|VF_SHOWID|VF_RECV|VF_STAT|VF_SMNAME|VF_CIDN|VF_CIP; - -HINSTANCE hinstance; -HANDLE hmenuVis,hmenuOff,hmenuHide,hmenuIgnore,hmenuProto,hmenuAdded,hmenuAuthReq; -HANDLE hmenuCopyID,hmenuRecvFiles,hmenuStatusMsg,hmenuCopyIP,hmenuCopyMirVer; -static HANDLE hIgnoreItem[9], hProtoItem[MAX_PROTOS], hHooks[8], hServices[12]; -HICON hIcon[5]; -BOOL bMetaContacts, bMir_08; -PROTOACCOUNT **accs; -OPENOPTIONSDIALOG ood; -int protoCount; -int hLangpack; -static LONG_PTR OldAuthReqEditProc; - -struct { - char *module; - char *name; - TCHAR *fullName; - char flag; -} -static const statusMsg[] = { - { "CList", "StatusMsg", LPGENT("Status message"), 1 }, - { 0, "XStatusName", LPGENT("XStatus title"), 4 }, - { 0, "XStatusMsg", LPGENT("XStatus message"), 2 }, - { "AdvStatus", "tune/text", LPGENT("Listening to"), 8 }, - { "AdvStatus", "activity/title", LPGENT("Activity title"), 8 }, - { "AdvStatus", "activity/text", LPGENT("Activity text"), 8 } -}; - -struct -{ - TCHAR* szDescr; - char* szName; - int defIconID; -} -static const iconList[] = { - { _T("Hide from list"), "miex_hidefl", IDI_ICON0 }, - { _T("Show in list"), "miex_showil", IDI_ICON8 }, - { _T("Always visible"), "miex_vis", IDI_ICON1 }, - { _T("Never visible"), "miex_invis", IDI_ICON2 }, - { _T("Send 'You were added'"), "miex_added", IDI_ICON4 }, - { _T("Request authorization"), "miex_authorization", IDI_ICON5 }, - { _T("Copy to Account"), "miex_protocol", IDI_ICON6 }, - { _T("Ignore"), "miex_ignore", IDI_ICON7 }, - { _T("Browse Received Files"), "miex_recfiles", IDI_ICON12 }, - { _T("Copy MirVer"), "miex_copymver", IDI_ICON13 } -}; - -struct -{ - TCHAR* szDescr; - char* szName; - int defIconID; -} -static const overlayIconList[] = { - { _T("Copy ID"), "miex_copyid", IDI_ICON3 }, - { _T("Copy Status Message"), "miex_copysm1", IDI_ICON9 }, - { _T("Copy xStatus Message"), "miex_copysm2", IDI_ICON10 }, - { _T("Copy IP"), "miex_copyip", IDI_ICON11 } -}; - -struct { - TCHAR* name; - int type; - int icon; -} -static const ii[] = { - { LPGENT("All"), IGNOREEVENT_ALL, SKINICON_OTHER_FILLEDBLOB }, - { LPGENT("Messages"), IGNOREEVENT_MESSAGE, SKINICON_EVENT_MESSAGE }, - { LPGENT("URL"), IGNOREEVENT_URL, SKINICON_EVENT_URL }, - { LPGENT("Files"), IGNOREEVENT_FILE, SKINICON_EVENT_FILE }, - { LPGENT("User Online"), IGNOREEVENT_USERONLINE, SKINICON_OTHER_USERONLINE }, - { LPGENT("Authorization"), IGNOREEVENT_AUTHORIZATION, SKINICON_OTHER_MIRANDA }, - { LPGENT("You Were Added"), IGNOREEVENT_YOUWEREADDED, SKINICON_OTHER_ADDCONTACT }, - { LPGENT("Typing Notify"), IGNOREEVENT_TYPINGNOTIFY, SKINICON_OTHER_TYPING } -}; - -PLUGININFOEX pluginInfoEx = { - sizeof(PLUGININFOEX), - MODULENAME, - __VERSION_DWORD, - __DESC, - __AUTHORS, - __EMAIL, - __COPYRIGHTS, - __WEB __PLUGIN_ID_STR, - UNICODE_AWARE, - MIID_MENUEX -}; - -struct ModSetLinkLinkItem { // code from dbe++ plugin by Bio - char *name; - BYTE *next; //struct ModSetLinkLinkItem -}; - -typedef struct { - struct ModSetLinkLinkItem *first; - struct ModSetLinkLinkItem *last; -} ModuleSettingLL; - -int GetSetting(HANDLE hContact, const char *szModule, const char *szSetting, DBVARIANT *dbv) -{ - DBCONTACTGETSETTING cgs; - - cgs.szModule = szModule; - cgs.szSetting = szSetting; - cgs.pValue = dbv; - dbv->type = 0; - - return CallService(MS_DB_CONTACT_GETSETTING_STR,(WPARAM)hContact,(LPARAM)&cgs); -} - -int enumModulesSettingsProc( const char *szName, LPARAM lParam) -{ - ModuleSettingLL *msll = (ModuleSettingLL *)lParam; - if (!msll->first) - { - msll->first = (struct ModSetLinkLinkItem *)malloc(sizeof(struct ModSetLinkLinkItem)); - if (!msll->first) return 1; - msll->first->name = _strdup(szName); - msll->first->next = 0; - msll->last = msll->first; - } - else - { - struct ModSetLinkLinkItem *item = (struct ModSetLinkLinkItem *)malloc(sizeof(struct ModSetLinkLinkItem)); - if (!item) return 1; - msll->last->next = (BYTE*)item; - msll->last = (struct ModSetLinkLinkItem *)item; - item->name = _strdup(szName); - item->next = 0; - } - return 0; -} - -void FreeModuleSettingLL(ModuleSettingLL* msll) -{ - if (msll) - { - struct ModSetLinkLinkItem *item = msll->first; - struct ModSetLinkLinkItem *temp; - - while (item) - { - if (item->name) - { - free(item->name); - item->name = 0; - } - temp = item; - item = (struct ModSetLinkLinkItem *)item->next; - if (temp) - { - free(temp); - temp = 0; - } - } - - msll->first = 0; - msll->last = 0; - } -} - -void RenameDbProto(HANDLE hContact, HANDLE hContactNew, char* oldName, char* newName, int delOld) -{ - DBVARIANT dbv; - ModuleSettingLL settinglist; - struct ModSetLinkLinkItem *setting; - DBCONTACTENUMSETTINGS dbces; - - // enum all setting the contact has for the module - dbces.pfnEnumProc = enumModulesSettingsProc; - dbces.szModule = oldName; - dbces.lParam = (LPARAM)&settinglist; - settinglist.first = 0; - settinglist.last = 0; - CallService(MS_DB_CONTACT_ENUMSETTINGS, (WPARAM)hContact,(LPARAM)&dbces); - - setting = settinglist.first; - while (setting) - { - if (!GetSetting(hContact,oldName,setting->name,&dbv)) - { - switch (dbv.type) - { - case DBVT_BYTE: - DBWriteContactSettingByte(hContactNew, newName, setting->name, dbv.bVal); - break; - case DBVT_WORD: - DBWriteContactSettingWord(hContactNew, newName, setting->name, dbv.wVal); - break; - case DBVT_DWORD: - DBWriteContactSettingDword(hContactNew, newName, setting->name, dbv.dVal); - break; - case DBVT_ASCIIZ: - DBWriteContactSettingString(hContactNew, newName, setting->name, dbv.pszVal); - break; - case DBVT_UTF8: - DBWriteContactSettingStringUtf(hContactNew, newName, setting->name, dbv.pszVal); - break; - case DBVT_BLOB: - DBWriteContactSettingBlob(hContactNew, newName, setting->name, dbv.pbVal, dbv.cpbVal); - break; - - } - if (delOld) - DBDeleteContactSetting(hContact, oldName, setting->name); - } - DBFreeVariant(&dbv); - setting = (struct ModSetLinkLinkItem *)setting->next; - } - FreeModuleSettingLL(&settinglist); -} // end code from dbe++ - -static void IconsInit() -{ - int i; - TCHAR tszFile[MAX_PATH]; - GetModuleFileName(hinstance, tszFile, MAX_PATH); - - SKINICONDESC sid = {0}; - sid.cbSize = sizeof(SKINICONDESC); - sid.flags = SIDF_ALL_TCHAR; - sid.ptszDefaultFile = tszFile; - sid.cx = sid.cy = 16; - sid.ptszSection = LPGENT(MODULENAME); - - for ( i = 0; i < SIZEOF(iconList); i++ ) { - sid.pszName = iconList[i].szName; - sid.ptszDescription = iconList[i].szDescr; - sid.iDefaultIndex = -iconList[i].defIconID; - Skin_AddIcon(&sid); - } - - for ( i = 0; i < SIZEOF(overlayIconList); i++ ) { - sid.pszName = overlayIconList[i].szName; - sid.ptszDescription = overlayIconList[i].szDescr; - sid.iDefaultIndex = -overlayIconList[i].defIconID; - Skin_AddIcon(&sid); - } -} - -void ShowPopup(char* szText, TCHAR* tszText, HANDLE hContact) -{ - POPUPDATAT ppd = {0}; - TCHAR* text = 0; - - if (tszText) - text = mir_tstrdup(tszText); - else if (szText) - text = mir_a2t(szText); - if (!text) return; - - ppd.lchIcon = LoadSkinnedIcon(SKINICON_OTHER_MIRANDA); - ppd.lchContact = hContact; - _tcsncpy(ppd.lptzContactName, (TCHAR*)CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM)hContact, GCDNF_TCHAR), MAX_CONTACTNAME - 1); - _tcsncpy(ppd.lptzText, text, MAX_SECONDLINE - 1); - ppd.iSeconds = -1; - - PUAddPopUpT(&ppd); - mir_free(text); -} - -BOOL DirectoryExists(HANDLE hContact) -{ - int attr; - char path[MAX_PATH]; - CallService(MS_FILE_GETRECEIVEDFILESFOLDER, (WPARAM)hContact, (LPARAM)&path); - attr = GetFileAttributesA(path); - return (attr != -1) && (attr&FILE_ATTRIBUTE_DIRECTORY); -} - -void CopyToClipboard(HWND hwnd,LPSTR pszMsg, LPTSTR ptszMsg) -{ - HGLOBAL hglbCopy; - LPTSTR lptstrCopy; - LPTSTR buf = 0; - if (ptszMsg) - buf = mir_tstrdup(ptszMsg); - else if (pszMsg) - buf = mir_a2t(pszMsg); - - if (buf == 0) - return; - - hglbCopy = GlobalAlloc(GMEM_MOVEABLE, (lstrlen(buf)+1)*sizeof(TCHAR)); - lptstrCopy = (LPTSTR)GlobalLock(hglbCopy); - lstrcpy(lptstrCopy, buf); - mir_free(buf); - GlobalUnlock(hglbCopy); - - OpenClipboard(NULL); - EmptyClipboard(); - - SetClipboardData(CF_UNICODETEXT, hglbCopy); - - CloseClipboard(); -} - -BOOL isMetaContact(HANDLE hContact) { - - char *proto; - if(bMetaContacts) { - proto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); - if ( lstrcmpA(proto,"MetaContacts") == 0 ) { - return TRUE; - } - } - return FALSE; -} - -HANDLE getDefaultContact(HANDLE hContact) { - - if(bMetaContacts) { - return (HANDLE)CallService(MS_MC_GETDEFAULTCONTACT,(WPARAM)hContact,0); - } - return 0; -} - -HANDLE getMostOnline(HANDLE hContact) { - - if(bMetaContacts) { - return (HANDLE)CallService(MS_MC_GETMOSTONLINECONTACT,(WPARAM)hContact,0); - } - return 0; -} - -void GetID(HANDLE hContact,LPSTR szProto,LPSTR szID) -{ - DBVARIANT dbv_uniqueid; - LPSTR uID = (LPSTR) CallProtoService(szProto, PS_GETCAPS, PFLAG_UNIQUEIDSETTING, 0); - if ( uID == (LPSTR)CALLSERVICE_NOTFOUND ) - uID = NULL; - - *szID = '\0'; - - if ( uID && DBGetContactSetting(hContact, szProto, uID ,&dbv_uniqueid) == 0 ) { - if (dbv_uniqueid.type == DBVT_DWORD) - wsprintfA(szID, "%u", dbv_uniqueid.dVal); - else if (dbv_uniqueid.type == DBVT_WORD) - wsprintfA(szID, "%u", dbv_uniqueid.wVal); - else if (dbv_uniqueid.type == DBVT_BLOB) - wsprintfA(szID, "%s", dbv_uniqueid.cpbVal); - else - wsprintfA(szID, "%s", dbv_uniqueid.pszVal); - - DBFreeVariant(&dbv_uniqueid); - } -} - -int StatusMsgExists(HANDLE hContact) -{ - LPSTR module,msg; - char par[32]; - BOOL ret = 0; - int i; - - module = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); - if (!module) return 0; - - for(i = 0; i < SIZEOF(statusMsg); i++) { - if (statusMsg[i].flag & 8) - mir_snprintf(par, SIZEOF(par), "%s/%s", module, statusMsg[i].name); - else - strcpy(par, statusMsg[i].name); - - msg = DBGetString(hContact, (statusMsg[i].module) ? statusMsg[i].module : module, par); - if(msg) { - if(strlen(msg)) - ret |= statusMsg[i].flag; - mir_free(msg); - } - } - return ret; -} - -BOOL IPExists(HANDLE hContact) -{ - LPSTR szProto; - DWORD mIP,rIP; - - szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); - if (!szProto) return 0; - - mIP = DBGetContactSettingDword(hContact, szProto, "IP", 0); - rIP = DBGetContactSettingDword(hContact, szProto, "RealIP", 0); - - return (mIP != 0 || rIP != 0); -} - -BOOL MirVerExists(HANDLE hContact) -{ - LPSTR szProto, msg; - BOOL ret = 0; - - szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); - if (!szProto) return 0; - - msg = DBGetString(hContact,szProto,"MirVer"); - if(msg) { - if(strlen(msg)) ret = 1; - mir_free(msg); - } - - return ret; -} - -void getIP(HANDLE hContact,LPSTR szProto,LPSTR szIP) -{ - char szmIP[64] = {0}; - char szrIP[64] = {0}; - DWORD mIP = DBGetContactSettingDword(hContact, szProto, "IP", 0); - DWORD rIP = DBGetContactSettingDword(hContact, szProto, "RealIP", 0); - if ( mIP ) wsprintfA(szmIP, "External IP: %d.%d.%d.%d\r\n", mIP>>24,(mIP>>16)&0xFF,(mIP>>8)&0xFF,mIP&0xFF); - if ( rIP ) wsprintfA(szrIP, "Internal IP: %d.%d.%d.%d\r\n", rIP>>24,(rIP>>16)&0xFF,(rIP>>8)&0xFF,rIP&0xFF); - strcpy(szIP,szrIP); - strcat(szIP,szmIP); -} - -LPSTR getMirVer(HANDLE hContact) -{ - LPSTR szProto, msg; - - szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); - if (!szProto) return NULL; - - msg = DBGetString(hContact,szProto,"MirVer"); - if(msg) { - if(strlen(msg)) - return msg; - mir_free(msg); - } - - return NULL; -} - -static LRESULT CALLBACK AuthReqEditSubclassProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) -{ - switch(msg) { - case WM_CHAR: - if(wParam == '\n' && CTRL_IS_PRESSED) { // ctrl + ENTER - PostMessage(GetParent(hwnd), WM_COMMAND, IDOK, 0); - return 0; - } - if(wParam == 1 && CTRL_IS_PRESSED) { // ctrl + a - SendMessage(hwnd, EM_SETSEL, 0, -1); - return 0; - } - break; - case WM_SETFOCUS: - SendMessage(hwnd, EM_SETSEL, 0, -1); - break; - } - return CallWindowProc((WNDPROC)OldAuthReqEditProc,hwnd,msg,wParam,lParam); -} - -INT_PTR CALLBACK AuthReqWndProc(HWND hdlg,UINT msg,WPARAM wparam,LPARAM lparam) -{ - static HANDLE hcontact; - - switch(msg){ - case WM_INITDIALOG: - TranslateDialogDefault(hdlg); - OldAuthReqEditProc = SetWindowLongPtr(GetDlgItem(hdlg, IDC_REASON), GWLP_WNDPROC, (LONG_PTR)AuthReqEditSubclassProc); - SendDlgItemMessage(hdlg, IDC_REASON, EM_LIMITTEXT, (WPARAM)255, 0); - SetDlgItemText(hdlg, IDC_REASON, TranslateT("Please authorize me to add you to my contact list.")); - hcontact = (HANDLE)lparam; - break; - - case WM_COMMAND: - switch(LOWORD(wparam)) { - case IDOK: - { - char szReason[256] = {0}; - - WCHAR wszReason[256] = {0}; - - if (CallService(MS_SYSTEM_GETVERSION, 0, 0) < 0x00090007) - { - GetDlgItemTextA(hdlg,IDC_REASON,szReason,255); - CallContactService(hcontact,PSS_AUTHREQUEST,0,(LPARAM)szReason); - } - else - { - GetDlgItemText(hdlg,IDC_REASON,wszReason,255); - CallContactService(hcontact,PSS_AUTHREQUESTW,0,(LPARAM)wszReason); - } - - } // fall through - case IDCANCEL: - DestroyWindow(hdlg); - break; - } - break; - } - - return 0; -} - -BOOL isVisSupport(HANDLE hContact) -{ - char *szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,(WPARAM)hContact,0); - if(szProto == NULL) return 0; - return CallProtoService(szProto,PS_GETCAPS,PFLAGNUM_1,0)&PF1_INVISLIST; -} - -BOOL isInvSupport(HANDLE hContact) -{ - char *szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,(WPARAM)hContact,0); - if(szProto == NULL) return 0; - return CallProtoService(szProto,PS_GETCAPS,PFLAGNUM_1,0)&PF1_VISLIST; -} - -BOOL isProtoOnline(char *szProto) -{ -//#ifdef _DEBUG -// return TRUE; -//#else - DWORD protoStatus; - protoStatus = CallProtoService(szProto,PS_GETSTATUS,0,0); - return (protoStatus > ID_STATUS_OFFLINE && protoStatus < ID_STATUS_IDLE); - -//#endif -} - -INT_PTR onSendAuthRequest(WPARAM wparam,LPARAM lparam) -{ - DWORD flags; - char *szProto; - - szProto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO,wparam,0); - - flags = CallProtoService(szProto,PS_GETCAPS,PFLAGNUM_4,0); - if (flags&PF4_NOCUSTOMAUTH) - CallContactService((HANDLE)wparam,PSS_AUTHREQUEST,0, (LPARAM)""); - else - CreateDialogParam(hinstance,MAKEINTRESOURCE(IDD_AUTHREQ),(HWND)CallService(MS_CLUI_GETHWND,0,0),AuthReqWndProc,(LPARAM)wparam); - - return 0; -} - -INT_PTR onSendAdded(WPARAM wparam,LPARAM lparam) -{ - CallContactService((HANDLE)wparam,PSS_ADDED,0,0); - return 0; -} - -// set the invisible-flag in db -INT_PTR onSetInvis(WPARAM wparam,LPARAM lparam) -{ - CallContactService((HANDLE)wparam,PSS_SETAPPARENTMODE,(DBGetContactSettingWord((HANDLE)wparam,(const char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,wparam,0),"ApparentMode",0) == ID_STATUS_OFFLINE)?0:ID_STATUS_OFFLINE,0); - return 0; -} - -// set visible-flag in db -INT_PTR onSetVis(WPARAM wparam,LPARAM lparam) -{ - CallContactService((HANDLE)wparam,PSS_SETAPPARENTMODE,(DBGetContactSettingWord((HANDLE)wparam,(const char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,wparam,0),"ApparentMode",0) == ID_STATUS_ONLINE)?0:ID_STATUS_ONLINE,0); - return 0; -} - -INT_PTR onHide(WPARAM wparam,LPARAM lparam) -{ - DBWriteContactSettingByte((HANDLE)wparam,"CList","Hidden",(byte)!DBGetContactSettingByte((HANDLE)wparam,"CList","Hidden",0)); - CallService(MS_CLUI_SORTLIST,0,0); - return 0; -} - -void ShowItem(CLISTMENUITEM *cli, HANDLE hmenu) -{ - cli->flags = CMIM_FLAGS | CMIF_TCHAR; - CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hmenu,(LPARAM)cli); -} - -void HideItem(CLISTMENUITEM *cli,HANDLE hmenu) -{ - cli->flags|=CMIF_HIDDEN; - CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hmenu,(LPARAM)cli); -} - -// following 4 functions should be self-explanatory -void ModifyVisibleSet(CLISTMENUITEM *cli,int mode,BOOL alpha) -{ - cli->flags |= CMIM_ICON; - cli->hIcon = (mode) ? hIcon[1] : (alpha?hIcon[3] : LoadSkinnedIcon(SKINICON_OTHER_SMALLDOT)); - CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hmenuVis, (LPARAM)cli); -} - -void ModifyInvisSet(CLISTMENUITEM *cli,int mode,BOOL alpha) -{ - cli->flags |= CMIM_ICON; - cli->hIcon = (mode) ? hIcon[2] : (alpha ? hIcon[4] : LoadSkinnedIcon(SKINICON_OTHER_SMALLDOT)); - CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hmenuOff, (LPARAM)cli); -} - -void ModifyHidden(CLISTMENUITEM *cli,int mode) -{ - cli->flags |= CMIM_ICON | CMIM_NAME; - cli->hIcon = (mode) ? - (HICON)CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_showil") : - (HICON)CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_hidefl"); - cli->ptszName = mode ? LPGENT("Show in list") : LPGENT("Hide from list"); - CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hmenuHide, (LPARAM)cli); -} - -void ModifyCopyID(CLISTMENUITEM *cli, HANDLE hContact, BOOL bShowID, BOOL bTrimID) -{ - LPSTR szProto; - char szID[256]; - TCHAR buffer[256]; - HICON hIconCID; - HANDLE hC; - - cli->flags|=CMIM_ICON|CMIM_NAME; - - if(isMetaContact(hContact)) { - hC = getMostOnline(hContact); - if ( !hContact ) hC = getDefaultContact(hContact); - hContact = hC; - } - - szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); - if (!szProto) { - HideItem(cli,hmenuCopyID); - return; - } - hIconCID = (HICON) CallProtoService(szProto, PS_LOADICON, PLI_PROTOCOL|PLIF_SMALL, 0); - cli->hIcon = BindOverlayIcon(hIconCID, "miex_copyid"); - DestroyIcon(hIconCID); - hIconCID = cli->hIcon; - - GetID(hContact,szProto,(LPSTR)&szID); - if(szID[0]) - { - if (bShowID) - { - TCHAR* tmp; - - if (bTrimID && (strlen(szID) > MAX_IDLEN)) - { - szID[MAX_IDLEN - 2] = szID[MAX_IDLEN - 1] = szID[MAX_IDLEN] = '.'; - szID[MAX_IDLEN + 1] = 0; - } - tmp = mir_a2t(szID); - mir_sntprintf(buffer, SIZEOF(buffer), _T("%s [%s]"), TranslateT("Copy ID"), tmp); - mir_free(tmp); - - cli->ptszName = (TCHAR*)&buffer; - } - else - cli->ptszName = _T("Copy ID"); - } - else { - cli->flags = CMIM_FLAGS|CMIF_HIDDEN; - } - CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hmenuCopyID,(LPARAM)cli); - DestroyIcon(hIconCID); -} - -void ModifyStatusMsg(CLISTMENUITEM *cli,HANDLE hContact) -{ - LPSTR szProto; - HICON hIconSMsg; - - cli->flags|=CMIM_ICON; - - szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); - if (!szProto) { - HideItem(cli,hmenuStatusMsg); - return; - } - - hIconSMsg = (HICON) CallProtoService(szProto, PS_LOADICON, PLI_PROTOCOL|PLIF_SMALL, 0); - cli->hIcon = BindOverlayIcon(hIconSMsg, (StatusMsgExists(hContact)&2) ? "miex_copysm2" : "miex_copysm1"); - DestroyIcon(hIconSMsg); - hIconSMsg = cli->hIcon; - - CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hmenuStatusMsg,(LPARAM)cli); - DestroyIcon(hIconSMsg); -} - -void ModifyCopyIP(CLISTMENUITEM *cli,HANDLE hContact) -{ - LPSTR szProto; - HICON hIconCIP; - - cli->flags |= CMIM_ICON; - - szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); - if (!szProto) { - HideItem(cli,hmenuCopyIP); - return; - } - - hIconCIP = (HICON) CallProtoService(szProto, PS_LOADICON, PLI_PROTOCOL|PLIF_SMALL, 0); - - cli->hIcon = BindOverlayIcon(hIconCIP, "miex_copyip"); - DestroyIcon(hIconCIP); - hIconCIP = cli->hIcon; - - CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hmenuCopyIP,(LPARAM)cli); - DestroyIcon(hIconCIP); -} - -void ModifyCopyMirVer(CLISTMENUITEM *cli,HANDLE hContact) -{ - LPSTR msg; - cli->flags|=CMIM_ICON; - cli->hIcon = NULL; - if(ServiceExists(MS_FP_GETCLIENTICON)) { - msg = getMirVer(hContact); - if(msg) { - cli->hIcon = (HICON)CallService(MS_FP_GETCLIENTICON,(WPARAM)msg,(LPARAM)1); - mir_free(msg); - } - } - if (!cli->hIcon) cli->hIcon = hIcon[0]; - CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hmenuCopyMirVer,(LPARAM)cli); -} - -INT_PTR onCopyID(WPARAM wparam,LPARAM lparam) -{ - LPSTR szProto; - char szID[128] = {0}, buffer[256] = {0}; - HANDLE hContact ,hC; - PROTOACCOUNT* pa; - - hContact = (HANDLE)wparam; - if(isMetaContact(hContact)) { - hC = getMostOnline(hContact); - if ( !hContact ) hC = getDefaultContact(hContact); - hContact = hC; - } - if ((szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0)) == NULL) - return 0; - - GetID(hContact,szProto,(LPSTR)&szID); - - if(DBGetContactSettingDword(NULL,VISPLG,"flags",vf_default)&VF_CIDN) { - if (bMir_08) - pa = (PROTOACCOUNT*)CallService(MS_PROTO_GETACCOUNT, 0, (LPARAM)szProto); - - if (bMir_08 && !pa->bOldProto) - mir_snprintf(buffer, SIZEOF(buffer), "%s: %s", pa->szProtoName, szID); - else - mir_snprintf(buffer, SIZEOF(buffer), "%s: %s", szProto, szID); - } - else - strcpy(buffer, szID); - - CopyToClipboard((HWND)lparam, buffer, 0); - if(CTRL_IS_PRESSED && ServiceExists(MS_POPUP_ADDPOPUP)) - ShowPopup(buffer, 0, hContact); - - return 0; -} - -INT_PTR onCopyStatusMsg(WPARAM wparam,LPARAM lparam) -{ - LPSTR module; - LPTSTR msg; - char par[32]; - TCHAR buffer[2048]; - int i; - DWORD flags = DBGetContactSettingDword(NULL,VISPLG,"flags",vf_default); - - module = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, wparam, 0); - if (!module) return 0; - - buffer[0] = 0; - for(i = 0; i < SIZEOF(statusMsg); i++) { - if (statusMsg[i].flag & 8) - mir_snprintf(par, SIZEOF(par), "%s/%s", module, statusMsg[i].name); - else - strcpy(par, statusMsg[i].name); - - msg = DBGetStringT((HANDLE)wparam, (statusMsg[i].module) ? statusMsg[i].module : module, par); - if(msg) - { - if(_tcsclen(msg)) - { - if (flags&VF_SMNAME) - { - _tcsncat (buffer, TranslateTS(statusMsg[i].fullName), (SIZEOF(buffer) - _tcsclen(buffer) - 1)); - _tcsncat (buffer, _T(": "), (SIZEOF(buffer) - _tcsclen(buffer) - 1)); - } - _tcsncat(buffer, msg, (SIZEOF(buffer) - _tcsclen(buffer) - 1)); - _tcsncat(buffer, _T("\r\n"), (SIZEOF(buffer) - _tcsclen(buffer) - 1)); - } - mir_free(msg); - } - } - - CopyToClipboard((HWND)lparam, 0, buffer); - if(CTRL_IS_PRESSED && ServiceExists(MS_POPUP_ADDPOPUP)) - ShowPopup(0, buffer, (HANDLE)wparam); - - return 0; -} - -INT_PTR onCopyIP(WPARAM wparam,LPARAM lparam) -{ - LPSTR szProto; - char szIP[128]; - - szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, wparam, 0); - getIP((HANDLE)wparam,szProto,(LPSTR)&szIP); - - CopyToClipboard((HWND)lparam, szIP, 0); - if(CTRL_IS_PRESSED && ServiceExists(MS_POPUP_ADDPOPUP)) - ShowPopup(szIP, 0, (HANDLE)wparam); - - return 0; -} - -INT_PTR onCopyMirVer(WPARAM wparam,LPARAM lparam) -{ - LPSTR msg = getMirVer((HANDLE)wparam); - if(msg) { - CopyToClipboard((HWND)lparam, msg, 0); - if(CTRL_IS_PRESSED && ServiceExists(MS_POPUP_ADDPOPUP)) - ShowPopup(msg, 0, (HANDLE)wparam); - - mir_free(msg); - } - return 0; -} - -INT_PTR onRecvFiles(WPARAM wparam,LPARAM lparam) -{ - char path[MAX_PATH]; - CallService(MS_FILE_GETRECEIVEDFILESFOLDER, wparam, (LPARAM)&path); - ShellExecuteA(0, "open", path, 0, 0, SW_SHOW); - return 0; -} - -INT_PTR onChangeProto(WPARAM wparam,LPARAM lparam) -{ - HANDLE hContact, hContactNew; - - hContact = (HANDLE)wparam; - if (!strcmp((char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, wparam, 0), (char*)lparam)) - return 0; - - if (CTRL_IS_PRESSED) - { - hContactNew = hContact; - RenameDbProto(hContact, hContactNew, (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0), (char*)lparam, 1); - CallService(MS_PROTO_REMOVEFROMCONTACT, (WPARAM)hContact, CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0)); - CallService(MS_PROTO_ADDTOCONTACT, (WPARAM)hContactNew, lparam); - } - else - { - hContactNew = (HANDLE)CallService(MS_DB_CONTACT_ADD, 0, 0); - if (hContactNew) - { - CallService(MS_PROTO_ADDTOCONTACT, (WPARAM)hContactNew, lparam); - RenameDbProto(hContact, hContactNew, (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0), (char*)lparam, 0); - RenameDbProto(hContact, hContactNew, "CList", "CList", 0); - } - else - return 0; - } - if(MessageBox(NULL,(LPCTSTR)TranslateT("Do you want to send authorization request\nto new contact?"), - TranslateT("Miranda IM"), MB_OKCANCEL | MB_SETFOREGROUND | MB_TOPMOST) == IDOK) - - onSendAuthRequest((WPARAM)hContactNew, 0); - - return 0; -} - -int isIgnored(HANDLE hContact, int type) -{ - int i = 0, all = 0; - if (type == IGNOREEVENT_ALL) - { - for (i = 1; i < SIZEOF(ii); i++) - { - if (isIgnored(hContact, ii[i].type)) - all++; - } - return (all == SIZEOF(ii) - 1) ? 1 : 0; // ignoring all or not - } - else - return CallService(MS_IGNORE_ISIGNORED, (WPARAM)hContact, (LPARAM)type); -} - -INT_PTR onIgnore(WPARAM wparam,LPARAM lparam) -{ - if (DBGetContactSettingByte(NULL, VISPLG, "ignorehide", 0) && (lparam == IGNOREEVENT_ALL)) { - DBWriteContactSettingByte((HANDLE)wparam, "CList", "Hidden", (isIgnored((HANDLE)wparam, lparam) ? (byte)0 : (byte)1)); - CallService(MS_CLUI_SORTLIST, 0, 0); - } - - CallService(isIgnored((HANDLE)wparam, lparam) ? MS_IGNORE_UNIGNORE : MS_IGNORE_IGNORE, wparam, lparam); - return 0; -} - -static HANDLE AddSubmenuItem(HANDLE hRoot, TCHAR* name, HICON icon, DWORD flag, char* service, int pos, int param) -{ - CLISTMENUITEM mi = { 0 }; - mi.cbSize = sizeof(mi); - mi.hParentMenu = (HGENMENU)hRoot; - mi.pszPopupName = (char*)hRoot; // for Miranda 0.7 - mi.popupPosition = param; - mi.position = pos; - mi.ptszName = name; - mi.hIcon = icon; - mi.flags = CMIF_TCHAR | CMIF_CHILDPOPUP; - if (flag) - mi.flags |= flag; - mi.pszService = service; - return Menu_AddContactMenuItem(&mi); -} - -static void ModifySubmenuItem(HANDLE hItem, TCHAR* name, int checked, int hidden) -{ - CLISTMENUITEM mi = { 0 }; - mi.cbSize = sizeof(mi); - mi.ptszName = name; - mi.flags = CMIM_FLAGS | CMIF_TCHAR; - if ( checked ) - mi.flags |= CMIF_CHECKED; - if ( hidden ) - mi.flags |= CMIF_HIDDEN; - CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hItem, (LPARAM)&mi); -} - -// called when the contact-menu is built -int BuildMenu(WPARAM wparam,LPARAM lparam) -{ - CLISTMENUITEM miAV = {0},miNV,miHFL,miIGN,miPROTO,miADD,miREQ,miCID,miRECV,miSTAT,miCIP,miCMV; - DWORD flags = DBGetContactSettingDword(NULL,VISPLG,"flags",vf_default); - int i = 0, j = 0, check = 0, all = 0, hide = 0; - BOOL bIsOnline = FALSE, bShowAll = CTRL_IS_PRESSED; - PROTOACCOUNT* pa; - char* pszProto; - pszProto = (LPSTR)CallService(MS_PROTO_GETCONTACTBASEPROTO, wparam, 0); - if(bMir_08) - pa = (PROTOACCOUNT*)CallService(MS_PROTO_GETACCOUNT, 0, (LPARAM)pszProto); - - bIsOnline = isProtoOnline(pszProto); - - miAV.cbSize = sizeof(CLISTMENUITEM); - miAV.flags = CMIM_FLAGS | CMIF_TCHAR; - miAV.hIcon = NULL; - miAV.pszContactOwner = NULL; - miNV = miHFL = miIGN = miPROTO = miADD = miREQ = miCID = miRECV = miSTAT = miCIP = miCMV = miAV; - - if(bShowAll || flags&VF_VS) { - ShowItem(&miAV,hmenuVis); - ShowItem(&miNV,hmenuOff); - } - else { - HideItem(&miAV,hmenuVis); - HideItem(&miNV,hmenuOff); - } - - if(bShowAll || flags&VF_HFL){ - ShowItem(&miHFL,hmenuHide); - ModifyHidden(&miHFL,DBGetContactSettingByte((HANDLE)wparam,"CList","Hidden",0)); - } - else HideItem(&miHFL,hmenuHide); - - if(bShowAll || flags&VF_IGN) - { - ShowItem(&miIGN,hmenuIgnore); - for (i = 1; i < SIZEOF(ii); i++) - { - check = isIgnored((HANDLE)wparam, ii[i].type); - if (check) - all++; - ModifySubmenuItem(hIgnoreItem[i], ii[i].name, check, 0); - - if (all == SIZEOF(ii) - 1) // ignor all - check = 1; - else - check = 0; - ModifySubmenuItem(hIgnoreItem[0], ii[i].name, check, 0); - } - } - - else HideItem(&miIGN,hmenuIgnore); - - if(bMir_08 && pa && (bShowAll || flags&VF_PROTO)) - { - for (i = 0; i < protoCount; i++) - { - if ((!accs[i]->bIsEnabled) || (strcmp(pa->szProtoName, accs[i]->szProtoName))) - hide = 1; - else - { - hide = 0; - j++; - } - - if (CallService(MS_PROTO_ISPROTOONCONTACT, wparam, (LPARAM)accs[i]->szModuleName)) - check = 1; - else - check = 0; - - ModifySubmenuItem(hProtoItem[i], accs[i]->tszAccountName, check, hide); - } - if (j > 1) - ShowItem(&miPROTO,hmenuProto); - else - HideItem(&miPROTO,hmenuProto); - } - else HideItem(&miPROTO,hmenuProto); - - if ((bShowAll || flags & VF_ADD) && bIsOnline && (bMir_08 ? IsAccountEnabled( pa ) : TRUE)) - ShowItem(&miADD,hmenuAdded); - else - HideItem(&miADD,hmenuAdded); - - if ((bShowAll || flags & VF_REQ) && bIsOnline && (bMir_08 ? IsAccountEnabled( pa ) : TRUE)) - ShowItem(&miREQ,hmenuAuthReq); - else - HideItem(&miREQ,hmenuAuthReq); - - if(bShowAll || flags&VF_CID){ - ShowItem(&miCID,hmenuCopyID); - ModifyCopyID(&miCID,(HANDLE)wparam, flags&VF_SHOWID, flags&VF_TRIMID); - } - else HideItem(&miCID,hmenuCopyID); - - if ((bShowAll || flags&VF_RECV) && DirectoryExists((HANDLE)wparam)) ShowItem(&miRECV,hmenuRecvFiles); - else HideItem(&miRECV,hmenuRecvFiles); - - if ((bShowAll || flags&VF_STAT) && StatusMsgExists((HANDLE)wparam)) { - ShowItem(&miSTAT,hmenuStatusMsg); - ModifyStatusMsg(&miSTAT,(HANDLE)wparam); - } - else HideItem(&miSTAT,hmenuStatusMsg); - - if ((bShowAll || flags&VF_CIP) && IPExists((HANDLE)wparam)) { - ShowItem(&miCIP,hmenuCopyIP); - ModifyCopyIP(&miCIP,(HANDLE)wparam); - } - else HideItem(&miCIP,hmenuCopyIP); - - if ((bShowAll || flags&VF_CMV) && MirVerExists((HANDLE)wparam)) { - ShowItem(&miCMV,hmenuCopyMirVer); - ModifyCopyMirVer(&miCMV,(HANDLE)wparam); - } - else HideItem(&miCMV,hmenuCopyMirVer); - - if(bShowAll || (flags&VF_VS)) - { - int apparent = DBGetContactSettingWord((HANDLE)wparam,(const char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,wparam,0),"ApparentMode",0); - if(isVisSupport((HANDLE)wparam)) ModifyVisibleSet(&miAV,apparent == ID_STATUS_ONLINE,flags&VF_SAI); - else HideItem(&miAV,hmenuVis); - if(isInvSupport((HANDLE)wparam)) ModifyInvisSet(&miNV,apparent == ID_STATUS_OFFLINE,flags&VF_SAI); - else HideItem(&miAV,hmenuOff); - } - return 0; -} - -int EnumProtoSubmenu(WPARAM wparam, LPARAM lparam) -{ - int i; - int pos = 1000; - if (protoCount) // remove old items - { - for (i = 0; i < protoCount; i++) - { - if (hProtoItem[i]) - { - CallService(MS_CLIST_REMOVECONTACTMENUITEM, (WPARAM)hProtoItem[i], 0); - hProtoItem[i] = 0; - } - } - } - CallService( MS_PROTO_ENUMACCOUNTS, (WPARAM)&protoCount, (LPARAM)&accs); - if (protoCount > MAX_PROTOS) - protoCount = MAX_PROTOS; - for (i = 0; i < protoCount; i++) - { - hProtoItem[i] = AddSubmenuItem((HGENMENU)hmenuProto, accs[i]->tszAccountName, - LoadSkinnedProtoIcon(accs[i]->szModuleName, ID_STATUS_ONLINE), CMIF_KEEPUNTRANSLATED, - MS_PROTO, pos++, (int)accs[i]->szModuleName); - } - return 0; -} - -// Tabsrmm toolbar support -static int TabsrmmButtonPressed(WPARAM wParam, LPARAM lParam) -{ - CustomButtonClickData *cbcd = (CustomButtonClickData *)lParam; - - if (!strcmp(cbcd->pszModule, MODULENAME) && cbcd->dwButtonId == 0) - onRecvFiles(wParam, 0); - - return 0; -} - -static int TabsrmmButtonsInit(WPARAM wParam, LPARAM lParam) -{ - BBButton bbd = {0}; - - bbd.cbSize = sizeof(BBButton); - bbd.pszModuleName = MODULENAME; - bbd.dwButtonID = 0; - bbd.dwDefPos = 1000; - bbd.ptszTooltip = _T("Browse Received Files"); - bbd.bbbFlags = BBBF_ISLSIDEBUTTON | BBBF_CANBEHIDDEN; - bbd.hIcon = (HANDLE)CallService(MS_SKIN2_GETICONHANDLE, 0, (LPARAM)"miex_recfiles"); - CallService (MS_BB_ADDBUTTON, 0, (LPARAM)&bbd); - - return 0; -} - -static void TabsrmmButtonsModify(HANDLE hContact) -{ - if (!DirectoryExists(hContact)) - { - BBButton bbd = {0}; - bbd.cbSize = sizeof(BBButton); - bbd.dwButtonID = 0; - bbd.pszModuleName = MODULENAME; - bbd.bbbFlags = BBSF_DISABLED | BBSF_HIDDEN; - CallService(MS_BB_SETBUTTONSTATE, (WPARAM)hContact, (LPARAM)&bbd); - } -} - -static int ContactWindowOpen(WPARAM wparam,LPARAM lParam) -{ - MessageWindowEventData *MWeventdata = (MessageWindowEventData*)lParam; - - if(MWeventdata->uType == MSG_WINDOW_EVT_OPENING && MWeventdata->hContact) - { - TabsrmmButtonsModify(MWeventdata->hContact); - } - return 0; -} - -static int ContactSettingChanged( WPARAM wParam, LPARAM lParam ) -{ // NSN - DBCONTACTWRITESETTING *cws = ( DBCONTACTWRITESETTING* )lParam; - WORD newStatus = 0, oldStatus = 0; - DWORD dwStatuses = 0; - time_t tCurrentTime; - char *lpzProto; - - if ( ( HANDLE )wParam == NULL || lstrcmpA( cws->szSetting, "Status" )) - return 0; - - newStatus = cws->value.wVal; - oldStatus = DBGetContactSettingWord((HANDLE)wParam,"UserOnline","OldStatus2",ID_STATUS_OFFLINE ); - if (oldStatus == newStatus) - return 0; - - tCurrentTime = time( NULL ); - lpzProto = ( char* )CallService( MS_PROTO_GETCONTACTBASEPROTO, ( WPARAM )wParam, 0); - - // ignore chat rooms - if (DBGetContactSettingByte((HANDLE)wParam, lpzProto, "ChatRoom", 0)) - return 0; - - if (oldStatus == ID_STATUS_OFFLINE) - { - // set online timestamp for this contact, only when not set already - if (!DBGetContactSettingDword( ( HANDLE )wParam, lpzProto, "LogonTS", FALSE)) - DBWriteContactSettingDword( ( HANDLE )wParam, lpzProto, "LogonTS", ( DWORD )tCurrentTime); - - // TODO: dont reset logoff timestamp? - DBDeleteContactSetting( ( HANDLE )wParam, lpzProto, "LogoffTS"); - - // TESTING: updating user's details - if (DBGetContactSettingDword(NULL, VISPLG, "flags", vf_default) & VF_REFRESH) - { - // don't refresh Hidden or NotOnList contact's details - if (!DBGetContactSettingByte((HANDLE)wParam, "CList", "Hidden", 0) && !DBGetContactSettingByte((HANDLE)wParam, "CList", "NotOnList", 0)) - CallContactService( ( HANDLE )wParam, PSS_GETINFO, 0, 0 ); - } - } - if (newStatus == ID_STATUS_OFFLINE) - { - // set offline timestamp for this contact - DBWriteContactSettingDword( ( HANDLE )wParam, lpzProto, "LogoffTS", ( DWORD )tCurrentTime); - // reset logon timestamp - DBDeleteContactSetting( ( HANDLE )wParam, lpzProto, "LogonTS"); - - // set last status for this contact - DBWriteContactSettingDword( ( HANDLE )wParam, lpzProto, "LastStatus", ( DWORD )oldStatus); - } - DBWriteContactSettingWord( ( HANDLE )wParam, "UserOnline", "OldStatus2", newStatus); - - return 0; -} - -// called when all modules are loaded -static int PluginInit(WPARAM wparam,LPARAM lparam) -{ - int pos = 1000, i = 0; - - CLISTMENUITEM mi; - - IconsInit(); - - bMetaContacts = ServiceExists(MS_MC_GETMETACONTACT) != 0; - bMir_08 = ServiceExists(MS_PROTO_GETACCOUNT) != 0; - - hServices[0] = CreateServiceFunction(MS_SETINVIS,onSetInvis); - hServices[1] = CreateServiceFunction(MS_SETVIS,onSetVis); - hServices[2] = CreateServiceFunction(MS_HIDE,onHide); - hServices[3] = CreateServiceFunction(MS_IGNORE,onIgnore); - if (bMir_08) - hServices[4] = CreateServiceFunction(MS_PROTO,onChangeProto); - hServices[5] = CreateServiceFunction(MS_ADDED,onSendAdded); - hServices[6] = CreateServiceFunction(MS_AUTHREQ,onSendAuthRequest); - hServices[7] = CreateServiceFunction(MS_COPYID,onCopyID); - hServices[8] = CreateServiceFunction(MS_RECVFILES,onRecvFiles); - hServices[9] = CreateServiceFunction(MS_STATUSMSG,onCopyStatusMsg); - hServices[10] = CreateServiceFunction(MS_COPYIP,onCopyIP); - hServices[11] = CreateServiceFunction(MS_COPYMIRVER,onCopyMirVer); - - mi.cbSize = sizeof(CLISTMENUITEM); - mi.flags = CMIF_TCHAR; - mi.hIcon = NULL; - mi.pszContactOwner = NULL; - - mi.position = 120000; - mi.ptszName = LPGENT("Always visible"); - mi.pszService = MS_SETVIS; - hmenuVis = Menu_AddContactMenuItem(&mi); - - mi.position++; - mi.ptszName = LPGENT("Never visible"); - mi.pszService = MS_SETINVIS; - hmenuOff = Menu_AddContactMenuItem(&mi); - - mi.position++; - mi.ptszName = NULL; - mi.pszService = MS_HIDE; - hmenuHide = Menu_AddContactMenuItem(&mi); - - mi.position++; - mi.pszPopupName = (char*)-1; // for Miranda 0.7 - mi.ptszName = LPGENT("Ignore"); - mi.pszService = 0; - mi.flags |= CMIF_ROOTHANDLE; - mi.hIcon = (HICON)CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_ignore" ); - hmenuIgnore = Menu_AddContactMenuItem(&mi); - - hIgnoreItem[0] = AddSubmenuItem(hmenuIgnore, ii[0].name, LoadSkinnedIcon(ii[0].icon), 0, MS_IGNORE, pos, ii[0].type ); - pos += 100000; // insert separator - for (i = 1; i < SIZEOF(ii); i++) - hIgnoreItem[i] = AddSubmenuItem(hmenuIgnore, ii[i].name, LoadSkinnedIcon(ii[i].icon), 0, MS_IGNORE, pos++, ii[i].type ); - - pos += 100000; // insert separator - ood.cbSize = sizeof(ood); - ood.pszGroup = "Events"; - ood.pszPage = "Ignore"; - AddSubmenuItem(hmenuIgnore, LPGENT("Open ignore settings"), (HICON)CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_ignore"), 0, MS_OPT_OPENOPTIONS, pos, (int)&ood ); - - mi.pszPopupName = 0; - if (bMir_08) { - mi.position++; - mi.ptszName = LPGENT("Copy to Account"); - mi.pszService = MS_PROTO; - mi.hIcon = ( HICON )CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_protocol"); - hmenuProto = Menu_AddContactMenuItem(&mi); - - EnumProtoSubmenu(0, 0); - } - - mi.flags = CMIF_TCHAR; - - mi.position++; - mi.ptszName = LPGENT("Send 'You were added'"); - mi.pszService = MS_ADDED; - mi.hIcon = ( HICON )CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_added"); - hmenuAdded = Menu_AddContactMenuItem(&mi); - - mi.position++; - mi.ptszName = LPGENT("Request authorization"); - mi.pszService = MS_AUTHREQ; - mi.hIcon = ( HICON )CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_authorization"); - hmenuAuthReq = Menu_AddContactMenuItem(&mi); - - mi.position++; - mi.ptszName = LPGENT("Copy ID"); - mi.pszService = MS_COPYID; - hmenuCopyID = Menu_AddContactMenuItem(&mi); - - mi.position++; - mi.ptszName = LPGENT("Browse Received Files"); - mi.pszService = MS_RECVFILES; - mi.hIcon = ( HICON )CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_recfiles"); - hmenuRecvFiles = Menu_AddContactMenuItem(&mi); - - mi.position++; - mi.ptszName = LPGENT("Copy Status Message"); - mi.pszService = MS_STATUSMSG; - mi.hIcon = NULL;//LoadIcon(hinstance, MAKEINTRESOURCE(IDI_ICON5)); - hmenuStatusMsg = Menu_AddContactMenuItem(&mi); - - mi.position++; - mi.ptszName = LPGENT("Copy IP"); - mi.pszService = MS_COPYIP; - hmenuCopyIP = Menu_AddContactMenuItem(&mi); - - mi.position++; - mi.ptszName = LPGENT("Copy MirVer"); - mi.pszService = MS_COPYMIRVER; - hmenuCopyMirVer = Menu_AddContactMenuItem(&mi); - - hIcon[0] = ( HICON )CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_copymver"); - hIcon[1] = ( HICON )CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_vis"); - hIcon[2] = ( HICON )CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_invis"); - hIcon[3] = MakeHalfAlphaIcon(hIcon[1]); - hIcon[4] = MakeHalfAlphaIcon(hIcon[2]); - - hHooks[0] = HookEvent(ME_CLIST_PREBUILDCONTACTMENU,BuildMenu); - hHooks[1] = HookEvent(ME_OPT_INITIALISE,OptionsInit); - hHooks[2] = HookEvent(ME_DB_CONTACT_SETTINGCHANGED,ContactSettingChanged); - if (bMir_08) - hHooks[3] = HookEvent(ME_PROTO_ACCLISTCHANGED, EnumProtoSubmenu); - hHooks[4] = HookEvent(ME_MSG_TOOLBARLOADED, TabsrmmButtonsInit); - if (hHooks[4]) - { - hHooks[5] = HookEvent(ME_MSG_BUTTONPRESSED, TabsrmmButtonPressed); - hHooks[6] = HookEvent(ME_MSG_WINDOWEVENT,ContactWindowOpen); - } - - return 0; -} - -extern "C" __declspec(dllexport) const MUUID MirandaInterfaces[] = {MIID_MENUEX, MIID_LAST}; - -extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion) -{ - return &pluginInfoEx; -} - -extern "C" __declspec(dllexport) int Load(void) -{ - - mir_getLP(&pluginInfoEx); - hHooks[7] = HookEvent(ME_SYSTEM_MODULESLOADED,PluginInit); - return 0; -} - -extern "C" __declspec(dllexport) int Unload(void) -{ - int i; - for (i = 0; i < SIZEOF(hHooks); i++) - { - if (hHooks[i]) - UnhookEvent(hHooks[i]); - } - for (i = 0; i < SIZEOF(hServices); i++) - { - if (hServices[i]) - DestroyServiceFunction(hServices[i]); - } - - DestroyIcon( hIcon[3] ); - DestroyIcon( hIcon[4] ); - return 0; -} - -BOOL WINAPI DllMain(HINSTANCE hinst,DWORD fdwReason,LPVOID lpvReserved) -{ - hinstance = hinst; - return 1; -} \ No newline at end of file diff --git a/plugins/MenuItemEx/menuex.h b/plugins/MenuItemEx/menuex.h deleted file mode 100644 index 5f6540827a..0000000000 --- a/plugins/MenuItemEx/menuex.h +++ /dev/null @@ -1,73 +0,0 @@ -#ifndef MENUEX_H__ -#define MENUEX_H__ - -#define _CRT_SECURE_NO_DEPRECATE -#define MIRANDA_VER 0x0A00 - -#include "m_stdhdr.h" -#include -#include "resource.h" -#include -#include "newpluginapi.h" -#include "win2k.h" -#include "time.h" -#include "m_system.h" -#include "m_utils.h" -#include "m_options.h" -#include "m_database.h" -#include "m_langpack.h" -#include "m_file.h" -#include "m_clist.h" -#include "m_protosvc.h" -#include "m_protomod.h" -#include "m_clui.h" -#include "m_ignore.h" -#include "m_icolib.h" -#include "m_skin.h" -#include "m_genmenu.h" -#include "m_popup.h" -#include "m_message.h" -#include "m_fingerprint.h" -#include "m_metacontacts.h" -#include "m_msg_buttonsbar.h" - -#pragma optimize("gsy",on) - -#define VISPLG "MenuItemEx" -#define MODULENAME VISPLG - -#define MIIM_STRING 0x00000040 - -extern PLUGININFOEX pluginInfoEx; - -int OptionsInit(WPARAM,LPARAM); - -#define MAX_PROTOS 32 -#define MAX_GROUPS 32 -#define MAX_IDLEN 16 - -#define VF_VS 0x00000001 -#define VF_SMNAME 0x00000002 -#define VF_HFL 0x00000004 -#define VF_IGN 0x00000008 -#define VF_PROTO 0x00000010 -#define VF_SHOWID 0x00000020 -#define VF_ADD 0x00000040 -#define VF_REQ 0x00000080 -#define VF_CID 0x00000100 -#define VF_RECV 0x00000200 -#define VF_STAT 0x00000400 -#define VF_CIDN 0x00000800 -#define VF_CIP 0x00001000 -#define VF_SAI 0x00002000 -#define VF_TRIMID 0x00004000 -#define VF_CMV 0x00008000 -#define VF_IGNH 0x00010000 -#define VF_REFRESH 0x00020000 - -#define CTRL_IS_PRESSED (GetAsyncKeyState(VK_CONTROL)&0x8000) - -extern const int vf_default; -extern BOOL bMir_08; - -#endif diff --git a/plugins/MenuItemEx/menuex.rc b/plugins/MenuItemEx/menuex.rc deleted file mode 100644 index be750a05b7..0000000000 --- a/plugins/MenuItemEx/menuex.rc +++ /dev/null @@ -1,156 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// Neutral resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) -#ifdef _WIN32 -LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -#pragma code_page(1250) -#endif //_WIN32 - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_ICON0 ICON "icons\\hide_from_list.ico" -IDI_ICON1 ICON "icons\\Always Visible.ico" -IDI_ICON2 ICON "icons\\Never Visible.ico" -IDI_ICON3 ICON "icons\\copyid_overlay.ico" -IDI_ICON4 ICON "icons\\auth_added.ico" -IDI_ICON5 ICON "icons\\auth_ask.ico" -IDI_ICON6 ICON "icons\\change_proto.ico" -IDI_ICON7 ICON "icons\\ignore_list.ico" -IDI_ICON8 ICON "icons\\show_in_list.ico" -IDI_ICON9 ICON "icons\\msg_status.ico" -IDI_ICON10 ICON "icons\\msg_xstatus.ico" -IDI_ICON11 ICON "icons\\copyip_overlay.ico" -IDI_ICON12 ICON "icons\\recv_files.ico" -IDI_ICON13 ICON "icons\\CopyMirVer.ico" - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_AUTHREQ DIALOGEX 0, 0, 186, 95 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION -CAPTION "Enter an authorization request" -FONT 8, "MS Shell Dlg", 0, 0, 0x1 -BEGIN - DEFPUSHBUTTON "&Send",IDOK,34,74,50,14 - PUSHBUTTON "&Cancel",IDCANCEL,98,74,50,14 - EDITTEXT IDC_REASON,7,7,172,59,ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN -END - -IDD_OPTIONS DIALOGEX 0, 0, 280, 183 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 0, 0, 0x1 -BEGIN - GROUPBOX "Shown menu items",IDC_STATIC,7,7,266,180 - CONTROL "Visibility",IDC_VIS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,18,77,10 - CONTROL "Show alpha icons",IDC_SHOWALPHAICONS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,18,104,10 - CONTROL "Hide from list",IDC_HIDE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,30,77,10 - CONTROL "Ignore",IDC_IGNORE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,42,140,10 - CONTROL "Copy to Account (Ctrl+click for move to Account)",IDC_PROTOS, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,54,192,10 - CONTROL "Send 'You were added'",IDC_ADDED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,66,158,10 - CONTROL "Request Authorization",IDC_AUTHREQ,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,78,157,10 - CONTROL "Browse Received Files",IDC_RECVFILES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,90,158,10 - CONTROL "Copy IP",IDC_COPYIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,102,157,10 - CONTROL "Copy MirVer",IDC_COPYMIRVER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,114,157,10 - CONTROL "Copy Status Message",IDC_STATUSMSG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,126,144,10 - CONTROL "Add item name",IDC_SMNAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,126,104,10 - CONTROL "Copy ID",IDC_COPYID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,138,76,10 - CONTROL "Add protocol name",IDC_COPYIDNAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,138,104,10 - CONTROL "Show ID in menu item",IDC_SHOWID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,150,132,10 - CONTROL "Trim too long ID",IDC_TRIMID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,150,104,10 - LTEXT "* Use Ctrl+click to see popup with the copied text",IDC_HINT1,15,164,249,18 - CONTROL "Hide contact on 'Ignore all'",IDC_IGNOREHIDE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,42,104,10 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_AUTHREQ, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 179 - TOPMARGIN, 7 - BOTTOMMARGIN, 64 - END - - IDD_OPTIONS, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 273 - TOPMARGIN, 7 - BOTTOMMARGIN, 177 - END -END -#endif // APSTUDIO_INVOKED - - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" - "version.rc\0" -END - -2 TEXTINCLUDE -BEGIN - "#include \r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - -#endif // Neutral resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/plugins/MenuItemEx/menuex_10.vcxproj b/plugins/MenuItemEx/menuex_10.vcxproj index fd55658b45..48e23a80ac 100644 --- a/plugins/MenuItemEx/menuex_10.vcxproj +++ b/plugins/MenuItemEx/menuex_10.vcxproj @@ -132,7 +132,6 @@ ..\..\include\msapi - /filealign:0x200 %(AdditionalOptions) msimg32.lib;%(AdditionalDependencies) type=%27Win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 processorArchitecture=%27X86%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27;%(AdditionalManifestDependencies) true @@ -161,7 +160,6 @@ ..\..\include\msapi - /filealign:0x200 %(AdditionalOptions) msimg32.lib;%(AdditionalDependencies) type=%27Win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 processorArchitecture=%27*%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27;%(AdditionalManifestDependencies) true @@ -175,33 +173,19 @@ - - - + + + - - - + + + + - - - - - - - - - - - - - - - - - + + diff --git a/plugins/MenuItemEx/menuex_10.vcxproj.filters b/plugins/MenuItemEx/menuex_10.vcxproj.filters index bd0660ac98..19cda8f373 100644 --- a/plugins/MenuItemEx/menuex_10.vcxproj.filters +++ b/plugins/MenuItemEx/menuex_10.vcxproj.filters @@ -15,74 +15,36 @@ - + Source Files - + Source Files - + Source Files - + Header Files - + Header Files - + + Header Files + + Header Files - + Resource Files - - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - + Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - - - Resource Files - + \ No newline at end of file diff --git a/plugins/MenuItemEx/menuitemex-translation.txt b/plugins/MenuItemEx/menuitemex-translation.txt deleted file mode 100644 index e894e19776..0000000000 --- a/plugins/MenuItemEx/menuitemex-translation.txt +++ /dev/null @@ -1,55 +0,0 @@ -; Common strings that belong to many files -;[&Cancel] -;[&Send] -;[* Use Ctrl+click to see popup with the copied text] -;[Add item name] -;[Add protocol name] -;[Browse Received Files] -;[Copy ID] -;[Copy IP] -;[Copy MirVer] -;[Copy Status Message] -;[Copy to Account (Ctrl+click for move to Account)] -;[Enter an authorization request] -;[Hide contact on 'Ignore all'] -;[Hide from list] -;[Ignore] -;[Request Authorization] -;[Send 'You were added'] -;[Show ID in menu item] -;[Show alpha icons] -;[Shown menu items] -;[Trim too long ID] -;[Visibility] - -; ../../plugins/MenuItemEx/main.cpp -;[Activity text] -;[Activity title] -;[All] -;[Always visible] -;[Authorization] -;[Copy to Account] -;[Do you want to send authorization request\nto new contact?] -;[Files] -;[Listening to] -;[Messages] -;[Miranda IM] -;[Never visible] -;[Open ignore settings] -;[Please authorize me to add you to my contact list.] -;[Request authorization] -;[Show in list] -;[Status message] -;[Typing Notify] -;[URL] -;[User Online] -;[XStatus message] -;[XStatus title] -;[You Were Added] - -; ../../plugins/MenuItemEx/options.cpp -;[Customize] - -; ../../plugins/MenuItemEx/resource.rc -;[Automatically refresh contact's details after they come online] -;[Other options] diff --git a/plugins/MenuItemEx/options.cpp b/plugins/MenuItemEx/options.cpp deleted file mode 100644 index 0aa0bbb68b..0000000000 --- a/plugins/MenuItemEx/options.cpp +++ /dev/null @@ -1,136 +0,0 @@ -#include "menuex.h" - - -extern HINSTANCE hinstance; - -struct { - int idc; - int flag; -} -static const checkboxes[]={ - { IDC_COPYID, VF_CID }, - { IDC_STATUSMSG, VF_STAT }, - { IDC_COPYIP, VF_CIP }, - { IDC_COPYMIRVER, VF_CMV }, - { IDC_VIS, VF_VS }, - { IDC_SHOWALPHAICONS, VF_SAI }, - { IDC_HIDE, VF_HFL }, - { IDC_IGNORE, VF_IGN }, - { IDC_IGNOREHIDE, VF_IGNH }, - { IDC_PROTOS, VF_PROTO }, - { IDC_ADDED, VF_ADD }, - { IDC_AUTHREQ, VF_REQ }, - { IDC_SHOWID, VF_SHOWID }, - { IDC_COPYIDNAME, VF_CIDN }, - { IDC_RECVFILES, VF_RECV }, - { IDC_SMNAME, VF_SMNAME }, - { IDC_TRIMID, VF_TRIMID }, - { IDC_REFRESH_DETAILS, VF_REFRESH } -}; - -INT_PTR CALLBACK OptionsProc(HWND hdlg,UINT msg,WPARAM wparam,LPARAM lparam) -{ - DWORD flags=DBGetContactSettingDword(NULL,VISPLG,"flags",vf_default); - TCHAR buffer[64] = {0}; - int i; - - switch(msg) - { - case WM_INITDIALOG: - - TranslateDialogDefault(hdlg); - - for (i = 0; i < SIZEOF(checkboxes); i++) - { - CheckDlgButton(hdlg, checkboxes[i].idc, (flags & checkboxes[i].flag) ? BST_CHECKED : BST_UNCHECKED); - } - - if (ServiceExists(MS_POPUP_ADDPOPUP)) - { - for (i = 0; i < 4; i++) - { - GetDlgItemText(hdlg, checkboxes[i].idc, buffer, SIZEOF(buffer) - 3); - _tcscat(buffer, _T(" *")); - SetDlgItemText(hdlg, checkboxes[i].idc, buffer); - } - } - else - ShowWindow(GetDlgItem(hdlg, IDC_HINT1), SW_HIDE); - - if (!bMir_08) - EnableWindow(GetDlgItem(hdlg,IDC_PROTOS), 0); - - SendMessage(hdlg, WM_USER + 50, 0, 0); - return 0; - - case WM_USER+50: - - EnableWindow(GetDlgItem(hdlg,IDC_SHOWALPHAICONS), - IsDlgButtonChecked(hdlg,IDC_VIS) == BST_CHECKED); - EnableWindow(GetDlgItem(hdlg,IDC_IGNOREHIDE), - IsDlgButtonChecked(hdlg,IDC_IGNORE) == BST_CHECKED); - EnableWindow(GetDlgItem(hdlg,IDC_COPYIDNAME), - IsDlgButtonChecked(hdlg,IDC_COPYID) == BST_CHECKED); - EnableWindow(GetDlgItem(hdlg,IDC_SHOWID), - IsDlgButtonChecked(hdlg,IDC_COPYID) == BST_CHECKED); - EnableWindow(GetDlgItem(hdlg,IDC_TRIMID), - (IsDlgButtonChecked(hdlg,IDC_COPYID) == BST_CHECKED && IsDlgButtonChecked(hdlg,IDC_SHOWID) == BST_CHECKED)); - EnableWindow(GetDlgItem(hdlg,IDC_SMNAME), - IsDlgButtonChecked(hdlg,IDC_STATUSMSG) == BST_CHECKED); - return 1; - - case WM_NOTIFY: - switch(((LPNMHDR)lparam)->code){ - case PSN_APPLY: - { - DWORD mod_flags=0; - - for (i = 0; i < SIZEOF(checkboxes); i++) - { - mod_flags |= IsDlgButtonChecked(hdlg, checkboxes[i].idc) ? checkboxes[i].flag : 0; - } - - //DBDeleteContactSetting(NULL,VISPLG,"flags"); - DBWriteContactSettingDword(NULL,VISPLG,"flags",mod_flags); - - return 1; - } - } - break; - - case WM_COMMAND: - if(HIWORD(wparam)==BN_CLICKED && GetFocus()==(HWND)lparam) { - SendMessage(GetParent(hdlg),PSM_CHANGED,0,0); - if (LOWORD(wparam) == IDC_VIS || - LOWORD(wparam) == IDC_IGNORE || - LOWORD(wparam) == IDC_COPYID || - LOWORD(wparam) == IDC_STATUSMSG || - LOWORD(wparam) == IDC_SHOWID) { - - SendMessage(hdlg, WM_USER + 50, 0, 0); - } - } - return 0; - - case WM_CLOSE: - EndDialog(hdlg,0); - return 0; - } - return 0; -} - -int OptionsInit(WPARAM wparam,LPARAM lparam) -{ - OPTIONSDIALOGPAGE odp={0}; - odp.cbSize = sizeof(odp); - odp.position = 955000000; - odp.hInstance = hinstance; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTIONS); - odp.pszTitle = MODULENAME; - odp.pfnDlgProc = OptionsProc; - odp.pszGroup = LPGEN("Customize"); - odp.flags = ODPF_BOLDGROUPS; - Options_AddPage(wparam,&odp); - - return 0; -} diff --git a/plugins/MenuItemEx/res/Always Visible.ico b/plugins/MenuItemEx/res/Always Visible.ico new file mode 100644 index 0000000000..25c1a925ee Binary files /dev/null and b/plugins/MenuItemEx/res/Always Visible.ico differ diff --git a/plugins/MenuItemEx/res/CopyID_overlay.ico b/plugins/MenuItemEx/res/CopyID_overlay.ico new file mode 100644 index 0000000000..4c5bc0af9e Binary files /dev/null and b/plugins/MenuItemEx/res/CopyID_overlay.ico differ diff --git a/plugins/MenuItemEx/res/CopyMirVer.ico b/plugins/MenuItemEx/res/CopyMirVer.ico new file mode 100644 index 0000000000..9b7bc67cf9 Binary files /dev/null and b/plugins/MenuItemEx/res/CopyMirVer.ico differ diff --git a/plugins/MenuItemEx/res/Ignore_list.ico b/plugins/MenuItemEx/res/Ignore_list.ico new file mode 100644 index 0000000000..5635149232 Binary files /dev/null and b/plugins/MenuItemEx/res/Ignore_list.ico differ diff --git a/plugins/MenuItemEx/res/Never Visible.ico b/plugins/MenuItemEx/res/Never Visible.ico new file mode 100644 index 0000000000..131ae02580 Binary files /dev/null and b/plugins/MenuItemEx/res/Never Visible.ico differ diff --git a/plugins/MenuItemEx/res/auth_added.ico b/plugins/MenuItemEx/res/auth_added.ico new file mode 100644 index 0000000000..fa37e9357c Binary files /dev/null and b/plugins/MenuItemEx/res/auth_added.ico differ diff --git a/plugins/MenuItemEx/res/auth_ask.ico b/plugins/MenuItemEx/res/auth_ask.ico new file mode 100644 index 0000000000..d8879d15bb Binary files /dev/null and b/plugins/MenuItemEx/res/auth_ask.ico differ diff --git a/plugins/MenuItemEx/res/change_proto.ico b/plugins/MenuItemEx/res/change_proto.ico new file mode 100644 index 0000000000..07c72f9287 Binary files /dev/null and b/plugins/MenuItemEx/res/change_proto.ico differ diff --git a/plugins/MenuItemEx/res/copyip_overlay.ico b/plugins/MenuItemEx/res/copyip_overlay.ico new file mode 100644 index 0000000000..2823f13456 Binary files /dev/null and b/plugins/MenuItemEx/res/copyip_overlay.ico differ diff --git a/plugins/MenuItemEx/res/hide_from_list.ico b/plugins/MenuItemEx/res/hide_from_list.ico new file mode 100644 index 0000000000..69fb9f91c4 Binary files /dev/null and b/plugins/MenuItemEx/res/hide_from_list.ico differ diff --git a/plugins/MenuItemEx/res/msg_status.ico b/plugins/MenuItemEx/res/msg_status.ico new file mode 100644 index 0000000000..1d0607d4ad Binary files /dev/null and b/plugins/MenuItemEx/res/msg_status.ico differ diff --git a/plugins/MenuItemEx/res/msg_xStatus.ico b/plugins/MenuItemEx/res/msg_xStatus.ico new file mode 100644 index 0000000000..d057d353ff Binary files /dev/null and b/plugins/MenuItemEx/res/msg_xStatus.ico differ diff --git a/plugins/MenuItemEx/res/recv_files.ico b/plugins/MenuItemEx/res/recv_files.ico new file mode 100644 index 0000000000..d8e15aa836 Binary files /dev/null and b/plugins/MenuItemEx/res/recv_files.ico differ diff --git a/plugins/MenuItemEx/res/resource.rc b/plugins/MenuItemEx/res/resource.rc new file mode 100644 index 0000000000..bec11ac250 --- /dev/null +++ b/plugins/MenuItemEx/res/resource.rc @@ -0,0 +1,162 @@ +// Microsoft Visual C++ generated resource script. +// +#include "..\src\resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Neutral resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +#pragma code_page(1250) + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_ICON0 ICON "hide_from_list.ico" +IDI_ICON1 ICON "Always Visible.ico" +IDI_ICON2 ICON "Never Visible.ico" +IDI_ICON3 ICON "copyid_overlay.ico" +IDI_ICON4 ICON "auth_added.ico" +IDI_ICON5 ICON "auth_ask.ico" +IDI_ICON6 ICON "change_proto.ico" +IDI_ICON7 ICON "ignore_list.ico" +IDI_ICON8 ICON "show_in_list.ico" +IDI_ICON9 ICON "msg_status.ico" +IDI_ICON10 ICON "msg_xstatus.ico" +IDI_ICON11 ICON "copyip_overlay.ico" +IDI_ICON12 ICON "recv_files.ico" +IDI_ICON13 ICON "CopyMirVer.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_AUTHREQ DIALOGEX 0, 0, 186, 95 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "Enter an authorization request" +FONT 8, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "&Send",IDOK,34,74,50,14 + PUSHBUTTON "&Cancel",IDCANCEL,98,74,50,14 + EDITTEXT IDC_REASON,7,7,172,59,ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN +END + +IDD_OPTIONS DIALOGEX 0, 0, 280, 217 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE +EXSTYLE WS_EX_CONTROLPARENT +FONT 8, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + GROUPBOX "Shown menu items",IDC_STATIC,7,7,266,173 + CONTROL "Visibility",IDC_VIS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,18,136,10 + CONTROL "Show alpha icons",IDC_SHOWALPHAICONS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,18,105,10 + CONTROL "Hide from list",IDC_HIDE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,30,136,10 + CONTROL "Ignore",IDC_IGNORE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,42,136,10 + CONTROL "Copy to Account (Ctrl+click for move to Account)",IDC_PROTOS, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,54,251,10 + CONTROL "Send 'You were added'",IDC_ADDED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,66,136,10 + CONTROL "Request Authorization",IDC_AUTHREQ,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,78,136,10 + CONTROL "Browse Received Files",IDC_RECVFILES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,90,136,10 + CONTROL "Copy IP",IDC_COPYIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,102,136,10 + CONTROL "Copy MirVer",IDC_COPYMIRVER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,114,136,10 + CONTROL "Copy Status Message",IDC_STATUSMSG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,126,136,10 + CONTROL "Add item name",IDC_SMNAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,126,105,10 + CONTROL "Copy ID",IDC_COPYID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,138,136,10 + CONTROL "Add protocol name",IDC_COPYIDNAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,138,105,10 + CONTROL "Show ID in menu item",IDC_SHOWID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,150,127,10 + CONTROL "Trim too long ID",IDC_TRIMID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,150,105,10 + LTEXT "* Use Ctrl+click to see popup with the copied text",IDC_HINT1,16,164,251,11 + CONTROL "Hide contact on 'Ignore all'",IDC_IGNOREHIDE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,42,105,10 + GROUPBOX "Other options",IDC_STATIC,7,184,266,27 + CONTROL "Automatically refresh contact's details after they come online",IDC_REFRESH_DETAILS, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,196,251,10 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_AUTHREQ, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 179 + TOPMARGIN, 7 + BOTTOMMARGIN, 64 + END + + IDD_OPTIONS, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 273 + VERTGUIDE, 16 + VERTGUIDE, 25 + VERTGUIDE, 152 + VERTGUIDE, 162 + VERTGUIDE, 214 + VERTGUIDE, 267 + TOPMARGIN, 7 + BOTTOMMARGIN, 211 + END +END +#endif // APSTUDIO_INVOKED + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "..\\src\\resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include \r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // Neutral resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/plugins/MenuItemEx/res/salad.right.ico b/plugins/MenuItemEx/res/salad.right.ico new file mode 100644 index 0000000000..03dd1f4e9d Binary files /dev/null and b/plugins/MenuItemEx/res/salad.right.ico differ diff --git a/plugins/MenuItemEx/res/show_in_list.ico b/plugins/MenuItemEx/res/show_in_list.ico new file mode 100644 index 0000000000..bea1dfd738 Binary files /dev/null and b/plugins/MenuItemEx/res/show_in_list.ico differ diff --git a/plugins/MenuItemEx/res/version.rc b/plugins/MenuItemEx/res/version.rc new file mode 100644 index 0000000000..981fcdaebc --- /dev/null +++ b/plugins/MenuItemEx/res/version.rc @@ -0,0 +1,43 @@ +#ifdef APSTUDIO_INVOKED +#error this file is not editable by Microsoft Visual C++ +#endif //APSTUDIO_INVOKED + +#include "..\src\version.h" +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION __FILEVERSION_STRING + PRODUCTVERSION __FILEVERSION_STRING + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "FileDescription", __PLUGIN_NAME + VALUE "FileVersion", __VERSION_STRING + VALUE "InternalName", "menuex" + VALUE "LegalCopyright", __COPYRIGHTS + VALUE "OriginalFilename", "menuex.dll" + VALUE "ProductName", "menuex" + VALUE "ProductVersion", __VERSION_STRING + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END diff --git a/plugins/MenuItemEx/resource.h b/plugins/MenuItemEx/resource.h deleted file mode 100644 index 18b7de34cd..0000000000 --- a/plugins/MenuItemEx/resource.h +++ /dev/null @@ -1,52 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by resource.rc -// -#define IDD_OPTIONS 101 -#define IDD_AUTHREQ 103 -#define IDI_ICON0 110 -#define IDI_ICON1 111 -#define IDI_ICON2 112 -#define IDI_ICON3 113 -#define IDI_ICON4 114 -#define IDI_ICON5 115 -#define IDI_ICON6 116 -#define IDI_ICON7 117 -#define IDI_ICON8 118 -#define IDI_ICON9 119 -#define IDI_ICON10 120 -#define IDI_ICON11 121 -#define IDI_ICON12 122 -#define IDI_ICON13 123 -#define IDC_VIS 1000 -#define IDC_REASON 1001 -#define IDC_HIDE 1002 -#define IDC_IGNORE 1003 -#define IDC_PROTOS 1004 -#define IDC_REFRESH_DETAILS 1005 -#define IDC_ADDED 1006 -#define IDC_AUTHREQ 1007 -#define IDC_COPYID 1008 -#define IDC_RECVFILES 1009 -#define IDC_STATUSMSG 1010 -#define IDC_COPYIDNAME 1011 -#define IDC_COPYIP 1012 -#define IDC_SHOWALPHAICONS 1013 -#define IDC_SMNAME 1014 -#define IDC_COPYMIRVER 1015 -#define IDC_HINT1 1016 -#define IDC_SHOWID 1017 -#define IDC_TRIMID 1018 -#define IDC_IGNOREHIDE 1019 -#define IDC_STATIC -1 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 124 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1017 -#define _APS_NEXT_SYMED_VALUE 125 -#endif -#endif diff --git a/plugins/MenuItemEx/resource.rc b/plugins/MenuItemEx/resource.rc deleted file mode 100644 index 9424bfb831..0000000000 --- a/plugins/MenuItemEx/resource.rc +++ /dev/null @@ -1,201 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// Neutral resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) -LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -#pragma code_page(1250) - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_ICON0 ICON "icons\\hide_from_list.ico" -IDI_ICON1 ICON "icons\\Always Visible.ico" -IDI_ICON2 ICON "icons\\Never Visible.ico" -IDI_ICON3 ICON "icons\\copyid_overlay.ico" -IDI_ICON4 ICON "icons\\auth_added.ico" -IDI_ICON5 ICON "icons\\auth_ask.ico" -IDI_ICON6 ICON "icons\\change_proto.ico" -IDI_ICON7 ICON "icons\\ignore_list.ico" -IDI_ICON8 ICON "icons\\show_in_list.ico" -IDI_ICON9 ICON "icons\\msg_status.ico" -IDI_ICON10 ICON "icons\\msg_xstatus.ico" -IDI_ICON11 ICON "icons\\copyip_overlay.ico" -IDI_ICON12 ICON "icons\\recv_files.ico" -IDI_ICON13 ICON "icons\\CopyMirVer.ico" - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_AUTHREQ DIALOGEX 0, 0, 186, 95 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION -CAPTION "Enter an authorization request" -FONT 8, "MS Shell Dlg", 0, 0, 0x1 -BEGIN - DEFPUSHBUTTON "&Send",IDOK,34,74,50,14 - PUSHBUTTON "&Cancel",IDCANCEL,98,74,50,14 - EDITTEXT IDC_REASON,7,7,172,59,ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN -END - -IDD_OPTIONS DIALOGEX 0, 0, 280, 217 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 0, 0, 0x1 -BEGIN - GROUPBOX "Shown menu items",IDC_STATIC,7,7,266,173 - CONTROL "Visibility",IDC_VIS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,18,136,10 - CONTROL "Show alpha icons",IDC_SHOWALPHAICONS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,18,105,10 - CONTROL "Hide from list",IDC_HIDE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,30,136,10 - CONTROL "Ignore",IDC_IGNORE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,42,136,10 - CONTROL "Copy to Account (Ctrl+click for move to Account)",IDC_PROTOS, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,54,251,10 - CONTROL "Send 'You were added'",IDC_ADDED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,66,136,10 - CONTROL "Request Authorization",IDC_AUTHREQ,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,78,136,10 - CONTROL "Browse Received Files",IDC_RECVFILES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,90,136,10 - CONTROL "Copy IP",IDC_COPYIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,102,136,10 - CONTROL "Copy MirVer",IDC_COPYMIRVER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,114,136,10 - CONTROL "Copy Status Message",IDC_STATUSMSG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,126,136,10 - CONTROL "Add item name",IDC_SMNAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,126,105,10 - CONTROL "Copy ID",IDC_COPYID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,138,136,10 - CONTROL "Add protocol name",IDC_COPYIDNAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,138,105,10 - CONTROL "Show ID in menu item",IDC_SHOWID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,150,127,10 - CONTROL "Trim too long ID",IDC_TRIMID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,150,105,10 - LTEXT "* Use Ctrl+click to see popup with the copied text",IDC_HINT1,16,164,251,11 - CONTROL "Hide contact on 'Ignore all'",IDC_IGNOREHIDE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,42,105,10 - GROUPBOX "Other options",IDC_STATIC,7,184,266,27 - CONTROL "Automatically refresh contact's details after they come online",IDC_REFRESH_DETAILS, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,196,251,10 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_AUTHREQ, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 179 - TOPMARGIN, 7 - BOTTOMMARGIN, 64 - END - - IDD_OPTIONS, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 273 - VERTGUIDE, 16 - VERTGUIDE, 25 - VERTGUIDE, 152 - VERTGUIDE, 162 - VERTGUIDE, 214 - VERTGUIDE, 267 - TOPMARGIN, 7 - BOTTOMMARGIN, 211 - END -END -#endif // APSTUDIO_INVOKED - - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" - "version.rc\0" -END - -2 TEXTINCLUDE -BEGIN - "#include \r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,3,0,9 - PRODUCTVERSION 1,3,0,9 - FILEFLAGSMASK 0x17L -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x4L - FILETYPE 0x2L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "FileDescription", "MenuItemEx plugin for Miranda IM" - VALUE "FileVersion", "1.3.0.9" - VALUE "InternalName", "menuex" - VALUE "LegalCopyright", "© 2001-03 Heiko Schillinger, © 2006-08 Baloo, © 2009-10 Billy_Bons, © 2011-12 Robert Posel" - VALUE "OriginalFilename", "menuex.dll" - VALUE "ProductName", "menuex" - VALUE "ProductVersion", "1.3.0.9" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END - -#endif // Neutral resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/plugins/MenuItemEx/src/images.cpp b/plugins/MenuItemEx/src/images.cpp new file mode 100644 index 0000000000..51903294bb --- /dev/null +++ b/plugins/MenuItemEx/src/images.cpp @@ -0,0 +1,363 @@ +#include "menuex.h" +#include "images.h" + +extern HINSTANCE hinstance; + + +void HalfBitmap32Alpha(HBITMAP hBitmap) +{ + BITMAP bmp; + DWORD dwLen; + BYTE *p; + int x, y; + + GetObject(hBitmap, sizeof(bmp), &bmp); + + if (bmp.bmBitsPixel != 32) + return; + + dwLen = bmp.bmWidth * bmp.bmHeight * (bmp.bmBitsPixel / 8); + p = (BYTE *)malloc(dwLen); + if (p == NULL) + return; + memset(p, 0, dwLen); + + GetBitmapBits(hBitmap, dwLen, p); + + for (y = 0; y < bmp.bmHeight; ++y) { + BYTE *px = p + bmp.bmWidth * 4 * y; + + for (x = 0; x < bmp.bmWidth; ++x) + { + px[3]>>=1; + px += 4; + } + } + + SetBitmapBits(hBitmap, dwLen, p); + + free(p); +} + + +// Make a bitmap all transparent, but only if it is a 32bpp +//void MakeBmpTransparent(HBITMAP hBitmap) +//{ +// BITMAP bmp; +// DWORD dwLen; +// BYTE *p; +// +// GetObject(hBitmap, sizeof(bmp), &bmp); +// +// if (bmp.bmBitsPixel != 32) +// return; +// +// dwLen = bmp.bmWidth * bmp.bmHeight * (bmp.bmBitsPixel / 8); +// p = (BYTE *)malloc(dwLen); +// if (p == NULL) +// return; +// +// memset(p, 0, dwLen); +// SetBitmapBits(hBitmap, dwLen, p); +// +// free(p); +//} + + +// Correct alpha from bitmaps loaded without it (it cames with 0 and should be 255) +void CorrectBitmap32Alpha(HBITMAP hBitmap, BOOL force) +{ + BITMAP bmp; + DWORD dwLen; + BYTE *p; + int x, y; + BOOL fixIt; + + GetObject(hBitmap, sizeof(bmp), &bmp); + + if (bmp.bmBitsPixel != 32) + return; + + dwLen = bmp.bmWidth * bmp.bmHeight * (bmp.bmBitsPixel / 8); + p = (BYTE *)malloc(dwLen); + if (p == NULL) + return; + memset(p, 0, dwLen); + + GetBitmapBits(hBitmap, dwLen, p); + + fixIt = TRUE; + for (y = 0; fixIt && y < bmp.bmHeight; ++y) { + BYTE *px = p + bmp.bmWidth * 4 * y; + + for (x = 0; fixIt && x < bmp.bmWidth; ++x) + { + if (px[3] != 0 && !force) + { + fixIt = FALSE; + } + else + { + if (px[0] != 0 || px[1] != 0 || px[2] != 0) + px[3] = 255; + } + + px += 4; + } + } + + if (fixIt) + SetBitmapBits(hBitmap, dwLen, p); + + free(p); +} + + +HBITMAP CopyBitmapTo32(HBITMAP hBitmap) +{ + BITMAPINFO RGB32BitsBITMAPINFO; + BYTE * ptPixels; + HBITMAP hDirectBitmap; + + BITMAP bmp; + DWORD dwLen; + BYTE *p; + + GetObject(hBitmap, sizeof(bmp), &bmp); + + dwLen = bmp.bmWidth * bmp.bmHeight * 4; + p = (BYTE *)malloc(dwLen); + if (p == NULL) + return NULL; + + // Create bitmap + ZeroMemory(&RGB32BitsBITMAPINFO, sizeof(BITMAPINFO)); + RGB32BitsBITMAPINFO.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + RGB32BitsBITMAPINFO.bmiHeader.biWidth = bmp.bmWidth; + RGB32BitsBITMAPINFO.bmiHeader.biHeight = bmp.bmHeight; + RGB32BitsBITMAPINFO.bmiHeader.biPlanes = 1; + RGB32BitsBITMAPINFO.bmiHeader.biBitCount = 32; + + hDirectBitmap = CreateDIBSection(NULL, + (BITMAPINFO *)&RGB32BitsBITMAPINFO, + DIB_RGB_COLORS, + (void **)&ptPixels, + NULL, 0); + + // Copy data + if (bmp.bmBitsPixel != 32) + { + HDC hdcOrig, hdcDest; + HBITMAP oldOrig, oldDest; + + hdcOrig = CreateCompatibleDC(NULL); + oldOrig = (HBITMAP) SelectObject(hdcOrig, hBitmap); + + hdcDest = CreateCompatibleDC(NULL); + oldDest = (HBITMAP) SelectObject(hdcDest, hDirectBitmap); + + BitBlt(hdcDest, 0, 0, bmp.bmWidth, bmp.bmHeight, hdcOrig, 0, 0, SRCCOPY); + + SelectObject(hdcDest, oldDest); + DeleteObject(hdcDest); + SelectObject(hdcOrig, oldOrig); + DeleteObject(hdcOrig); + + // Set alpha + CorrectBitmap32Alpha(hDirectBitmap, FALSE); + } + else + { + GetBitmapBits(hBitmap, dwLen, p); + SetBitmapBits(hDirectBitmap, dwLen, p); + } + + free(p); + + return hDirectBitmap; +} + + +//HBITMAP CreateBitmap32(int cx, int cy) +//{ +// BITMAPINFO RGB32BitsBITMAPINFO; +// UINT * ptPixels; +// HBITMAP DirectBitmap; +// +// ZeroMemory(&RGB32BitsBITMAPINFO,sizeof(BITMAPINFO)); +// RGB32BitsBITMAPINFO.bmiHeader.biSize=sizeof(BITMAPINFOHEADER); +// RGB32BitsBITMAPINFO.bmiHeader.biWidth=cx;//bm.bmWidth; +// RGB32BitsBITMAPINFO.bmiHeader.biHeight=cy;//bm.bmHeight; +// RGB32BitsBITMAPINFO.bmiHeader.biPlanes=1; +// RGB32BitsBITMAPINFO.bmiHeader.biBitCount=32; +// +// DirectBitmap = CreateDIBSection(NULL, +// (BITMAPINFO *)&RGB32BitsBITMAPINFO, +// DIB_RGB_COLORS, +// (void **)&ptPixels, +// NULL, 0); +// return DirectBitmap; +//} + + +BOOL MakeBitmap32(HBITMAP *hBitmap) +{ + BITMAP bmp; + + GetObject(*hBitmap, sizeof(bmp), &bmp); + + if (bmp.bmBitsPixel != 32) { + // Convert to 32 bpp + HBITMAP hBmpTmp = CopyBitmapTo32(*hBitmap); + DeleteObject(*hBitmap); + *hBitmap = hBmpTmp; + } + + return TRUE; +} + + +//#define GET_PIXEL(__P__, __X__, __Y__) ( __P__ + width * 4 * (__Y__) + 4 * (__X__)) + +//BOOL MakeGrayscale(HBITMAP *hBitmap) +//{ +// BYTE *p = NULL; +// BYTE *p1; +// DWORD dwLen; +// int width, height, x, y; +// BITMAP bmp; +// +// GetObject(*hBitmap, sizeof(bmp), &bmp); +// width = bmp.bmWidth; +// height = bmp.bmHeight; +// +// dwLen = width * height * 4; +// p = (BYTE *)malloc(dwLen); +// if (p == NULL) +// { +// return FALSE; +// } +// +// if (bmp.bmBitsPixel != 32) +// { +// // Convert to 32 bpp +// HBITMAP hBmpTmp = CopyBitmapTo32(*hBitmap); +// DeleteObject(*hBitmap); +// *hBitmap = hBmpTmp; +// } +// GetBitmapBits(*hBitmap, dwLen, p); +// +// // Make grayscale +// for (y = 0 ; y < height ; y++) +// { +// for (x = 0 ; x < width ; x++) +// { +// p1 = GET_PIXEL(p, x, y); +// p1[0] = p1[1] = p1[2] = ( p1[0] + p1[1] + p1[2] ) / 3; +// } +// } +// +// dwLen = SetBitmapBits(*hBitmap, dwLen, p); +// free(p); +// +// return TRUE; +//} + + +HICON MakeHalfAlphaIcon(HICON SourceIcon) +{ + ICONINFO TargetIconInfo; + BITMAP TargetBitmapInfo; + HICON TargetIcon, TempIcon; + + TempIcon = CopyIcon(SourceIcon); + if ( !GetIconInfo(TempIcon, &TargetIconInfo)) + return NULL; + + if ( !GetObject(TargetIconInfo.hbmColor, sizeof(BITMAP), &TargetBitmapInfo)) + return NULL; + + MakeBitmap32(&TargetIconInfo.hbmColor); + HalfBitmap32Alpha(TargetIconInfo.hbmColor); + TargetIcon = CreateIconIndirect(&TargetIconInfo); + + DestroyIcon(TempIcon); + DeleteObject(TargetIconInfo.hbmColor); + DeleteObject(TargetIconInfo.hbmMask); + return TargetIcon; +} + + +//HICON MakeGrayscaleIcon(HICON SourceIcon) +//{ +// ICONINFO TargetIconInfo; +// BITMAP TargetBitmapInfo; +// HICON TargetIcon, TempIcon; +// +// TempIcon = CopyIcon(SourceIcon); +// if (! GetIconInfo(TempIcon, &TargetIconInfo) || GetObject(TargetIconInfo.hbmColor, sizeof(BITMAP), &TargetBitmapInfo)==0) return NULL; +// +// MakeGrayscale(&TargetIconInfo.hbmColor); +// +// TargetIcon = CreateIconIndirect(&TargetIconInfo); +// DestroyIcon(TempIcon); +// +// return TargetIcon; +//} + + +HICON BindOverlayIcon(HICON SourceIcon,LPCSTR OverlayIconName) +{ + ICONINFO OverlayIconInfo, TargetIconInfo; + BITMAP OverlayBitmapInfo, TargetBitmapInfo; + HBITMAP OldOverlayBitmap, OldTargetBitmap; + HICON OverlayIcon, TargetIcon, TempIcon; + HDC OverlayDC, TargetDC; + BLENDFUNCTION bf = {0,0,255,1}; + + TempIcon = CopyIcon(SourceIcon); + if ( !GetIconInfo( TempIcon, &TargetIconInfo )) + return NULL; + + MakeBitmap32(&TargetIconInfo.hbmColor); + CorrectBitmap32Alpha(TargetIconInfo.hbmColor, FALSE); + GetObject(TargetIconInfo.hbmColor, sizeof(BITMAP), &TargetBitmapInfo); + + OverlayIcon = (HICON)CallService( MS_SKIN2_GETICON, 0, (LPARAM)OverlayIconName); + if ( !GetIconInfo(OverlayIcon, &OverlayIconInfo) || !GetObject(OverlayIconInfo.hbmColor, sizeof(BITMAP), &OverlayBitmapInfo)) + return NULL; + + TargetDC = CreateCompatibleDC(NULL); + OldTargetBitmap = (HBITMAP)SelectObject(TargetDC, TargetIconInfo.hbmColor); + + OverlayDC = CreateCompatibleDC(NULL); + OldOverlayBitmap = (HBITMAP)SelectObject(OverlayDC, OverlayIconInfo.hbmColor); + + AlphaBlend(TargetDC, 0, 0, TargetBitmapInfo.bmWidth, TargetBitmapInfo.bmHeight, + OverlayDC, 0, 0, OverlayBitmapInfo.bmWidth, OverlayBitmapInfo.bmHeight, bf); + + SelectObject(TargetDC, TargetIconInfo.hbmMask); + SelectObject(OverlayDC, OverlayIconInfo.hbmMask); + + BitBlt(TargetDC, 0, 0, TargetBitmapInfo.bmWidth, TargetBitmapInfo.bmHeight, + OverlayDC, 0, 0, SRCCOPY); + + TargetIcon = CreateIconIndirect(&TargetIconInfo); + DestroyIcon(TempIcon); + //DestroyIcon(OverlayIcon); + + SelectObject(TargetDC, OldTargetBitmap); + DeleteObject(TargetIconInfo.hbmColor); + DeleteObject(TargetIconInfo.hbmMask); + DeleteDC(TargetDC); + + SelectObject(OverlayDC, OldOverlayBitmap); + DeleteObject(OverlayIconInfo.hbmColor); + DeleteObject(OverlayIconInfo.hbmMask); + DeleteDC(OverlayDC); + + return TargetIcon; +} + + +// EOF diff --git a/plugins/MenuItemEx/src/images.h b/plugins/MenuItemEx/src/images.h new file mode 100644 index 0000000000..e8288714f7 --- /dev/null +++ b/plugins/MenuItemEx/src/images.h @@ -0,0 +1,8 @@ +#ifndef __IMAGE_UTILS_H__ +#define __IMAGE_UTILS_H__ + +HICON BindOverlayIcon(HICON,LPCSTR); +//HICON MakeGrayscaleIcon(HICON); +HICON MakeHalfAlphaIcon(HICON); + +#endif // __IMAGE_UTILS_H__ diff --git a/plugins/MenuItemEx/src/main.cpp b/plugins/MenuItemEx/src/main.cpp new file mode 100644 index 0000000000..760520ce91 --- /dev/null +++ b/plugins/MenuItemEx/src/main.cpp @@ -0,0 +1,1386 @@ +#include "menuex.h" +#include "images.h" +#include "version.h" + +#define MS_SETINVIS "MenuEx/SetInvis" +#define MS_SETVIS "MenuEx/SetVis" +#define MS_HIDE "MenuEx/Hide" +#define MS_IGNORE "MenuEx/Ignore" +#define MS_PROTO "MenuEx/ChangeProto" +#define MS_ADDED "MenuEx/SendAdded" +#define MS_AUTHREQ "MenuEx/SendAuthReq" +#define MS_COPYID "MenuEx/CopyID" +#define MS_RECVFILES "MenuEx/RecvFiles" +#define MS_STATUSMSG "MenuEx/CopyStatusMsg" +#define MS_COPYIP "MenuEx/CopyIP" +#define MS_COPYMIRVER "MenuEx/CopyMirVer" + + +const int vf_default = VF_VS|VF_HFL|VF_IGN|VF_CID|VF_SHOWID|VF_RECV|VF_STAT|VF_SMNAME|VF_CIDN|VF_CIP; + +HINSTANCE hinstance; +HANDLE hmenuVis,hmenuOff,hmenuHide,hmenuIgnore,hmenuProto,hmenuAdded,hmenuAuthReq; +HANDLE hmenuCopyID,hmenuRecvFiles,hmenuStatusMsg,hmenuCopyIP,hmenuCopyMirVer; +static HANDLE hIgnoreItem[9], hProtoItem[MAX_PROTOS], hHooks[8], hServices[12]; +HICON hIcon[5]; +BOOL bMetaContacts, bMir_08; +PROTOACCOUNT **accs; +OPENOPTIONSDIALOG ood; +int protoCount; +int hLangpack; +static LONG_PTR OldAuthReqEditProc; + +struct { + char *module; + char *name; + TCHAR *fullName; + char flag; +} +static const statusMsg[] = { + { "CList", "StatusMsg", LPGENT("Status message"), 1 }, + { 0, "XStatusName", LPGENT("XStatus title"), 4 }, + { 0, "XStatusMsg", LPGENT("XStatus message"), 2 }, + { "AdvStatus", "tune/text", LPGENT("Listening to"), 8 }, + { "AdvStatus", "activity/title", LPGENT("Activity title"), 8 }, + { "AdvStatus", "activity/text", LPGENT("Activity text"), 8 } +}; + +struct +{ + TCHAR* szDescr; + char* szName; + int defIconID; +} +static const iconList[] = { + { _T("Hide from list"), "miex_hidefl", IDI_ICON0 }, + { _T("Show in list"), "miex_showil", IDI_ICON8 }, + { _T("Always visible"), "miex_vis", IDI_ICON1 }, + { _T("Never visible"), "miex_invis", IDI_ICON2 }, + { _T("Send 'You were added'"), "miex_added", IDI_ICON4 }, + { _T("Request authorization"), "miex_authorization", IDI_ICON5 }, + { _T("Copy to Account"), "miex_protocol", IDI_ICON6 }, + { _T("Ignore"), "miex_ignore", IDI_ICON7 }, + { _T("Browse Received Files"), "miex_recfiles", IDI_ICON12 }, + { _T("Copy MirVer"), "miex_copymver", IDI_ICON13 } +}; + +struct +{ + TCHAR* szDescr; + char* szName; + int defIconID; +} +static const overlayIconList[] = { + { _T("Copy ID"), "miex_copyid", IDI_ICON3 }, + { _T("Copy Status Message"), "miex_copysm1", IDI_ICON9 }, + { _T("Copy xStatus Message"), "miex_copysm2", IDI_ICON10 }, + { _T("Copy IP"), "miex_copyip", IDI_ICON11 } +}; + +struct { + TCHAR* name; + int type; + int icon; +} +static const ii[] = { + { LPGENT("All"), IGNOREEVENT_ALL, SKINICON_OTHER_FILLEDBLOB }, + { LPGENT("Messages"), IGNOREEVENT_MESSAGE, SKINICON_EVENT_MESSAGE }, + { LPGENT("URL"), IGNOREEVENT_URL, SKINICON_EVENT_URL }, + { LPGENT("Files"), IGNOREEVENT_FILE, SKINICON_EVENT_FILE }, + { LPGENT("User Online"), IGNOREEVENT_USERONLINE, SKINICON_OTHER_USERONLINE }, + { LPGENT("Authorization"), IGNOREEVENT_AUTHORIZATION, SKINICON_OTHER_MIRANDA }, + { LPGENT("You Were Added"), IGNOREEVENT_YOUWEREADDED, SKINICON_OTHER_ADDCONTACT }, + { LPGENT("Typing Notify"), IGNOREEVENT_TYPINGNOTIFY, SKINICON_OTHER_TYPING } +}; + +PLUGININFOEX pluginInfoEx = { + sizeof(PLUGININFOEX), + MODULENAME, + __VERSION_DWORD, + __DESC, + __AUTHORS, + __EMAIL, + __COPYRIGHTS, + __WEB, + UNICODE_AWARE, + MIID_MENUEX +}; + +struct ModSetLinkLinkItem { // code from dbe++ plugin by Bio + char *name; + BYTE *next; //struct ModSetLinkLinkItem +}; + +typedef struct { + struct ModSetLinkLinkItem *first; + struct ModSetLinkLinkItem *last; +} ModuleSettingLL; + +int GetSetting(HANDLE hContact, const char *szModule, const char *szSetting, DBVARIANT *dbv) +{ + DBCONTACTGETSETTING cgs; + + cgs.szModule = szModule; + cgs.szSetting = szSetting; + cgs.pValue = dbv; + dbv->type = 0; + + return CallService(MS_DB_CONTACT_GETSETTING_STR,(WPARAM)hContact,(LPARAM)&cgs); +} + +int enumModulesSettingsProc( const char *szName, LPARAM lParam) +{ + ModuleSettingLL *msll = (ModuleSettingLL *)lParam; + if (!msll->first) + { + msll->first = (struct ModSetLinkLinkItem *)malloc(sizeof(struct ModSetLinkLinkItem)); + if (!msll->first) return 1; + msll->first->name = _strdup(szName); + msll->first->next = 0; + msll->last = msll->first; + } + else + { + struct ModSetLinkLinkItem *item = (struct ModSetLinkLinkItem *)malloc(sizeof(struct ModSetLinkLinkItem)); + if (!item) return 1; + msll->last->next = (BYTE*)item; + msll->last = (struct ModSetLinkLinkItem *)item; + item->name = _strdup(szName); + item->next = 0; + } + return 0; +} + +void FreeModuleSettingLL(ModuleSettingLL* msll) +{ + if (msll) + { + struct ModSetLinkLinkItem *item = msll->first; + struct ModSetLinkLinkItem *temp; + + while (item) + { + if (item->name) + { + free(item->name); + item->name = 0; + } + temp = item; + item = (struct ModSetLinkLinkItem *)item->next; + if (temp) + { + free(temp); + temp = 0; + } + } + + msll->first = 0; + msll->last = 0; + } +} + +void RenameDbProto(HANDLE hContact, HANDLE hContactNew, char* oldName, char* newName, int delOld) +{ + DBVARIANT dbv; + ModuleSettingLL settinglist; + struct ModSetLinkLinkItem *setting; + DBCONTACTENUMSETTINGS dbces; + + // enum all setting the contact has for the module + dbces.pfnEnumProc = enumModulesSettingsProc; + dbces.szModule = oldName; + dbces.lParam = (LPARAM)&settinglist; + settinglist.first = 0; + settinglist.last = 0; + CallService(MS_DB_CONTACT_ENUMSETTINGS, (WPARAM)hContact,(LPARAM)&dbces); + + setting = settinglist.first; + while (setting) + { + if (!GetSetting(hContact,oldName,setting->name,&dbv)) + { + switch (dbv.type) + { + case DBVT_BYTE: + DBWriteContactSettingByte(hContactNew, newName, setting->name, dbv.bVal); + break; + case DBVT_WORD: + DBWriteContactSettingWord(hContactNew, newName, setting->name, dbv.wVal); + break; + case DBVT_DWORD: + DBWriteContactSettingDword(hContactNew, newName, setting->name, dbv.dVal); + break; + case DBVT_ASCIIZ: + DBWriteContactSettingString(hContactNew, newName, setting->name, dbv.pszVal); + break; + case DBVT_UTF8: + DBWriteContactSettingStringUtf(hContactNew, newName, setting->name, dbv.pszVal); + break; + case DBVT_BLOB: + DBWriteContactSettingBlob(hContactNew, newName, setting->name, dbv.pbVal, dbv.cpbVal); + break; + + } + if (delOld) + DBDeleteContactSetting(hContact, oldName, setting->name); + } + DBFreeVariant(&dbv); + setting = (struct ModSetLinkLinkItem *)setting->next; + } + FreeModuleSettingLL(&settinglist); +} // end code from dbe++ + +static void IconsInit() +{ + int i; + TCHAR tszFile[MAX_PATH]; + GetModuleFileName(hinstance, tszFile, MAX_PATH); + + SKINICONDESC sid = {0}; + sid.cbSize = sizeof(SKINICONDESC); + sid.flags = SIDF_ALL_TCHAR; + sid.ptszDefaultFile = tszFile; + sid.cx = sid.cy = 16; + sid.ptszSection = LPGENT(MODULENAME); + + for ( i = 0; i < SIZEOF(iconList); i++ ) { + sid.pszName = iconList[i].szName; + sid.ptszDescription = iconList[i].szDescr; + sid.iDefaultIndex = -iconList[i].defIconID; + Skin_AddIcon(&sid); + } + + for ( i = 0; i < SIZEOF(overlayIconList); i++ ) { + sid.pszName = overlayIconList[i].szName; + sid.ptszDescription = overlayIconList[i].szDescr; + sid.iDefaultIndex = -overlayIconList[i].defIconID; + Skin_AddIcon(&sid); + } +} + +void ShowPopup(char* szText, TCHAR* tszText, HANDLE hContact) +{ + POPUPDATAT ppd = {0}; + TCHAR* text = 0; + + if (tszText) + text = mir_tstrdup(tszText); + else if (szText) + text = mir_a2t(szText); + if (!text) return; + + ppd.lchIcon = LoadSkinnedIcon(SKINICON_OTHER_MIRANDA); + ppd.lchContact = hContact; + _tcsncpy(ppd.lptzContactName, (TCHAR*)CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM)hContact, GCDNF_TCHAR), MAX_CONTACTNAME - 1); + _tcsncpy(ppd.lptzText, text, MAX_SECONDLINE - 1); + ppd.iSeconds = -1; + + PUAddPopUpT(&ppd); + mir_free(text); +} + +BOOL DirectoryExists(HANDLE hContact) +{ + int attr; + char path[MAX_PATH]; + CallService(MS_FILE_GETRECEIVEDFILESFOLDER, (WPARAM)hContact, (LPARAM)&path); + attr = GetFileAttributesA(path); + return (attr != -1) && (attr&FILE_ATTRIBUTE_DIRECTORY); +} + +void CopyToClipboard(HWND hwnd,LPSTR pszMsg, LPTSTR ptszMsg) +{ + HGLOBAL hglbCopy; + LPTSTR lptstrCopy; + LPTSTR buf = 0; + if (ptszMsg) + buf = mir_tstrdup(ptszMsg); + else if (pszMsg) + buf = mir_a2t(pszMsg); + + if (buf == 0) + return; + + hglbCopy = GlobalAlloc(GMEM_MOVEABLE, (lstrlen(buf)+1)*sizeof(TCHAR)); + lptstrCopy = (LPTSTR)GlobalLock(hglbCopy); + lstrcpy(lptstrCopy, buf); + mir_free(buf); + GlobalUnlock(hglbCopy); + + OpenClipboard(NULL); + EmptyClipboard(); + + SetClipboardData(CF_UNICODETEXT, hglbCopy); + + CloseClipboard(); +} + +BOOL isMetaContact(HANDLE hContact) { + + char *proto; + if(bMetaContacts) { + proto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); + if ( lstrcmpA(proto,"MetaContacts") == 0 ) { + return TRUE; + } + } + return FALSE; +} + +HANDLE getDefaultContact(HANDLE hContact) { + + if(bMetaContacts) { + return (HANDLE)CallService(MS_MC_GETDEFAULTCONTACT,(WPARAM)hContact,0); + } + return 0; +} + +HANDLE getMostOnline(HANDLE hContact) { + + if(bMetaContacts) { + return (HANDLE)CallService(MS_MC_GETMOSTONLINECONTACT,(WPARAM)hContact,0); + } + return 0; +} + +void GetID(HANDLE hContact,LPSTR szProto,LPSTR szID) +{ + DBVARIANT dbv_uniqueid; + LPSTR uID = (LPSTR) CallProtoService(szProto, PS_GETCAPS, PFLAG_UNIQUEIDSETTING, 0); + if ( uID == (LPSTR)CALLSERVICE_NOTFOUND ) + uID = NULL; + + *szID = '\0'; + + if ( uID && DBGetContactSetting(hContact, szProto, uID ,&dbv_uniqueid) == 0 ) { + if (dbv_uniqueid.type == DBVT_DWORD) + wsprintfA(szID, "%u", dbv_uniqueid.dVal); + else if (dbv_uniqueid.type == DBVT_WORD) + wsprintfA(szID, "%u", dbv_uniqueid.wVal); + else if (dbv_uniqueid.type == DBVT_BLOB) + wsprintfA(szID, "%s", dbv_uniqueid.cpbVal); + else + wsprintfA(szID, "%s", dbv_uniqueid.pszVal); + + DBFreeVariant(&dbv_uniqueid); + } +} + +int StatusMsgExists(HANDLE hContact) +{ + LPSTR module,msg; + char par[32]; + BOOL ret = 0; + int i; + + module = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); + if (!module) return 0; + + for(i = 0; i < SIZEOF(statusMsg); i++) { + if (statusMsg[i].flag & 8) + mir_snprintf(par, SIZEOF(par), "%s/%s", module, statusMsg[i].name); + else + strcpy(par, statusMsg[i].name); + + msg = DBGetString(hContact, (statusMsg[i].module) ? statusMsg[i].module : module, par); + if(msg) { + if(strlen(msg)) + ret |= statusMsg[i].flag; + mir_free(msg); + } + } + return ret; +} + +BOOL IPExists(HANDLE hContact) +{ + LPSTR szProto; + DWORD mIP,rIP; + + szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); + if (!szProto) return 0; + + mIP = DBGetContactSettingDword(hContact, szProto, "IP", 0); + rIP = DBGetContactSettingDword(hContact, szProto, "RealIP", 0); + + return (mIP != 0 || rIP != 0); +} + +BOOL MirVerExists(HANDLE hContact) +{ + LPSTR szProto, msg; + BOOL ret = 0; + + szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); + if (!szProto) return 0; + + msg = DBGetString(hContact,szProto,"MirVer"); + if(msg) { + if(strlen(msg)) ret = 1; + mir_free(msg); + } + + return ret; +} + +void getIP(HANDLE hContact,LPSTR szProto,LPSTR szIP) +{ + char szmIP[64] = {0}; + char szrIP[64] = {0}; + DWORD mIP = DBGetContactSettingDword(hContact, szProto, "IP", 0); + DWORD rIP = DBGetContactSettingDword(hContact, szProto, "RealIP", 0); + if ( mIP ) wsprintfA(szmIP, "External IP: %d.%d.%d.%d\r\n", mIP>>24,(mIP>>16)&0xFF,(mIP>>8)&0xFF,mIP&0xFF); + if ( rIP ) wsprintfA(szrIP, "Internal IP: %d.%d.%d.%d\r\n", rIP>>24,(rIP>>16)&0xFF,(rIP>>8)&0xFF,rIP&0xFF); + strcpy(szIP,szrIP); + strcat(szIP,szmIP); +} + +LPSTR getMirVer(HANDLE hContact) +{ + LPSTR szProto, msg; + + szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); + if (!szProto) return NULL; + + msg = DBGetString(hContact,szProto,"MirVer"); + if(msg) { + if(strlen(msg)) + return msg; + mir_free(msg); + } + + return NULL; +} + +static LRESULT CALLBACK AuthReqEditSubclassProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) +{ + switch(msg) { + case WM_CHAR: + if(wParam == '\n' && CTRL_IS_PRESSED) { // ctrl + ENTER + PostMessage(GetParent(hwnd), WM_COMMAND, IDOK, 0); + return 0; + } + if(wParam == 1 && CTRL_IS_PRESSED) { // ctrl + a + SendMessage(hwnd, EM_SETSEL, 0, -1); + return 0; + } + break; + case WM_SETFOCUS: + SendMessage(hwnd, EM_SETSEL, 0, -1); + break; + } + return CallWindowProc((WNDPROC)OldAuthReqEditProc,hwnd,msg,wParam,lParam); +} + +INT_PTR CALLBACK AuthReqWndProc(HWND hdlg,UINT msg,WPARAM wparam,LPARAM lparam) +{ + static HANDLE hcontact; + + switch(msg){ + case WM_INITDIALOG: + TranslateDialogDefault(hdlg); + OldAuthReqEditProc = SetWindowLongPtr(GetDlgItem(hdlg, IDC_REASON), GWLP_WNDPROC, (LONG_PTR)AuthReqEditSubclassProc); + SendDlgItemMessage(hdlg, IDC_REASON, EM_LIMITTEXT, (WPARAM)255, 0); + SetDlgItemText(hdlg, IDC_REASON, TranslateT("Please authorize me to add you to my contact list.")); + hcontact = (HANDLE)lparam; + break; + + case WM_COMMAND: + switch(LOWORD(wparam)) { + case IDOK: + { + char szReason[256] = {0}; + + WCHAR wszReason[256] = {0}; + + if (CallService(MS_SYSTEM_GETVERSION, 0, 0) < 0x00090007) + { + GetDlgItemTextA(hdlg,IDC_REASON,szReason,255); + CallContactService(hcontact,PSS_AUTHREQUEST,0,(LPARAM)szReason); + } + else + { + GetDlgItemText(hdlg,IDC_REASON,wszReason,255); + CallContactService(hcontact,PSS_AUTHREQUESTW,0,(LPARAM)wszReason); + } + + } // fall through + case IDCANCEL: + DestroyWindow(hdlg); + break; + } + break; + } + + return 0; +} + +BOOL isVisSupport(HANDLE hContact) +{ + char *szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,(WPARAM)hContact,0); + if(szProto == NULL) return 0; + return CallProtoService(szProto,PS_GETCAPS,PFLAGNUM_1,0)&PF1_INVISLIST; +} + +BOOL isInvSupport(HANDLE hContact) +{ + char *szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,(WPARAM)hContact,0); + if(szProto == NULL) return 0; + return CallProtoService(szProto,PS_GETCAPS,PFLAGNUM_1,0)&PF1_VISLIST; +} + +BOOL isProtoOnline(char *szProto) +{ +//#ifdef _DEBUG +// return TRUE; +//#else + DWORD protoStatus; + protoStatus = CallProtoService(szProto,PS_GETSTATUS,0,0); + return (protoStatus > ID_STATUS_OFFLINE && protoStatus < ID_STATUS_IDLE); + +//#endif +} + +INT_PTR onSendAuthRequest(WPARAM wparam,LPARAM lparam) +{ + DWORD flags; + char *szProto; + + szProto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO,wparam,0); + + flags = CallProtoService(szProto,PS_GETCAPS,PFLAGNUM_4,0); + if (flags&PF4_NOCUSTOMAUTH) + CallContactService((HANDLE)wparam,PSS_AUTHREQUEST,0, (LPARAM)""); + else + CreateDialogParam(hinstance,MAKEINTRESOURCE(IDD_AUTHREQ),(HWND)CallService(MS_CLUI_GETHWND,0,0),AuthReqWndProc,(LPARAM)wparam); + + return 0; +} + +INT_PTR onSendAdded(WPARAM wparam,LPARAM lparam) +{ + CallContactService((HANDLE)wparam,PSS_ADDED,0,0); + return 0; +} + +// set the invisible-flag in db +INT_PTR onSetInvis(WPARAM wparam,LPARAM lparam) +{ + CallContactService((HANDLE)wparam,PSS_SETAPPARENTMODE,(DBGetContactSettingWord((HANDLE)wparam,(const char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,wparam,0),"ApparentMode",0) == ID_STATUS_OFFLINE)?0:ID_STATUS_OFFLINE,0); + return 0; +} + +// set visible-flag in db +INT_PTR onSetVis(WPARAM wparam,LPARAM lparam) +{ + CallContactService((HANDLE)wparam,PSS_SETAPPARENTMODE,(DBGetContactSettingWord((HANDLE)wparam,(const char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,wparam,0),"ApparentMode",0) == ID_STATUS_ONLINE)?0:ID_STATUS_ONLINE,0); + return 0; +} + +INT_PTR onHide(WPARAM wparam,LPARAM lparam) +{ + DBWriteContactSettingByte((HANDLE)wparam,"CList","Hidden",(byte)!DBGetContactSettingByte((HANDLE)wparam,"CList","Hidden",0)); + CallService(MS_CLUI_SORTLIST,0,0); + return 0; +} + +void ShowItem(CLISTMENUITEM *cli, HANDLE hmenu) +{ + cli->flags = CMIM_FLAGS | CMIF_TCHAR; + CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hmenu,(LPARAM)cli); +} + +void HideItem(CLISTMENUITEM *cli,HANDLE hmenu) +{ + cli->flags|=CMIF_HIDDEN; + CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hmenu,(LPARAM)cli); +} + +// following 4 functions should be self-explanatory +void ModifyVisibleSet(CLISTMENUITEM *cli,int mode,BOOL alpha) +{ + cli->flags |= CMIM_ICON; + cli->hIcon = (mode) ? hIcon[1] : (alpha?hIcon[3] : LoadSkinnedIcon(SKINICON_OTHER_SMALLDOT)); + CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hmenuVis, (LPARAM)cli); +} + +void ModifyInvisSet(CLISTMENUITEM *cli,int mode,BOOL alpha) +{ + cli->flags |= CMIM_ICON; + cli->hIcon = (mode) ? hIcon[2] : (alpha ? hIcon[4] : LoadSkinnedIcon(SKINICON_OTHER_SMALLDOT)); + CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hmenuOff, (LPARAM)cli); +} + +void ModifyHidden(CLISTMENUITEM *cli,int mode) +{ + cli->flags |= CMIM_ICON | CMIM_NAME; + cli->hIcon = (mode) ? + (HICON)CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_showil") : + (HICON)CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_hidefl"); + cli->ptszName = mode ? LPGENT("Show in list") : LPGENT("Hide from list"); + CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hmenuHide, (LPARAM)cli); +} + +void ModifyCopyID(CLISTMENUITEM *cli, HANDLE hContact, BOOL bShowID, BOOL bTrimID) +{ + LPSTR szProto; + char szID[256]; + TCHAR buffer[256]; + HICON hIconCID; + HANDLE hC; + + cli->flags|=CMIM_ICON|CMIM_NAME; + + if(isMetaContact(hContact)) { + hC = getMostOnline(hContact); + if ( !hContact ) hC = getDefaultContact(hContact); + hContact = hC; + } + + szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); + if (!szProto) { + HideItem(cli,hmenuCopyID); + return; + } + hIconCID = (HICON) CallProtoService(szProto, PS_LOADICON, PLI_PROTOCOL|PLIF_SMALL, 0); + cli->hIcon = BindOverlayIcon(hIconCID, "miex_copyid"); + DestroyIcon(hIconCID); + hIconCID = cli->hIcon; + + GetID(hContact,szProto,(LPSTR)&szID); + if(szID[0]) + { + if (bShowID) + { + TCHAR* tmp; + + if (bTrimID && (strlen(szID) > MAX_IDLEN)) + { + szID[MAX_IDLEN - 2] = szID[MAX_IDLEN - 1] = szID[MAX_IDLEN] = '.'; + szID[MAX_IDLEN + 1] = 0; + } + tmp = mir_a2t(szID); + mir_sntprintf(buffer, SIZEOF(buffer), _T("%s [%s]"), TranslateT("Copy ID"), tmp); + mir_free(tmp); + + cli->ptszName = (TCHAR*)&buffer; + } + else + cli->ptszName = _T("Copy ID"); + } + else { + cli->flags = CMIM_FLAGS|CMIF_HIDDEN; + } + CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hmenuCopyID,(LPARAM)cli); + DestroyIcon(hIconCID); +} + +void ModifyStatusMsg(CLISTMENUITEM *cli,HANDLE hContact) +{ + LPSTR szProto; + HICON hIconSMsg; + + cli->flags|=CMIM_ICON; + + szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); + if (!szProto) { + HideItem(cli,hmenuStatusMsg); + return; + } + + hIconSMsg = (HICON) CallProtoService(szProto, PS_LOADICON, PLI_PROTOCOL|PLIF_SMALL, 0); + cli->hIcon = BindOverlayIcon(hIconSMsg, (StatusMsgExists(hContact)&2) ? "miex_copysm2" : "miex_copysm1"); + DestroyIcon(hIconSMsg); + hIconSMsg = cli->hIcon; + + CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hmenuStatusMsg,(LPARAM)cli); + DestroyIcon(hIconSMsg); +} + +void ModifyCopyIP(CLISTMENUITEM *cli,HANDLE hContact) +{ + LPSTR szProto; + HICON hIconCIP; + + cli->flags |= CMIM_ICON; + + szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); + if (!szProto) { + HideItem(cli,hmenuCopyIP); + return; + } + + hIconCIP = (HICON) CallProtoService(szProto, PS_LOADICON, PLI_PROTOCOL|PLIF_SMALL, 0); + + cli->hIcon = BindOverlayIcon(hIconCIP, "miex_copyip"); + DestroyIcon(hIconCIP); + hIconCIP = cli->hIcon; + + CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hmenuCopyIP,(LPARAM)cli); + DestroyIcon(hIconCIP); +} + +void ModifyCopyMirVer(CLISTMENUITEM *cli,HANDLE hContact) +{ + LPSTR msg; + cli->flags|=CMIM_ICON; + cli->hIcon = NULL; + if(ServiceExists(MS_FP_GETCLIENTICON)) { + msg = getMirVer(hContact); + if(msg) { + cli->hIcon = (HICON)CallService(MS_FP_GETCLIENTICON,(WPARAM)msg,(LPARAM)1); + mir_free(msg); + } + } + if (!cli->hIcon) cli->hIcon = hIcon[0]; + CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hmenuCopyMirVer,(LPARAM)cli); +} + +INT_PTR onCopyID(WPARAM wparam,LPARAM lparam) +{ + LPSTR szProto; + char szID[128] = {0}, buffer[256] = {0}; + HANDLE hContact ,hC; + PROTOACCOUNT* pa; + + hContact = (HANDLE)wparam; + if(isMetaContact(hContact)) { + hC = getMostOnline(hContact); + if ( !hContact ) hC = getDefaultContact(hContact); + hContact = hC; + } + if ((szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0)) == NULL) + return 0; + + GetID(hContact,szProto,(LPSTR)&szID); + + if(DBGetContactSettingDword(NULL,VISPLG,"flags",vf_default)&VF_CIDN) { + if (bMir_08) + pa = (PROTOACCOUNT*)CallService(MS_PROTO_GETACCOUNT, 0, (LPARAM)szProto); + + if (bMir_08 && !pa->bOldProto) + mir_snprintf(buffer, SIZEOF(buffer), "%s: %s", pa->szProtoName, szID); + else + mir_snprintf(buffer, SIZEOF(buffer), "%s: %s", szProto, szID); + } + else + strcpy(buffer, szID); + + CopyToClipboard((HWND)lparam, buffer, 0); + if(CTRL_IS_PRESSED && ServiceExists(MS_POPUP_ADDPOPUP)) + ShowPopup(buffer, 0, hContact); + + return 0; +} + +INT_PTR onCopyStatusMsg(WPARAM wparam,LPARAM lparam) +{ + LPSTR module; + LPTSTR msg; + char par[32]; + TCHAR buffer[2048]; + int i; + DWORD flags = DBGetContactSettingDword(NULL,VISPLG,"flags",vf_default); + + module = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, wparam, 0); + if (!module) return 0; + + buffer[0] = 0; + for(i = 0; i < SIZEOF(statusMsg); i++) { + if (statusMsg[i].flag & 8) + mir_snprintf(par, SIZEOF(par), "%s/%s", module, statusMsg[i].name); + else + strcpy(par, statusMsg[i].name); + + msg = DBGetStringT((HANDLE)wparam, (statusMsg[i].module) ? statusMsg[i].module : module, par); + if(msg) + { + if(_tcsclen(msg)) + { + if (flags&VF_SMNAME) + { + _tcsncat (buffer, TranslateTS(statusMsg[i].fullName), (SIZEOF(buffer) - _tcsclen(buffer) - 1)); + _tcsncat (buffer, _T(": "), (SIZEOF(buffer) - _tcsclen(buffer) - 1)); + } + _tcsncat(buffer, msg, (SIZEOF(buffer) - _tcsclen(buffer) - 1)); + _tcsncat(buffer, _T("\r\n"), (SIZEOF(buffer) - _tcsclen(buffer) - 1)); + } + mir_free(msg); + } + } + + CopyToClipboard((HWND)lparam, 0, buffer); + if(CTRL_IS_PRESSED && ServiceExists(MS_POPUP_ADDPOPUP)) + ShowPopup(0, buffer, (HANDLE)wparam); + + return 0; +} + +INT_PTR onCopyIP(WPARAM wparam,LPARAM lparam) +{ + LPSTR szProto; + char szIP[128]; + + szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, wparam, 0); + getIP((HANDLE)wparam,szProto,(LPSTR)&szIP); + + CopyToClipboard((HWND)lparam, szIP, 0); + if(CTRL_IS_PRESSED && ServiceExists(MS_POPUP_ADDPOPUP)) + ShowPopup(szIP, 0, (HANDLE)wparam); + + return 0; +} + +INT_PTR onCopyMirVer(WPARAM wparam,LPARAM lparam) +{ + LPSTR msg = getMirVer((HANDLE)wparam); + if(msg) { + CopyToClipboard((HWND)lparam, msg, 0); + if(CTRL_IS_PRESSED && ServiceExists(MS_POPUP_ADDPOPUP)) + ShowPopup(msg, 0, (HANDLE)wparam); + + mir_free(msg); + } + return 0; +} + +INT_PTR onRecvFiles(WPARAM wparam,LPARAM lparam) +{ + char path[MAX_PATH]; + CallService(MS_FILE_GETRECEIVEDFILESFOLDER, wparam, (LPARAM)&path); + ShellExecuteA(0, "open", path, 0, 0, SW_SHOW); + return 0; +} + +INT_PTR onChangeProto(WPARAM wparam,LPARAM lparam) +{ + HANDLE hContact, hContactNew; + + hContact = (HANDLE)wparam; + if (!strcmp((char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, wparam, 0), (char*)lparam)) + return 0; + + if (CTRL_IS_PRESSED) + { + hContactNew = hContact; + RenameDbProto(hContact, hContactNew, (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0), (char*)lparam, 1); + CallService(MS_PROTO_REMOVEFROMCONTACT, (WPARAM)hContact, CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0)); + CallService(MS_PROTO_ADDTOCONTACT, (WPARAM)hContactNew, lparam); + } + else + { + hContactNew = (HANDLE)CallService(MS_DB_CONTACT_ADD, 0, 0); + if (hContactNew) + { + CallService(MS_PROTO_ADDTOCONTACT, (WPARAM)hContactNew, lparam); + RenameDbProto(hContact, hContactNew, (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0), (char*)lparam, 0); + RenameDbProto(hContact, hContactNew, "CList", "CList", 0); + } + else + return 0; + } + if(MessageBox(NULL,(LPCTSTR)TranslateT("Do you want to send authorization request\nto new contact?"), + TranslateT("Miranda IM"), MB_OKCANCEL | MB_SETFOREGROUND | MB_TOPMOST) == IDOK) + + onSendAuthRequest((WPARAM)hContactNew, 0); + + return 0; +} + +int isIgnored(HANDLE hContact, int type) +{ + int i = 0, all = 0; + if (type == IGNOREEVENT_ALL) + { + for (i = 1; i < SIZEOF(ii); i++) + { + if (isIgnored(hContact, ii[i].type)) + all++; + } + return (all == SIZEOF(ii) - 1) ? 1 : 0; // ignoring all or not + } + else + return CallService(MS_IGNORE_ISIGNORED, (WPARAM)hContact, (LPARAM)type); +} + +INT_PTR onIgnore(WPARAM wparam,LPARAM lparam) +{ + if (DBGetContactSettingByte(NULL, VISPLG, "ignorehide", 0) && (lparam == IGNOREEVENT_ALL)) { + DBWriteContactSettingByte((HANDLE)wparam, "CList", "Hidden", (isIgnored((HANDLE)wparam, lparam) ? (byte)0 : (byte)1)); + CallService(MS_CLUI_SORTLIST, 0, 0); + } + + CallService(isIgnored((HANDLE)wparam, lparam) ? MS_IGNORE_UNIGNORE : MS_IGNORE_IGNORE, wparam, lparam); + return 0; +} + +static HANDLE AddSubmenuItem(HANDLE hRoot, TCHAR* name, HICON icon, DWORD flag, char* service, int pos, int param) +{ + CLISTMENUITEM mi = { 0 }; + mi.cbSize = sizeof(mi); + mi.hParentMenu = (HGENMENU)hRoot; + mi.pszPopupName = (char*)hRoot; // for Miranda 0.7 + mi.popupPosition = param; + mi.position = pos; + mi.ptszName = name; + mi.hIcon = icon; + mi.flags = CMIF_TCHAR | CMIF_CHILDPOPUP; + if (flag) + mi.flags |= flag; + mi.pszService = service; + return Menu_AddContactMenuItem(&mi); +} + +static void ModifySubmenuItem(HANDLE hItem, TCHAR* name, int checked, int hidden) +{ + CLISTMENUITEM mi = { 0 }; + mi.cbSize = sizeof(mi); + mi.ptszName = name; + mi.flags = CMIM_FLAGS | CMIF_TCHAR; + if ( checked ) + mi.flags |= CMIF_CHECKED; + if ( hidden ) + mi.flags |= CMIF_HIDDEN; + CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hItem, (LPARAM)&mi); +} + +// called when the contact-menu is built +int BuildMenu(WPARAM wparam,LPARAM lparam) +{ + CLISTMENUITEM miAV = {0},miNV,miHFL,miIGN,miPROTO,miADD,miREQ,miCID,miRECV,miSTAT,miCIP,miCMV; + DWORD flags = DBGetContactSettingDword(NULL,VISPLG,"flags",vf_default); + int i = 0, j = 0, check = 0, all = 0, hide = 0; + BOOL bIsOnline = FALSE, bShowAll = CTRL_IS_PRESSED; + PROTOACCOUNT* pa; + char* pszProto; + pszProto = (LPSTR)CallService(MS_PROTO_GETCONTACTBASEPROTO, wparam, 0); + if(bMir_08) + pa = (PROTOACCOUNT*)CallService(MS_PROTO_GETACCOUNT, 0, (LPARAM)pszProto); + + bIsOnline = isProtoOnline(pszProto); + + miAV.cbSize = sizeof(CLISTMENUITEM); + miAV.flags = CMIM_FLAGS | CMIF_TCHAR; + miAV.hIcon = NULL; + miAV.pszContactOwner = NULL; + miNV = miHFL = miIGN = miPROTO = miADD = miREQ = miCID = miRECV = miSTAT = miCIP = miCMV = miAV; + + if(bShowAll || flags&VF_VS) { + ShowItem(&miAV,hmenuVis); + ShowItem(&miNV,hmenuOff); + } + else { + HideItem(&miAV,hmenuVis); + HideItem(&miNV,hmenuOff); + } + + if(bShowAll || flags&VF_HFL){ + ShowItem(&miHFL,hmenuHide); + ModifyHidden(&miHFL,DBGetContactSettingByte((HANDLE)wparam,"CList","Hidden",0)); + } + else HideItem(&miHFL,hmenuHide); + + if(bShowAll || flags&VF_IGN) + { + ShowItem(&miIGN,hmenuIgnore); + for (i = 1; i < SIZEOF(ii); i++) + { + check = isIgnored((HANDLE)wparam, ii[i].type); + if (check) + all++; + ModifySubmenuItem(hIgnoreItem[i], ii[i].name, check, 0); + + if (all == SIZEOF(ii) - 1) // ignor all + check = 1; + else + check = 0; + ModifySubmenuItem(hIgnoreItem[0], ii[i].name, check, 0); + } + } + + else HideItem(&miIGN,hmenuIgnore); + + if(bMir_08 && pa && (bShowAll || flags&VF_PROTO)) + { + for (i = 0; i < protoCount; i++) + { + if ((!accs[i]->bIsEnabled) || (strcmp(pa->szProtoName, accs[i]->szProtoName))) + hide = 1; + else + { + hide = 0; + j++; + } + + if (CallService(MS_PROTO_ISPROTOONCONTACT, wparam, (LPARAM)accs[i]->szModuleName)) + check = 1; + else + check = 0; + + ModifySubmenuItem(hProtoItem[i], accs[i]->tszAccountName, check, hide); + } + if (j > 1) + ShowItem(&miPROTO,hmenuProto); + else + HideItem(&miPROTO,hmenuProto); + } + else HideItem(&miPROTO,hmenuProto); + + if ((bShowAll || flags & VF_ADD) && bIsOnline && (bMir_08 ? IsAccountEnabled( pa ) : TRUE)) + ShowItem(&miADD,hmenuAdded); + else + HideItem(&miADD,hmenuAdded); + + if ((bShowAll || flags & VF_REQ) && bIsOnline && (bMir_08 ? IsAccountEnabled( pa ) : TRUE)) + ShowItem(&miREQ,hmenuAuthReq); + else + HideItem(&miREQ,hmenuAuthReq); + + if(bShowAll || flags&VF_CID){ + ShowItem(&miCID,hmenuCopyID); + ModifyCopyID(&miCID,(HANDLE)wparam, flags&VF_SHOWID, flags&VF_TRIMID); + } + else HideItem(&miCID,hmenuCopyID); + + if ((bShowAll || flags&VF_RECV) && DirectoryExists((HANDLE)wparam)) ShowItem(&miRECV,hmenuRecvFiles); + else HideItem(&miRECV,hmenuRecvFiles); + + if ((bShowAll || flags&VF_STAT) && StatusMsgExists((HANDLE)wparam)) { + ShowItem(&miSTAT,hmenuStatusMsg); + ModifyStatusMsg(&miSTAT,(HANDLE)wparam); + } + else HideItem(&miSTAT,hmenuStatusMsg); + + if ((bShowAll || flags&VF_CIP) && IPExists((HANDLE)wparam)) { + ShowItem(&miCIP,hmenuCopyIP); + ModifyCopyIP(&miCIP,(HANDLE)wparam); + } + else HideItem(&miCIP,hmenuCopyIP); + + if ((bShowAll || flags&VF_CMV) && MirVerExists((HANDLE)wparam)) { + ShowItem(&miCMV,hmenuCopyMirVer); + ModifyCopyMirVer(&miCMV,(HANDLE)wparam); + } + else HideItem(&miCMV,hmenuCopyMirVer); + + if(bShowAll || (flags&VF_VS)) + { + int apparent = DBGetContactSettingWord((HANDLE)wparam,(const char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,wparam,0),"ApparentMode",0); + if(isVisSupport((HANDLE)wparam)) ModifyVisibleSet(&miAV,apparent == ID_STATUS_ONLINE,flags&VF_SAI); + else HideItem(&miAV,hmenuVis); + if(isInvSupport((HANDLE)wparam)) ModifyInvisSet(&miNV,apparent == ID_STATUS_OFFLINE,flags&VF_SAI); + else HideItem(&miAV,hmenuOff); + } + return 0; +} + +int EnumProtoSubmenu(WPARAM wparam, LPARAM lparam) +{ + int i; + int pos = 1000; + if (protoCount) // remove old items + { + for (i = 0; i < protoCount; i++) + { + if (hProtoItem[i]) + { + CallService(MS_CLIST_REMOVECONTACTMENUITEM, (WPARAM)hProtoItem[i], 0); + hProtoItem[i] = 0; + } + } + } + CallService( MS_PROTO_ENUMACCOUNTS, (WPARAM)&protoCount, (LPARAM)&accs); + if (protoCount > MAX_PROTOS) + protoCount = MAX_PROTOS; + for (i = 0; i < protoCount; i++) + { + hProtoItem[i] = AddSubmenuItem((HGENMENU)hmenuProto, accs[i]->tszAccountName, + LoadSkinnedProtoIcon(accs[i]->szModuleName, ID_STATUS_ONLINE), CMIF_KEEPUNTRANSLATED, + MS_PROTO, pos++, (int)accs[i]->szModuleName); + } + return 0; +} + +// Tabsrmm toolbar support +static int TabsrmmButtonPressed(WPARAM wParam, LPARAM lParam) +{ + CustomButtonClickData *cbcd = (CustomButtonClickData *)lParam; + + if (!strcmp(cbcd->pszModule, MODULENAME) && cbcd->dwButtonId == 0) + onRecvFiles(wParam, 0); + + return 0; +} + +static int TabsrmmButtonsInit(WPARAM wParam, LPARAM lParam) +{ + BBButton bbd = {0}; + + bbd.cbSize = sizeof(BBButton); + bbd.pszModuleName = MODULENAME; + bbd.dwButtonID = 0; + bbd.dwDefPos = 1000; + bbd.ptszTooltip = _T("Browse Received Files"); + bbd.bbbFlags = BBBF_ISLSIDEBUTTON | BBBF_CANBEHIDDEN; + bbd.hIcon = (HANDLE)CallService(MS_SKIN2_GETICONHANDLE, 0, (LPARAM)"miex_recfiles"); + CallService (MS_BB_ADDBUTTON, 0, (LPARAM)&bbd); + + return 0; +} + +static void TabsrmmButtonsModify(HANDLE hContact) +{ + if (!DirectoryExists(hContact)) + { + BBButton bbd = {0}; + bbd.cbSize = sizeof(BBButton); + bbd.dwButtonID = 0; + bbd.pszModuleName = MODULENAME; + bbd.bbbFlags = BBSF_DISABLED | BBSF_HIDDEN; + CallService(MS_BB_SETBUTTONSTATE, (WPARAM)hContact, (LPARAM)&bbd); + } +} + +static int ContactWindowOpen(WPARAM wparam,LPARAM lParam) +{ + MessageWindowEventData *MWeventdata = (MessageWindowEventData*)lParam; + + if(MWeventdata->uType == MSG_WINDOW_EVT_OPENING && MWeventdata->hContact) + { + TabsrmmButtonsModify(MWeventdata->hContact); + } + return 0; +} + +static int ContactSettingChanged( WPARAM wParam, LPARAM lParam ) +{ // NSN + DBCONTACTWRITESETTING *cws = ( DBCONTACTWRITESETTING* )lParam; + WORD newStatus = 0, oldStatus = 0; + DWORD dwStatuses = 0; + time_t tCurrentTime; + char *lpzProto; + + if ( ( HANDLE )wParam == NULL || lstrcmpA( cws->szSetting, "Status" )) + return 0; + + newStatus = cws->value.wVal; + oldStatus = DBGetContactSettingWord((HANDLE)wParam,"UserOnline","OldStatus2",ID_STATUS_OFFLINE ); + if (oldStatus == newStatus) + return 0; + + tCurrentTime = time( NULL ); + lpzProto = ( char* )CallService( MS_PROTO_GETCONTACTBASEPROTO, ( WPARAM )wParam, 0); + + // ignore chat rooms + if (DBGetContactSettingByte((HANDLE)wParam, lpzProto, "ChatRoom", 0)) + return 0; + + if (oldStatus == ID_STATUS_OFFLINE) + { + // set online timestamp for this contact, only when not set already + if (!DBGetContactSettingDword( ( HANDLE )wParam, lpzProto, "LogonTS", FALSE)) + DBWriteContactSettingDword( ( HANDLE )wParam, lpzProto, "LogonTS", ( DWORD )tCurrentTime); + + // TODO: dont reset logoff timestamp? + DBDeleteContactSetting( ( HANDLE )wParam, lpzProto, "LogoffTS"); + + // TESTING: updating user's details + if (DBGetContactSettingDword(NULL, VISPLG, "flags", vf_default) & VF_REFRESH) + { + // don't refresh Hidden or NotOnList contact's details + if (!DBGetContactSettingByte((HANDLE)wParam, "CList", "Hidden", 0) && !DBGetContactSettingByte((HANDLE)wParam, "CList", "NotOnList", 0)) + CallContactService( ( HANDLE )wParam, PSS_GETINFO, 0, 0 ); + } + } + if (newStatus == ID_STATUS_OFFLINE) + { + // set offline timestamp for this contact + DBWriteContactSettingDword( ( HANDLE )wParam, lpzProto, "LogoffTS", ( DWORD )tCurrentTime); + // reset logon timestamp + DBDeleteContactSetting( ( HANDLE )wParam, lpzProto, "LogonTS"); + + // set last status for this contact + DBWriteContactSettingDword( ( HANDLE )wParam, lpzProto, "LastStatus", ( DWORD )oldStatus); + } + DBWriteContactSettingWord( ( HANDLE )wParam, "UserOnline", "OldStatus2", newStatus); + + return 0; +} + +// called when all modules are loaded +static int PluginInit(WPARAM wparam,LPARAM lparam) +{ + int pos = 1000, i = 0; + + CLISTMENUITEM mi; + + IconsInit(); + + bMetaContacts = ServiceExists(MS_MC_GETMETACONTACT) != 0; + bMir_08 = ServiceExists(MS_PROTO_GETACCOUNT) != 0; + + hServices[0] = CreateServiceFunction(MS_SETINVIS,onSetInvis); + hServices[1] = CreateServiceFunction(MS_SETVIS,onSetVis); + hServices[2] = CreateServiceFunction(MS_HIDE,onHide); + hServices[3] = CreateServiceFunction(MS_IGNORE,onIgnore); + if (bMir_08) + hServices[4] = CreateServiceFunction(MS_PROTO,onChangeProto); + hServices[5] = CreateServiceFunction(MS_ADDED,onSendAdded); + hServices[6] = CreateServiceFunction(MS_AUTHREQ,onSendAuthRequest); + hServices[7] = CreateServiceFunction(MS_COPYID,onCopyID); + hServices[8] = CreateServiceFunction(MS_RECVFILES,onRecvFiles); + hServices[9] = CreateServiceFunction(MS_STATUSMSG,onCopyStatusMsg); + hServices[10] = CreateServiceFunction(MS_COPYIP,onCopyIP); + hServices[11] = CreateServiceFunction(MS_COPYMIRVER,onCopyMirVer); + + mi.cbSize = sizeof(CLISTMENUITEM); + mi.flags = CMIF_TCHAR; + mi.hIcon = NULL; + mi.pszContactOwner = NULL; + + mi.position = 120000; + mi.ptszName = LPGENT("Always visible"); + mi.pszService = MS_SETVIS; + hmenuVis = Menu_AddContactMenuItem(&mi); + + mi.position++; + mi.ptszName = LPGENT("Never visible"); + mi.pszService = MS_SETINVIS; + hmenuOff = Menu_AddContactMenuItem(&mi); + + mi.position++; + mi.ptszName = NULL; + mi.pszService = MS_HIDE; + hmenuHide = Menu_AddContactMenuItem(&mi); + + mi.position++; + mi.pszPopupName = (char*)-1; // for Miranda 0.7 + mi.ptszName = LPGENT("Ignore"); + mi.pszService = 0; + mi.flags |= CMIF_ROOTHANDLE; + mi.hIcon = (HICON)CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_ignore" ); + hmenuIgnore = Menu_AddContactMenuItem(&mi); + + hIgnoreItem[0] = AddSubmenuItem(hmenuIgnore, ii[0].name, LoadSkinnedIcon(ii[0].icon), 0, MS_IGNORE, pos, ii[0].type ); + pos += 100000; // insert separator + for (i = 1; i < SIZEOF(ii); i++) + hIgnoreItem[i] = AddSubmenuItem(hmenuIgnore, ii[i].name, LoadSkinnedIcon(ii[i].icon), 0, MS_IGNORE, pos++, ii[i].type ); + + pos += 100000; // insert separator + ood.cbSize = sizeof(ood); + ood.pszGroup = "Events"; + ood.pszPage = "Ignore"; + AddSubmenuItem(hmenuIgnore, LPGENT("Open ignore settings"), (HICON)CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_ignore"), 0, MS_OPT_OPENOPTIONS, pos, (int)&ood ); + + mi.pszPopupName = 0; + if (bMir_08) { + mi.position++; + mi.ptszName = LPGENT("Copy to Account"); + mi.pszService = MS_PROTO; + mi.hIcon = ( HICON )CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_protocol"); + hmenuProto = Menu_AddContactMenuItem(&mi); + + EnumProtoSubmenu(0, 0); + } + + mi.flags = CMIF_TCHAR; + + mi.position++; + mi.ptszName = LPGENT("Send 'You were added'"); + mi.pszService = MS_ADDED; + mi.hIcon = ( HICON )CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_added"); + hmenuAdded = Menu_AddContactMenuItem(&mi); + + mi.position++; + mi.ptszName = LPGENT("Request authorization"); + mi.pszService = MS_AUTHREQ; + mi.hIcon = ( HICON )CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_authorization"); + hmenuAuthReq = Menu_AddContactMenuItem(&mi); + + mi.position++; + mi.ptszName = LPGENT("Copy ID"); + mi.pszService = MS_COPYID; + hmenuCopyID = Menu_AddContactMenuItem(&mi); + + mi.position++; + mi.ptszName = LPGENT("Browse Received Files"); + mi.pszService = MS_RECVFILES; + mi.hIcon = ( HICON )CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_recfiles"); + hmenuRecvFiles = Menu_AddContactMenuItem(&mi); + + mi.position++; + mi.ptszName = LPGENT("Copy Status Message"); + mi.pszService = MS_STATUSMSG; + mi.hIcon = NULL;//LoadIcon(hinstance, MAKEINTRESOURCE(IDI_ICON5)); + hmenuStatusMsg = Menu_AddContactMenuItem(&mi); + + mi.position++; + mi.ptszName = LPGENT("Copy IP"); + mi.pszService = MS_COPYIP; + hmenuCopyIP = Menu_AddContactMenuItem(&mi); + + mi.position++; + mi.ptszName = LPGENT("Copy MirVer"); + mi.pszService = MS_COPYMIRVER; + hmenuCopyMirVer = Menu_AddContactMenuItem(&mi); + + hIcon[0] = ( HICON )CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_copymver"); + hIcon[1] = ( HICON )CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_vis"); + hIcon[2] = ( HICON )CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_invis"); + hIcon[3] = MakeHalfAlphaIcon(hIcon[1]); + hIcon[4] = MakeHalfAlphaIcon(hIcon[2]); + + hHooks[0] = HookEvent(ME_CLIST_PREBUILDCONTACTMENU,BuildMenu); + hHooks[1] = HookEvent(ME_OPT_INITIALISE,OptionsInit); + hHooks[2] = HookEvent(ME_DB_CONTACT_SETTINGCHANGED,ContactSettingChanged); + if (bMir_08) + hHooks[3] = HookEvent(ME_PROTO_ACCLISTCHANGED, EnumProtoSubmenu); + hHooks[4] = HookEvent(ME_MSG_TOOLBARLOADED, TabsrmmButtonsInit); + if (hHooks[4]) + { + hHooks[5] = HookEvent(ME_MSG_BUTTONPRESSED, TabsrmmButtonPressed); + hHooks[6] = HookEvent(ME_MSG_WINDOWEVENT,ContactWindowOpen); + } + + return 0; +} + +extern "C" __declspec(dllexport) const MUUID MirandaInterfaces[] = {MIID_MENUEX, MIID_LAST}; + +extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion) +{ + return &pluginInfoEx; +} + +extern "C" __declspec(dllexport) int Load(void) +{ + + mir_getLP(&pluginInfoEx); + hHooks[7] = HookEvent(ME_SYSTEM_MODULESLOADED,PluginInit); + return 0; +} + +extern "C" __declspec(dllexport) int Unload(void) +{ + int i; + for (i = 0; i < SIZEOF(hHooks); i++) + { + if (hHooks[i]) + UnhookEvent(hHooks[i]); + } + for (i = 0; i < SIZEOF(hServices); i++) + { + if (hServices[i]) + DestroyServiceFunction(hServices[i]); + } + + DestroyIcon( hIcon[3] ); + DestroyIcon( hIcon[4] ); + return 0; +} + +BOOL WINAPI DllMain(HINSTANCE hinst,DWORD fdwReason,LPVOID lpvReserved) +{ + hinstance = hinst; + return 1; +} \ No newline at end of file diff --git a/plugins/MenuItemEx/src/menuex.h b/plugins/MenuItemEx/src/menuex.h new file mode 100644 index 0000000000..5f6540827a --- /dev/null +++ b/plugins/MenuItemEx/src/menuex.h @@ -0,0 +1,73 @@ +#ifndef MENUEX_H__ +#define MENUEX_H__ + +#define _CRT_SECURE_NO_DEPRECATE +#define MIRANDA_VER 0x0A00 + +#include "m_stdhdr.h" +#include +#include "resource.h" +#include +#include "newpluginapi.h" +#include "win2k.h" +#include "time.h" +#include "m_system.h" +#include "m_utils.h" +#include "m_options.h" +#include "m_database.h" +#include "m_langpack.h" +#include "m_file.h" +#include "m_clist.h" +#include "m_protosvc.h" +#include "m_protomod.h" +#include "m_clui.h" +#include "m_ignore.h" +#include "m_icolib.h" +#include "m_skin.h" +#include "m_genmenu.h" +#include "m_popup.h" +#include "m_message.h" +#include "m_fingerprint.h" +#include "m_metacontacts.h" +#include "m_msg_buttonsbar.h" + +#pragma optimize("gsy",on) + +#define VISPLG "MenuItemEx" +#define MODULENAME VISPLG + +#define MIIM_STRING 0x00000040 + +extern PLUGININFOEX pluginInfoEx; + +int OptionsInit(WPARAM,LPARAM); + +#define MAX_PROTOS 32 +#define MAX_GROUPS 32 +#define MAX_IDLEN 16 + +#define VF_VS 0x00000001 +#define VF_SMNAME 0x00000002 +#define VF_HFL 0x00000004 +#define VF_IGN 0x00000008 +#define VF_PROTO 0x00000010 +#define VF_SHOWID 0x00000020 +#define VF_ADD 0x00000040 +#define VF_REQ 0x00000080 +#define VF_CID 0x00000100 +#define VF_RECV 0x00000200 +#define VF_STAT 0x00000400 +#define VF_CIDN 0x00000800 +#define VF_CIP 0x00001000 +#define VF_SAI 0x00002000 +#define VF_TRIMID 0x00004000 +#define VF_CMV 0x00008000 +#define VF_IGNH 0x00010000 +#define VF_REFRESH 0x00020000 + +#define CTRL_IS_PRESSED (GetAsyncKeyState(VK_CONTROL)&0x8000) + +extern const int vf_default; +extern BOOL bMir_08; + +#endif diff --git a/plugins/MenuItemEx/src/options.cpp b/plugins/MenuItemEx/src/options.cpp new file mode 100644 index 0000000000..0aa0bbb68b --- /dev/null +++ b/plugins/MenuItemEx/src/options.cpp @@ -0,0 +1,136 @@ +#include "menuex.h" + + +extern HINSTANCE hinstance; + +struct { + int idc; + int flag; +} +static const checkboxes[]={ + { IDC_COPYID, VF_CID }, + { IDC_STATUSMSG, VF_STAT }, + { IDC_COPYIP, VF_CIP }, + { IDC_COPYMIRVER, VF_CMV }, + { IDC_VIS, VF_VS }, + { IDC_SHOWALPHAICONS, VF_SAI }, + { IDC_HIDE, VF_HFL }, + { IDC_IGNORE, VF_IGN }, + { IDC_IGNOREHIDE, VF_IGNH }, + { IDC_PROTOS, VF_PROTO }, + { IDC_ADDED, VF_ADD }, + { IDC_AUTHREQ, VF_REQ }, + { IDC_SHOWID, VF_SHOWID }, + { IDC_COPYIDNAME, VF_CIDN }, + { IDC_RECVFILES, VF_RECV }, + { IDC_SMNAME, VF_SMNAME }, + { IDC_TRIMID, VF_TRIMID }, + { IDC_REFRESH_DETAILS, VF_REFRESH } +}; + +INT_PTR CALLBACK OptionsProc(HWND hdlg,UINT msg,WPARAM wparam,LPARAM lparam) +{ + DWORD flags=DBGetContactSettingDword(NULL,VISPLG,"flags",vf_default); + TCHAR buffer[64] = {0}; + int i; + + switch(msg) + { + case WM_INITDIALOG: + + TranslateDialogDefault(hdlg); + + for (i = 0; i < SIZEOF(checkboxes); i++) + { + CheckDlgButton(hdlg, checkboxes[i].idc, (flags & checkboxes[i].flag) ? BST_CHECKED : BST_UNCHECKED); + } + + if (ServiceExists(MS_POPUP_ADDPOPUP)) + { + for (i = 0; i < 4; i++) + { + GetDlgItemText(hdlg, checkboxes[i].idc, buffer, SIZEOF(buffer) - 3); + _tcscat(buffer, _T(" *")); + SetDlgItemText(hdlg, checkboxes[i].idc, buffer); + } + } + else + ShowWindow(GetDlgItem(hdlg, IDC_HINT1), SW_HIDE); + + if (!bMir_08) + EnableWindow(GetDlgItem(hdlg,IDC_PROTOS), 0); + + SendMessage(hdlg, WM_USER + 50, 0, 0); + return 0; + + case WM_USER+50: + + EnableWindow(GetDlgItem(hdlg,IDC_SHOWALPHAICONS), + IsDlgButtonChecked(hdlg,IDC_VIS) == BST_CHECKED); + EnableWindow(GetDlgItem(hdlg,IDC_IGNOREHIDE), + IsDlgButtonChecked(hdlg,IDC_IGNORE) == BST_CHECKED); + EnableWindow(GetDlgItem(hdlg,IDC_COPYIDNAME), + IsDlgButtonChecked(hdlg,IDC_COPYID) == BST_CHECKED); + EnableWindow(GetDlgItem(hdlg,IDC_SHOWID), + IsDlgButtonChecked(hdlg,IDC_COPYID) == BST_CHECKED); + EnableWindow(GetDlgItem(hdlg,IDC_TRIMID), + (IsDlgButtonChecked(hdlg,IDC_COPYID) == BST_CHECKED && IsDlgButtonChecked(hdlg,IDC_SHOWID) == BST_CHECKED)); + EnableWindow(GetDlgItem(hdlg,IDC_SMNAME), + IsDlgButtonChecked(hdlg,IDC_STATUSMSG) == BST_CHECKED); + return 1; + + case WM_NOTIFY: + switch(((LPNMHDR)lparam)->code){ + case PSN_APPLY: + { + DWORD mod_flags=0; + + for (i = 0; i < SIZEOF(checkboxes); i++) + { + mod_flags |= IsDlgButtonChecked(hdlg, checkboxes[i].idc) ? checkboxes[i].flag : 0; + } + + //DBDeleteContactSetting(NULL,VISPLG,"flags"); + DBWriteContactSettingDword(NULL,VISPLG,"flags",mod_flags); + + return 1; + } + } + break; + + case WM_COMMAND: + if(HIWORD(wparam)==BN_CLICKED && GetFocus()==(HWND)lparam) { + SendMessage(GetParent(hdlg),PSM_CHANGED,0,0); + if (LOWORD(wparam) == IDC_VIS || + LOWORD(wparam) == IDC_IGNORE || + LOWORD(wparam) == IDC_COPYID || + LOWORD(wparam) == IDC_STATUSMSG || + LOWORD(wparam) == IDC_SHOWID) { + + SendMessage(hdlg, WM_USER + 50, 0, 0); + } + } + return 0; + + case WM_CLOSE: + EndDialog(hdlg,0); + return 0; + } + return 0; +} + +int OptionsInit(WPARAM wparam,LPARAM lparam) +{ + OPTIONSDIALOGPAGE odp={0}; + odp.cbSize = sizeof(odp); + odp.position = 955000000; + odp.hInstance = hinstance; + odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTIONS); + odp.pszTitle = MODULENAME; + odp.pfnDlgProc = OptionsProc; + odp.pszGroup = LPGEN("Customize"); + odp.flags = ODPF_BOLDGROUPS; + Options_AddPage(wparam,&odp); + + return 0; +} diff --git a/plugins/MenuItemEx/src/resource.h b/plugins/MenuItemEx/src/resource.h new file mode 100644 index 0000000000..18b7de34cd --- /dev/null +++ b/plugins/MenuItemEx/src/resource.h @@ -0,0 +1,52 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by resource.rc +// +#define IDD_OPTIONS 101 +#define IDD_AUTHREQ 103 +#define IDI_ICON0 110 +#define IDI_ICON1 111 +#define IDI_ICON2 112 +#define IDI_ICON3 113 +#define IDI_ICON4 114 +#define IDI_ICON5 115 +#define IDI_ICON6 116 +#define IDI_ICON7 117 +#define IDI_ICON8 118 +#define IDI_ICON9 119 +#define IDI_ICON10 120 +#define IDI_ICON11 121 +#define IDI_ICON12 122 +#define IDI_ICON13 123 +#define IDC_VIS 1000 +#define IDC_REASON 1001 +#define IDC_HIDE 1002 +#define IDC_IGNORE 1003 +#define IDC_PROTOS 1004 +#define IDC_REFRESH_DETAILS 1005 +#define IDC_ADDED 1006 +#define IDC_AUTHREQ 1007 +#define IDC_COPYID 1008 +#define IDC_RECVFILES 1009 +#define IDC_STATUSMSG 1010 +#define IDC_COPYIDNAME 1011 +#define IDC_COPYIP 1012 +#define IDC_SHOWALPHAICONS 1013 +#define IDC_SMNAME 1014 +#define IDC_COPYMIRVER 1015 +#define IDC_HINT1 1016 +#define IDC_SHOWID 1017 +#define IDC_TRIMID 1018 +#define IDC_IGNOREHIDE 1019 +#define IDC_STATIC -1 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 124 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1017 +#define _APS_NEXT_SYMED_VALUE 125 +#endif +#endif diff --git a/plugins/MenuItemEx/src/version.h b/plugins/MenuItemEx/src/version.h new file mode 100644 index 0000000000..b98a1d6faf --- /dev/null +++ b/plugins/MenuItemEx/src/version.h @@ -0,0 +1,13 @@ +#define __FILEVERSION_STRING 1,3,0,9 +#define __VERSION_STRING "1.3.0.9" +#define __VERSION_DWORD 0x01030009 + +#define __PLUGIN_NAME "MenuItemEx" +#define __WEB "http://nightly.miranda.im" +#define __DESC "Adds some useful options to a contacts menu." +#define __AUTHORS "Heiko Schillinger, Baloo, Billy_Bons, Robert Posel" +#define __EMAIL "micron@nexgo.de, baloo@bk.ru, tatarinov.sergey@gmail.com, robyer@seznam.cz" +#define __COPYRIGHTS "© 2001-03 Heiko Schillinger, © 2006-08 Baloo, © 2009-10 Billy_Bons, © 2011-12 Robert Posel" + +// {b1902a52-9114-4d7e-ac2e-b3a52e01d574} +#define MIID_MENUEX {0xb1902a52, 0x9114, 0x4d7e, { 0xac, 0x2e, 0xb3, 0xa5, 0x2e, 0x01, 0xd5, 0x74 }} diff --git a/plugins/MenuItemEx/version.h b/plugins/MenuItemEx/version.h deleted file mode 100644 index 355dfa6bf4..0000000000 --- a/plugins/MenuItemEx/version.h +++ /dev/null @@ -1,23 +0,0 @@ -#define __FILEVERSION_STRING 1,3,0,9 -#define __VERSION_STRING "1.3.0.9" -#define __VERSION_DWORD 0x01030008 - -#if defined (_WIN64) -#define __PLUGIN_NAME "MenuItemEx (x64) plugin for Miranda IM" -#define __PLUGIN_ID 4304 -#define __PLUGIN_ID_STR "4304" -#else (_UNICODE) -#define __PLUGIN_NAME "MenuItemEx (Unicode) plugin for Miranda IM" -#define __PLUGIN_ID 4036 -#define __PLUGIN_ID_STR "4036" -#endif - -#define __WEB "http://addons.miranda-im.org/details.php?action=viewfile&id=" - -#define __DESC "Adds some useful options to a contacts menu." -#define __AUTHORS "Heiko Schillinger, Baloo, Billy_Bons, Robert Posel" -#define __EMAIL "micron@nexgo.de, baloo@bk.ru, tatarinov.sergey@gmail.com, robyer@seznam.cz" -#define __COPYRIGHTS "© 2001-03 Heiko Schillinger, © 2006-08 Baloo, © 2009-10 Billy_Bons, © 2011-12 Robert Posel" - -// {b1902a52-9114-4d7e-ac2e-b3a52e01d574} -#define MIID_MENUEX {0xb1902a52, 0x9114, 0x4d7e, { 0xac, 0x2e, 0xb3, 0xa5, 0x2e, 0x01, 0xd5, 0x74 }} diff --git a/plugins/MenuItemEx/version.rc b/plugins/MenuItemEx/version.rc deleted file mode 100644 index 822cdf2568..0000000000 --- a/plugins/MenuItemEx/version.rc +++ /dev/null @@ -1,42 +0,0 @@ -#ifdef APSTUDIO_INVOKED -#error this file is not editable by Microsoft Visual C++ -#endif //APSTUDIO_INVOKED - -#include "version.h" - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION __FILEVERSION_STRING - PRODUCTVERSION __FILEVERSION_STRING - FILEFLAGSMASK 0x17L -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x4L - FILETYPE 0x2L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "FileDescription", __PLUGIN_NAME - VALUE "FileVersion", __VERSION_STRING - VALUE "InternalName", "menuex" - VALUE "LegalCopyright", __COPYRIGHTS - VALUE "OriginalFilename", "menuex.dll" - VALUE "ProductName", "menuex" - VALUE "ProductVersion", __VERSION_STRING - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END -- cgit v1.2.3