From cb4a46e7fbe62d788e66ed6121c717a2d22a4d7c Mon Sep 17 00:00:00 2001 From: watcherhd Date: Thu, 21 Apr 2011 14:14:52 +0000 Subject: svn.miranda.im is moving to a new home! git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@7 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- popup/src/opt_adv.cpp | 762 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 762 insertions(+) create mode 100644 popup/src/opt_adv.cpp (limited to 'popup/src/opt_adv.cpp') diff --git a/popup/src/opt_adv.cpp b/popup/src/opt_adv.cpp new file mode 100644 index 0000000..f8fcd5f --- /dev/null +++ b/popup/src/opt_adv.cpp @@ -0,0 +1,762 @@ +/* +Popup Plus plugin for Miranda IM + +Copyright © 2002 Luca Santarelli, + © 2004-2007 Victor Pavlychko + © 2010 MPK + © 2010 Merlin_de + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +=============================================================================== + +File name : $HeadURL: http://svn.miranda.im/mainrepo/popup/trunk/src/opt_adv.cpp $ +Revision : $Revision: 1651 $ +Last change on : $Date: 2010-07-15 20:31:06 +0300 (Чт, 15 июл 2010) $ +Last change by : $Author: Merlin_de $ + +=============================================================================== +*/ + +#include "headers.h" + +HWND hwndBox = NULL; + +INT_PTR CALLBACK AvatarTrackBarWndProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); +INT_PTR CALLBACK AlphaTrackBarWndProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); + +//effekt name for drop down box +LIST g_lstPopupVfx(5, _tcsicmp); +void OptAdv_RegisterVfx(char *name) { + g_lstPopupVfx.insert(mir_a2t(name)); +} + +void OptAdv_UnregisterVfx() { + for (int i = 0; i < g_lstPopupVfx.getCount(); ++i) + mir_free(g_lstPopupVfx[i]); + g_lstPopupVfx.destroy(); +} + +//Main Dialog Proc +void LoadOption_AdvOpts() { + //History + PopUpOptions.EnableHistory = DBGetContactSettingByte (NULL,MODULNAME, "EnableHistory", TRUE); + PopUpOptions.HistorySize = DBGetContactSettingWord (NULL,MODULNAME, "HistorySize", SETTING_HISTORYSIZE_DEFAULT); + PopUpOptions.UseHppHistoryLog = DBGetContactSettingByte (NULL,MODULNAME, "UseHppHistoryLog", TRUE); + //Avatars + PopUpOptions.avatarBorders = DBGetContactSettingByte (NULL,MODULNAME, "AvatarBorders", TRUE); + PopUpOptions.avatarPNGBorders = DBGetContactSettingByte (NULL,MODULNAME, "AvatarPNGBorders", FALSE); + PopUpOptions.avatarRadius = DBGetContactSettingByte (NULL,MODULNAME, "AvatarRadius", 2); + PopUpOptions.avatarSize = DBGetContactSettingWord (NULL,MODULNAME, "AvatarSize", SETTING_AVTSIZE_DEFAULT); + PopUpOptions.EnableAvatarUpdates = DBGetContactSettingByte (NULL,MODULNAME, "EnableAvatarUpdates", FALSE); + //Monitor + PopUpOptions.Monitor = DBGetContactSettingByte (NULL,MODULNAME, "Monitor", SETTING_MONITOR_DEFAULT); + //Transparency + PopUpOptions.Enable9xTransparency = DBGetContactSettingByte (NULL,MODULNAME, "EnableRegionTransparency", TRUE); + PopUpOptions.UseTransparency = DBGetContactSettingByte (NULL,MODULNAME, "UseTransparency", TRUE); + PopUpOptions.Alpha = DBGetContactSettingByte (NULL,MODULNAME, "Alpha", SETTING_ALPHA_DEFAULT); + PopUpOptions.OpaqueOnHover = DBGetContactSettingByte (NULL,MODULNAME, "OpaqueOnHover", TRUE); + //Effects + PopUpOptions.UseAnimations = DBGetContactSettingByte (NULL,MODULNAME, "UseAnimations", TRUE); + PopUpOptions.UseEffect = DBGetContactSettingByte (NULL,MODULNAME, "Fade", TRUE); + PopUpOptions.Effect = (LPTSTR)DBGetContactSettingStringX(NULL,MODULNAME, "Effect", "", DBVT_TCHAR); + PopUpOptions.FadeIn = DBGetContactSettingDword(NULL,MODULNAME, "FadeInTime", SETTING_FADEINTIME_DEFAULT); + PopUpOptions.FadeOut = DBGetContactSettingDword(NULL,MODULNAME, "FadeOutTime",SETTING_FADEOUTTIME_DEFAULT); + //other old stuff + PopUpOptions.MaxPopups = DBGetContactSettingWord (NULL,MODULNAME, "MaxPopups", 20); +} + +INT_PTR CALLBACK DlgProcPopUpAdvOpts(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { + TCHAR tstr[64]; + static bool bDlgInit = false; //some controls send WM_COMMAND before or during WM_INITDIALOG + + switch (msg) { + case WM_INITDIALOG: { + HWND hCtrl = NULL; + + //Create preview box: + { + hwndBox = CreateWindowEx( + WS_EX_TOOLWINDOW|WS_EX_TOPMOST, // dwStyleEx + _T(BOXPREVIEW_WNDCLASS), // Class name + NULL, // Title + DS_SETFONT|DS_FIXEDSYS|WS_POPUP, // dwStyle + CW_USEDEFAULT, // x + CW_USEDEFAULT, // y + CW_USEDEFAULT, // Width + CW_USEDEFAULT, // Height + HWND_DESKTOP, // Parent + NULL, // menu handle + hInst, // Instance + (LPVOID)0); + ShowWindow(hwndBox, SW_HIDE); + } + //Group: History + { + CheckDlgButton(hwnd, IDC_ENABLE_HISTORY, PopUpOptions.EnableHistory); + SetDlgItemInt (hwnd, IDC_HISTORYSIZE, PopUpOptions.HistorySize, FALSE); + CheckDlgButton(hwnd, IDC_HPPLOG, PopUpOptions.UseHppHistoryLog); + + hCtrl = GetDlgItem(hwnd, IDC_SHOWHISTORY); + SendMessage(hCtrl, BUTTONSETASFLATBTN, 0, 0); + SendMessage(hCtrl, BUTTONADDTOOLTIP, (WPARAM)Translate("Popup History"), 0); + SendMessage(hCtrl, BM_SETIMAGE, IMAGE_ICON, (LPARAM)IcoLib_GetIcon(ICO_HISTORY,0)); + + EnableWindow(GetDlgItem(hwnd, IDC_HISTORY_STATIC1), PopUpOptions.EnableHistory); + EnableWindow(GetDlgItem(hwnd, IDC_HISTORYSIZE), PopUpOptions.EnableHistory); + EnableWindow(GetDlgItem(hwnd, IDC_HISTORY_STATIC2), PopUpOptions.EnableHistory); + EnableWindow(GetDlgItem(hwnd, IDC_SHOWHISTORY), PopUpOptions.EnableHistory); + EnableWindow(GetDlgItem(hwnd, IDC_HPPLOG), PopUpOptions.EnableHistory && gbHppInstalled); + } + //Group: Avatars + { + //Borders + CheckDlgButton(hwnd, IDC_AVT_BORDER, PopUpOptions.avatarBorders); + CheckDlgButton(hwnd, IDC_AVT_PNGBORDER, PopUpOptions.avatarPNGBorders); + EnableWindow(GetDlgItem(hwnd, IDC_AVT_PNGBORDER), PopUpOptions.avatarBorders); + //Radius + SetDlgItemInt(hwnd, IDC_AVT_RADIUS, PopUpOptions.avatarRadius, FALSE); + SendDlgItemMessage(hwnd, IDC_AVT_RADIUS_SPIN,UDM_SETRANGE, 0, (LPARAM)MAKELONG((PopUpOptions.avatarSize / 2),0)); + //Size + SetWindowLongPtr(GetDlgItem(hwnd, IDC_AVT_SIZE_SLIDE), GWLP_USERDATA, GetWindowLongPtr(GetDlgItem(hwnd, IDC_AVT_SIZE_SLIDE), GWLP_WNDPROC)); + SetWindowLongPtr(GetDlgItem(hwnd, IDC_AVT_SIZE_SLIDE), GWLP_WNDPROC, (LONG_PTR)AvatarTrackBarWndProc); + + SendDlgItemMessage(hwnd, IDC_AVT_SIZE_SLIDE, TBM_SETRANGE,FALSE, + MAKELONG(SETTING_AVTSIZE_MIN, SETTING_AVTSIZE_MAX) ); + SendDlgItemMessage(hwnd, IDC_AVT_SIZE_SLIDE, TBM_SETPOS, TRUE, + max(PopUpOptions.avatarSize, SETTING_AVTSIZE_MIN)); + SetDlgItemInt(hwnd, IDC_AVT_SIZE, PopUpOptions.avatarSize, FALSE); + //Request avatars + CheckDlgButton(hwnd, IDC_AVT_REQUEST, PopUpOptions.EnableAvatarUpdates); + } + //Group: Monitor + { + BOOL bMonitor = 0; +#if defined(_UNICODE) + bMonitor = GetSystemMetrics(SM_CMONITORS)>1; +#else + if(MyGetMonitorInfo) { + //os support multimonitor, check if monitor > 1 + bMonitor = GetSystemMetrics(SM_CMONITORS)>1; + } +#endif + CheckDlgButton(hwnd, IDC_MIRANDAWND, bMonitor ? (PopUpOptions.Monitor == MN_MIRANDA) : TRUE); + CheckDlgButton(hwnd, IDC_ACTIVEWND, bMonitor ? (PopUpOptions.Monitor == MN_ACTIVE) : FALSE); + EnableWindow(GetDlgItem(hwnd, IDC_GRP_MULTIMONITOR), bMonitor); + EnableWindow(GetDlgItem(hwnd, IDC_MULTIMONITOR_DESC), bMonitor); + EnableWindow(GetDlgItem(hwnd, IDC_MIRANDAWND), bMonitor); + EnableWindow(GetDlgItem(hwnd, IDC_ACTIVEWND), bMonitor); + } + //Group: Transparency + { + //9x/ME + CheckDlgButton(hwnd, IDC_TRANS_9X, PopUpOptions.Enable9xTransparency); + //EnableWindow(GetDlgItem(hwnd, IDC_TRANS_9X), !IsWinVer2000Plus()); + ShowWindow(GetDlgItem(hwnd, IDC_TRANS_9X), IsWinVer2000Plus() ? SW_HIDE : SW_SHOW); + //win2k+ + CheckDlgButton(hwnd, IDC_TRANS, PopUpOptions.UseTransparency); + SendDlgItemMessage(hwnd, IDC_TRANS_SLIDER, TBM_SETRANGE, FALSE, MAKELONG(1,255)); + SendDlgItemMessage(hwnd, IDC_TRANS_SLIDER, TBM_SETPOS, TRUE, PopUpOptions.Alpha); + SetWindowLongPtr(GetDlgItem(hwnd, IDC_TRANS_SLIDER), GWLP_USERDATA, GetWindowLongPtr(GetDlgItem(hwnd, IDC_TRANS_SLIDER), GWLP_WNDPROC)); + SetWindowLongPtr(GetDlgItem(hwnd, IDC_TRANS_SLIDER), GWLP_WNDPROC, (LONG_PTR)AlphaTrackBarWndProc); + wsprintf(tstr, _T("%d%%"), Byte2Percentile(PopUpOptions.Alpha)); + SetDlgItemText(hwnd, IDC_TRANS_PERCENT, tstr); + CheckDlgButton(hwnd, IDC_TRANS_OPAQUEONHOVER, PopUpOptions.OpaqueOnHover); + { +#if defined(_UNICODE) + BOOL how = TRUE; +#else + BOOL how = (BOOL)(MySetLayeredWindowAttributes); +#endif + EnableWindow(GetDlgItem(hwnd, IDC_TRANS) ,how); + EnableWindow(GetDlgItem(hwnd, IDC_TRANS_TXT1) ,how && PopUpOptions.UseTransparency); + EnableWindow(GetDlgItem(hwnd, IDC_TRANS_SLIDER) ,how && PopUpOptions.UseTransparency); + EnableWindow(GetDlgItem(hwnd, IDC_TRANS_PERCENT) ,how && PopUpOptions.UseTransparency); + EnableWindow(GetDlgItem(hwnd, IDC_TRANS_OPAQUEONHOVER) ,how && PopUpOptions.UseTransparency); + } + ShowWindow(GetDlgItem(hwnd, IDC_TRANS), IsWinVer2000Plus() ? SW_SHOW : SW_HIDE); + } + //Group: Effects + { + //Use Animations + CheckDlgButton(hwnd, IDC_USEANIMATIONS, PopUpOptions.UseAnimations); + //Fade + SetDlgItemInt (hwnd, IDC_FADEIN, PopUpOptions.FadeIn, FALSE); + SetDlgItemInt (hwnd, IDC_FADEOUT,PopUpOptions.FadeOut,FALSE); + UDACCEL aAccels[] = {{0,50},{1,100},{3,500}}; + SendDlgItemMessage(hwnd, IDC_FADEIN_SPIN, UDM_SETRANGE, 0, (LPARAM)MAKELONG(SETTING_FADEINTIME_MAX, SETTING_FADEINTIME_MIN)); + SendDlgItemMessage(hwnd, IDC_FADEIN_SPIN, UDM_SETACCEL, (WPARAM)SIZEOF(aAccels), (LPARAM)&aAccels); + SendDlgItemMessage(hwnd, IDC_FADEOUT_SPIN,UDM_SETRANGE, 0, (LPARAM)MAKELONG(SETTING_FADEOUTTIME_MAX,SETTING_FADEOUTTIME_MIN)); + SendDlgItemMessage(hwnd, IDC_FADEOUT_SPIN,UDM_SETACCEL, (WPARAM)SIZEOF(aAccels), (LPARAM)&aAccels); + + BOOL how = PopUpOptions.UseAnimations || PopUpOptions.UseEffect; + EnableWindow(GetDlgItem(hwnd, IDC_FADEIN_TXT1), how); + EnableWindow(GetDlgItem(hwnd, IDC_FADEIN), how); + EnableWindow(GetDlgItem(hwnd, IDC_FADEIN_SPIN), how); + EnableWindow(GetDlgItem(hwnd, IDC_FADEIN_TXT2), how); + EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT_TXT1), how); + EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT), how); + EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT_SPIN), how); + EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT_TXT2), how); + //effects drop down + { + DWORD dwItem, dwActiveItem = 0; + +#if defined(_UNICODE) + BOOL how = TRUE; +#else + BOOL how = (BOOL)(MySetLayeredWindowAttributes) /*&& !PopUpOptions.UseAnimations*/; +#endif + EnableWindow(GetDlgItem(hwnd, IDC_EFFECT), how); + EnableWindow(GetDlgItem(hwnd, IDC_EFFECT_TXT), how); + + hCtrl = GetDlgItem(hwnd, IDC_EFFECT); + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("No effect")) ,-2); + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT("Fade in/out")) ,-1); + dwActiveItem = (DWORD)PopUpOptions.UseEffect; + for (int i = 0; i < g_lstPopupVfx.getCount(); ++i) { + dwItem = ComboBox_AddString(hCtrl, TranslateTS(g_lstPopupVfx[i])); + ComboBox_SetItemData(hCtrl, dwItem, i); + if (PopUpOptions.UseEffect && !lstrcmp(g_lstPopupVfx[i], PopUpOptions.Effect)) + dwActiveItem = dwItem; + } + SendDlgItemMessage(hwnd, IDC_EFFECT, CB_SETCURSEL, dwActiveItem, 0); + } + } + + //later check stuff + { + SetDlgItemInt(hwnd, IDC_MAXPOPUPS, PopUpOptions.MaxPopups, FALSE); + } + + TranslateDialogDefault(hwnd); //do it on end of WM_INITDIALOG + bDlgInit = true; + }//end WM_INITDIALOG + return TRUE; + case WM_HSCROLL: { + UINT idCtrl = GetDlgCtrlID((HWND)lParam); + switch (idCtrl) { + case IDC_AVT_SIZE_SLIDE: + { + PopUpOptions.avatarSize = SendDlgItemMessage(hwnd,IDC_AVT_SIZE_SLIDE, TBM_GETPOS,0,0); + SetDlgItemInt(hwnd, IDC_AVT_SIZE ,PopUpOptions.avatarSize,FALSE); + SendDlgItemMessage(hwnd, IDC_AVT_RADIUS_SPIN,UDM_SETRANGE, 0, (LPARAM)MAKELONG((PopUpOptions.avatarSize / 2),0)); + SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); + } + break; + case IDC_TRANS_SLIDER: + { + PopUpOptions.Alpha = (BYTE)SendDlgItemMessage(hwnd,IDC_TRANS_SLIDER, TBM_GETPOS, 0,0); + wsprintf(tstr, TranslateT("%d%%"), Byte2Percentile(PopUpOptions.Alpha)); + SetDlgItemText(hwnd, IDC_TRANS_PERCENT, tstr); + SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); + } + break; + default: + break; + }// end switch idCtrl + }//end WM_HSCROLL + break; + case WM_COMMAND: { + UINT idCtrl = LOWORD(wParam); + switch (HIWORD(wParam)) { + case BN_CLICKED: //Button controls + switch(idCtrl) { + case IDC_ENABLE_HISTORY: + { + PopUpOptions.EnableHistory = !PopUpOptions.EnableHistory; + EnableWindow(GetDlgItem(hwnd, IDC_HISTORY_STATIC1), PopUpOptions.EnableHistory); + EnableWindow(GetDlgItem(hwnd, IDC_HISTORYSIZE), PopUpOptions.EnableHistory); + EnableWindow(GetDlgItem(hwnd, IDC_HISTORY_STATIC2), PopUpOptions.EnableHistory); + EnableWindow(GetDlgItem(hwnd, IDC_SHOWHISTORY), PopUpOptions.EnableHistory); + EnableWindow(GetDlgItem(hwnd, IDC_HPPLOG), PopUpOptions.EnableHistory && gbHppInstalled); + SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); + } + break; + case IDC_SHOWHISTORY: + { + PopupHistoryShow(); + } + break; + case IDC_HPPLOG: + { + PopUpOptions.UseHppHistoryLog = !PopUpOptions.UseHppHistoryLog; + SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); + } + break; + case IDC_AVT_BORDER: + { + PopUpOptions.avatarBorders = !PopUpOptions.avatarBorders; + EnableWindow(GetDlgItem(hwnd, IDC_AVT_PNGBORDER), PopUpOptions.avatarBorders); + SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); + } + break; + case IDC_AVT_PNGBORDER: + { + PopUpOptions.avatarPNGBorders = !PopUpOptions.avatarPNGBorders; + SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); + } + break; + case IDC_AVT_REQUEST: + { + PopUpOptions.EnableAvatarUpdates = !PopUpOptions.EnableAvatarUpdates; + SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); + } + break; + case IDC_MIRANDAWND: + { + PopUpOptions.Monitor = MN_MIRANDA; + SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); + } + break; + case IDC_ACTIVEWND: + { + PopUpOptions.Monitor = MN_ACTIVE; + SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); + } + break; + case IDC_TRANS_9X: + { + PopUpOptions.Enable9xTransparency = !PopUpOptions.Enable9xTransparency; + SendMessage(GetParent(hwnd), PSM_CHANGED,0,0); + } + break; + case IDC_TRANS: + { + PopUpOptions.UseTransparency = !PopUpOptions.UseTransparency; +#if defined(_UNICODE) + BOOL how = TRUE; +#else + BOOL how = (BOOL)(MySetLayeredWindowAttributes); +#endif + EnableWindow(GetDlgItem(hwnd, IDC_TRANS_TXT1) ,how && PopUpOptions.UseTransparency); + EnableWindow(GetDlgItem(hwnd, IDC_TRANS_SLIDER) ,how && PopUpOptions.UseTransparency); + EnableWindow(GetDlgItem(hwnd, IDC_TRANS_PERCENT) ,how && PopUpOptions.UseTransparency); + EnableWindow(GetDlgItem(hwnd, IDC_TRANS_OPAQUEONHOVER) ,how && PopUpOptions.UseTransparency); + SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); + } + break; + case IDC_TRANS_OPAQUEONHOVER: + { + PopUpOptions.OpaqueOnHover = !PopUpOptions.OpaqueOnHover; + SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); + } + break; + case IDC_USEANIMATIONS: + { + PopUpOptions.UseAnimations = !PopUpOptions.UseAnimations; + BOOL enable = PopUpOptions.UseAnimations || PopUpOptions.UseEffect; + EnableWindow(GetDlgItem(hwnd, IDC_FADEIN_TXT1), enable); + EnableWindow(GetDlgItem(hwnd, IDC_FADEIN), enable); + EnableWindow(GetDlgItem(hwnd, IDC_FADEIN_SPIN), enable); + EnableWindow(GetDlgItem(hwnd, IDC_FADEIN_TXT2), enable); + EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT_TXT1), enable); + EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT), enable); + EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT_SPIN), enable); + EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT_TXT2), enable); + SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); + } + break; + case IDC_PREVIEW: + { + PopUpPreview(); + } + break; + default: + break; + } + break; + case CBN_SELCHANGE: //ComboBox controls + switch(idCtrl) { + //lParam = Handle to the control + case IDC_EFFECT: + { + int iEffect = ComboBox_GetItemData((HWND)lParam, ComboBox_GetCurSel((HWND)lParam)); + PopUpOptions.UseEffect = (iEffect != -2) ? TRUE : FALSE; + mir_free(PopUpOptions.Effect); + PopUpOptions.Effect = mir_tstrdup((iEffect >= 0) ? g_lstPopupVfx[iEffect] : _T("")); + + BOOL enable = PopUpOptions.UseAnimations || PopUpOptions.UseEffect; + EnableWindow(GetDlgItem(hwnd, IDC_FADEIN_TXT1), enable); + EnableWindow(GetDlgItem(hwnd, IDC_FADEIN), enable); + EnableWindow(GetDlgItem(hwnd, IDC_FADEIN_SPIN), enable); + EnableWindow(GetDlgItem(hwnd, IDC_FADEIN_TXT2), enable); + EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT_TXT1), enable); + EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT), enable); + EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT_SPIN), enable); + EnableWindow(GetDlgItem(hwnd, IDC_FADEOUT_TXT2), enable); + SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); + } + break; + default: + break; + } + break; + case EN_CHANGE: //Edit controls change + if(!bDlgInit) break; + switch(idCtrl) { + //lParam = Handle to the control + case IDC_MAXPOPUPS: + { + int maxPop = GetDlgItemInt(hwnd, idCtrl, NULL, FALSE); + if(maxPop > 0){ + PopUpOptions.MaxPopups = maxPop; + SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); + } + } + break; + case IDC_HISTORYSIZE: + { + int histSize = GetDlgItemInt(hwnd, idCtrl, NULL, FALSE); + if( histSize > 0 && + histSize <= SETTING_HISTORYSIZE_MAX){ + PopUpOptions.HistorySize = histSize; + SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); + } + } + break; + case IDC_AVT_RADIUS: + { + int avtRadius = GetDlgItemInt(hwnd, idCtrl, NULL, FALSE); + if( avtRadius <= SETTING_AVTSIZE_MAX / 2 ){ + PopUpOptions.avatarRadius = avtRadius; + SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); + } + } + break; + case IDC_FADEIN: + { + int fadeIn = GetDlgItemInt(hwnd, idCtrl, NULL, FALSE); + if( fadeIn >= SETTING_FADEINTIME_MIN && + fadeIn <= SETTING_FADEINTIME_MAX ){ + PopUpOptions.FadeIn = fadeIn; + SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); + } + } + break; + case IDC_FADEOUT: + { + int fadeOut = GetDlgItemInt(hwnd, idCtrl, NULL, FALSE); + if( fadeOut >= SETTING_FADEOUTTIME_MIN && + fadeOut <= SETTING_FADEOUTTIME_MAX){ + PopUpOptions.FadeOut = fadeOut; + SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); + } + } + break; + default: + break; + }//end switch(idCtrl) + break; + case EN_KILLFOCUS: //Edit controls lost fokus + switch(idCtrl) { + //lParam = Handle to the control + case IDC_MAXPOPUPS: + { + int maxPop = GetDlgItemInt(hwnd, idCtrl, NULL, FALSE); + if(maxPop <= 0) + PopUpOptions.MaxPopups = 20; + if(maxPop != PopUpOptions.MaxPopups) { + SetDlgItemInt(hwnd, idCtrl, PopUpOptions.MaxPopups, FALSE); + //ErrorMSG(1); + SetFocus((HWND)lParam); + } + } + break; + case IDC_HISTORYSIZE: + { + int histSize = GetDlgItemInt(hwnd, idCtrl, NULL, FALSE); + if(histSize <= 0) + PopUpOptions.HistorySize = SETTING_HISTORYSIZE_DEFAULT; + else if(histSize > SETTING_HISTORYSIZE_MAX) + PopUpOptions.HistorySize = SETTING_HISTORYSIZE_MAX; + if(histSize != PopUpOptions.HistorySize) { + SetDlgItemInt(hwnd, idCtrl, PopUpOptions.HistorySize, FALSE); + ErrorMSG(1, SETTING_HISTORYSIZE_MAX); + SetFocus((HWND)lParam); + } + } + break; + case IDC_AVT_RADIUS: + { + int avtRadius = GetDlgItemInt(hwnd, idCtrl, NULL, FALSE); + if(avtRadius > SETTING_AVTSIZE_MAX / 2) + PopUpOptions.avatarRadius = SETTING_AVTSIZE_MAX / 2; + if(avtRadius != PopUpOptions.avatarRadius) { + SetDlgItemInt(hwnd, idCtrl, PopUpOptions.avatarRadius, FALSE); + ErrorMSG(0, SETTING_AVTSIZE_MAX / 2); + SetFocus((HWND)lParam); + } + } + break; + case IDC_FADEIN: + { + int fade = GetDlgItemInt(hwnd, idCtrl, NULL, FALSE); + if(fade < SETTING_FADEINTIME_MIN) + PopUpOptions.FadeIn = SETTING_FADEINTIME_MIN; + else if(fade > SETTING_FADEINTIME_MAX) + PopUpOptions.FadeIn = SETTING_FADEINTIME_MAX; + if(fade != PopUpOptions.FadeIn) { + SetDlgItemInt(hwnd, idCtrl, PopUpOptions.FadeIn, FALSE); + ErrorMSG(SETTING_FADEINTIME_MIN, SETTING_FADEINTIME_MAX); + SetFocus((HWND)lParam); + } + } + break; + case IDC_FADEOUT: + { + int fade = GetDlgItemInt(hwnd, idCtrl, NULL, FALSE); + if(fade < SETTING_FADEOUTTIME_MIN) + PopUpOptions.FadeOut = SETTING_FADEOUTTIME_MIN; + else if(fade > SETTING_FADEOUTTIME_MAX) + PopUpOptions.FadeOut = SETTING_FADEOUTTIME_MAX; + if(fade != PopUpOptions.FadeOut) { + SetDlgItemInt(hwnd, idCtrl, PopUpOptions.FadeOut, FALSE); + ErrorMSG(SETTING_FADEOUTTIME_MIN, SETTING_FADEOUTTIME_MAX); + SetFocus((HWND)lParam); + } + } + break; + default: + break; + }//end switch(idCtrl) + break; + default: + break; + }// end switch (HIWORD(wParam)) + }//end WM_COMMAND + break; + case WM_NOTIFY: { + switch(((LPNMHDR)lParam)->idFrom) { + case 0: { + switch (((LPNMHDR)lParam)->code) { + case PSN_RESET: + LoadOption_AdvOpts(); + return TRUE; + case PSN_APPLY: + { + //History + DBWriteContactSettingByte (NULL,MODULNAME, "EnableHistory", (BYTE)PopUpOptions.EnableHistory); + DBWriteContactSettingWord (NULL,MODULNAME, "HistorySize", PopUpOptions.HistorySize); + PopupHistoryResize(); + DBWriteContactSettingByte (NULL,MODULNAME, "UseHppHistoryLog", PopUpOptions.UseHppHistoryLog); + //Avatars + DBWriteContactSettingByte (NULL,MODULNAME, "AvatarBorders", PopUpOptions.avatarBorders); + DBWriteContactSettingByte (NULL,MODULNAME, "AvatarPNGBorders", PopUpOptions.avatarPNGBorders); + DBWriteContactSettingByte (NULL,MODULNAME, "AvatarRadius", PopUpOptions.avatarRadius); + DBWriteContactSettingWord (NULL,MODULNAME, "AvatarSize", PopUpOptions.avatarSize); + DBWriteContactSettingByte (NULL,MODULNAME, "EnableAvatarUpdates", PopUpOptions.EnableAvatarUpdates); + //Monitor + DBWriteContactSettingByte (NULL,MODULNAME, "Monitor", PopUpOptions.Monitor); + //Transparency + DBWriteContactSettingByte (NULL,MODULNAME, "EnableRegionTransparency", PopUpOptions.Enable9xTransparency); + DBWriteContactSettingByte (NULL,MODULNAME, "UseTransparency", PopUpOptions.UseTransparency); + DBWriteContactSettingByte (NULL,MODULNAME, "Alpha", PopUpOptions.Alpha); + DBWriteContactSettingByte (NULL,MODULNAME, "OpaqueOnHover", PopUpOptions.OpaqueOnHover); + + //Effects + DBWriteContactSettingByte (NULL,MODULNAME, "UseAnimations", PopUpOptions.UseAnimations); + DBWriteContactSettingByte (NULL,MODULNAME, "Fade", PopUpOptions.UseEffect); + DBWriteContactSettingTString(NULL, MODULNAME, "Effect", PopUpOptions.Effect); + DBWriteContactSettingDword(NULL,MODULNAME, "FadeInTime", PopUpOptions.FadeIn); + DBWriteContactSettingDword(NULL,MODULNAME, "FadeOutTime", PopUpOptions.FadeOut); + //other old stuff + DBWriteContactSettingWord (NULL,MODULNAME, "MaxPopups", (BYTE)PopUpOptions.MaxPopups); + } + return TRUE; + default: + break; + } + } + break; + default: + break; + } + }//end WM_NOTIFY + break; + case WM_DESTROY: + { + bDlgInit = false; + }//end WM_DESTROY + break; + default: + return FALSE; + }//end switch (msg) + return FALSE; +} + +INT_PTR CALLBACK AvatarTrackBarWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + if (!IsWindowEnabled(hwnd)) + return CallWindowProc((WNDPROC)GetWindowLongPtr(hwnd, GWLP_USERDATA), hwnd, msg, wParam, lParam); + + static int oldVal = -1; + switch (msg) { + case WM_MOUSEWHEEL: + case WM_KEYDOWN: + case WM_KEYUP: + { + if (!IsWindowVisible(hwndBox)) + break; + } + case WM_MOUSEMOVE: + { + TRACKMOUSEEVENT tme; + tme.cbSize = sizeof(tme); + tme.dwFlags = TME_LEAVE; + tme.dwHoverTime = HOVER_DEFAULT; + tme.hwndTrack = hwnd; + _TrackMouseEvent(&tme); + + int newVal = (BYTE)SendMessage(hwnd, TBM_GETPOS, 0, 0); + if (oldVal != newVal) { + if (oldVal < 0) { + SetWindowLongPtr(hwndBox, GWLP_USERDATA, 0); + } + RECT rc; GetWindowRect(hwnd, &rc); + SetWindowPos(hwndBox, NULL, + (rc.left+rc.right-newVal)/2, rc.bottom+2, newVal, newVal, + SWP_NOACTIVATE|SWP_DEFERERASE|SWP_NOSENDCHANGING|SWP_SHOWWINDOW); + + HRGN rgn = CreateRoundRectRgn(0, 0, newVal, newVal, 2 * PopUpOptions.avatarRadius, 2 * PopUpOptions.avatarRadius); + SetWindowRgn(hwndBox, rgn, TRUE); + InvalidateRect(hwndBox, NULL, FALSE); + oldVal = newVal; + } + } + break; + case WM_MOUSELEAVE: + { +/* + SetWindowLongPtr(hwndBox, GWLP_USERDATA, 2); + SetWindowPos(hwndBox, NULL, + 0, 0, 201, 201, + SWP_NOACTIVATE|SWP_DEFERERASE|SWP_NOSENDCHANGING|SWP_SHOWWINDOW); + + HRGN hrgnWindow, hrgnTmp, hrgnTmp2; + hrgnWindow = CreateRectRgn(0, 0, 201, 201); + hrgnTmp = CreateEllipticRgn(-90, -90, 90, 90); + SubtractRgn(hrgnWindow, hrgnWindow, hrgnTmp); + hrgnTmp = CreateEllipticRgn(112, -90, 292, 90); + SubtractRgn(hrgnWindow, hrgnWindow, hrgnTmp); + hrgnTmp = CreateEllipticRgn(-90, 112, 90, 292); + SubtractRgn(hrgnWindow, hrgnWindow, hrgnTmp); + hrgnTmp = CreateEllipticRgn(112, 112, 292, 292); + SubtractRgn(hrgnWindow, hrgnWindow, hrgnTmp); + + hrgnTmp = CreateRectRgn(5, 5, 196, 196); + hrgnTmp2 = CreateRoundRectRgn(89, 0, 113, 201, 8, 8); + UnionRgn(hrgnTmp, hrgnTmp, hrgnTmp2); + hrgnTmp2 = CreateRoundRectRgn(0, 89, 201, 113, 8, 8); + UnionRgn(hrgnTmp, hrgnTmp, hrgnTmp2); + IntersectRgn(hrgnWindow, hrgnWindow, hrgnTmp); + + SetWindowRgn(hwndBox, hrgnWindow, FALSE); + + if (MySetLayeredWindowAttributes) + { + SetWindowLong(hwndBox, GWL_EXSTYLE, GetWindowLong(hwndBox, GWL_EXSTYLE) | WS_EX_LAYERED); + MySetLayeredWindowAttributes(hwndBox, NULL, PopUpOptions.Alpha, LWA_ALPHA); + } +*/ + SetWindowRgn(hwndBox, NULL, TRUE); + ShowWindow(hwndBox, SW_HIDE); + oldVal = -1; + } + break; + default: + break; + } + return CallWindowProc((WNDPROC)GetWindowLongPtr(hwnd, GWLP_USERDATA), hwnd, msg, wParam, lParam); +} + +INT_PTR CALLBACK AlphaTrackBarWndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + if (!IsWindowEnabled(hwnd)) + return CallWindowProc((WNDPROC)GetWindowLongPtr(hwnd, GWLP_USERDATA), hwnd, msg, wParam, lParam); + + static int oldVal = -1; + switch (msg) + { + case WM_MOUSEWHEEL: + case WM_KEYDOWN: + case WM_KEYUP: + { + if (!IsWindowVisible(hwndBox)) + break; + } + case WM_MOUSEMOVE: + { + TRACKMOUSEEVENT tme; + tme.cbSize = sizeof(tme); + tme.dwFlags = TME_LEAVE; + tme.dwHoverTime = HOVER_DEFAULT; + tme.hwndTrack = hwnd; + _TrackMouseEvent(&tme); + + int newVal = (BYTE)SendMessage(hwnd, TBM_GETPOS, 0, 0); + if (oldVal != newVal) + { +#if defined(_UNICODE) + if (oldVal < 0) + { + SetWindowLongPtr(hwndBox, GWLP_USERDATA, 1); + RECT rc; GetWindowRect(hwnd, &rc); + SetWindowPos(hwndBox, NULL, + (rc.left+rc.right-170)/2, rc.bottom+2, 170, 50, + SWP_NOACTIVATE|SWP_DEFERERASE|SWP_NOSENDCHANGING|SWP_SHOWWINDOW); + SetWindowRgn(hwndBox, NULL, TRUE); + } + SetWindowLong(hwndBox, GWL_EXSTYLE, GetWindowLong(hwndBox, GWL_EXSTYLE) | WS_EX_LAYERED); + SetLayeredWindowAttributes(hwndBox, NULL, newVal, LWA_ALPHA); +#else + if (MySetLayeredWindowAttributes) + { + if (oldVal < 0) + { + SetWindowLongPtr(hwndBox, GWLP_USERDATA, 1); + RECT rc; GetWindowRect(hwnd, &rc); + SetWindowPos(hwndBox, NULL, + (rc.left+rc.right-170)/2, rc.bottom+2, 170, 50, + SWP_NOACTIVATE|SWP_DEFERERASE|SWP_NOSENDCHANGING|SWP_SHOWWINDOW); + SetWindowRgn(hwndBox, NULL, TRUE); + } + SetWindowLong(hwndBox, GWL_EXSTYLE, GetWindowLong(hwndBox, GWL_EXSTYLE) | WS_EX_LAYERED); + MySetLayeredWindowAttributes(hwndBox, NULL, newVal, LWA_ALPHA); + } +#endif + oldVal = newVal; + } + break; + } + case WM_MOUSELEAVE: + { +#if defined(_UNICODE) + SetWindowLong(hwndBox, GWL_EXSTYLE, GetWindowLong(hwndBox, GWL_EXSTYLE) & ~WS_EX_LAYERED); + SetLayeredWindowAttributes(hwndBox, NULL, 255, LWA_ALPHA); +#else + if (MySetLayeredWindowAttributes) { + SetWindowLong(hwndBox, GWL_EXSTYLE, GetWindowLong(hwndBox, GWL_EXSTYLE) & ~WS_EX_LAYERED); + MySetLayeredWindowAttributes(hwndBox, NULL, 255, LWA_ALPHA); + } +#endif + ShowWindow(hwndBox, SW_HIDE); + oldVal = -1; + break; + } + } + return CallWindowProc((WNDPROC)GetWindowLongPtr(hwnd, GWLP_USERDATA), hwnd, msg, wParam, lParam); +} + -- cgit v1.2.3