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_class.cpp | 603 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 603 insertions(+) create mode 100644 popup/src/opt_class.cpp (limited to 'popup/src/opt_class.cpp') diff --git a/popup/src/opt_class.cpp b/popup/src/opt_class.cpp new file mode 100644 index 0000000..12b1233 --- /dev/null +++ b/popup/src/opt_class.cpp @@ -0,0 +1,603 @@ +/* +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. + +=============================================================================== +part of this file is taken from SjE great YAPP plugin: +https://server.scottellis.com.au/svn/mim_plugs/yapp/options.cpp + +File name : $HeadURL: http://svn.miranda.im/mainrepo/popup/trunk/src/opt_class.cpp $ +Revision : $Revision: 1610 $ +Last change on : $Date: 2010-06-23 00:55:13 +0300 (Ср, 23 июн 2010) $ +Last change by : $Author: Merlin_de $ + +=============================================================================== +*/ +#include "headers.h" + +//--------------------------------------------------------------------------- +//Workaround for MS bug ComboBox_SelectItemData +int ComboBox_SelectItem(HWND hwndCtl, int indexStart, char* data) { + int i = 0; + for ( i ; i < ComboBox_GetCount(hwndCtl); i++) { + if(strcmp(data, (char*)ComboBox_GetItemData(hwndCtl, i))==0) { + ComboBox_SetCurSel (hwndCtl,i); + return i; + } + } + return CB_ERR; +} + +//--------------------------------------------------------------------------- +//some help function (not realy needed) +#define ComboBox_AddStringW(hwndCtl, lpwsz) ((int)(DWORD)MySendMessageW((HWND)(hwndCtl), CB_ADDSTRING, 0L, (LPARAM)(LPCWSTR)(lpwsz))) +#define ComboBox_SetTextW(hwndCtl, lpwsz) ((int)(DWORD)MySetWindowTextW((HWND)(hwndCtl), (LPCWSTR)(lpwsz))) + +//--------------------------------------------------------------------------- +//Dialog Proc +INT_PTR CALLBACK DlgProcOptsClasses(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { + static TVITEM tvi = {0}; + static struct { + UINT idCtrl; + BYTE onTyp0; + BYTE onTyp1; + BYTE onTyp2; + } ctrlsAll[] = { + {IDC_TXT_TITLE1 ,0 ,1 ,1}, + {IDC_ENABLE ,0 ,1 ,1}, + + {IDC_TXT_TIMEOUT ,0 ,1 ,1}, + {IDC_TIMEOUT ,0 ,1 ,1}, + {IDC_TIMEOUT_SPIN ,0 ,1 ,1}, + {IDC_TXT_TIMEOUT_SEC ,0 ,1 ,1}, + {IDC_TXT_TIMEOUT_DEFAULT ,0 ,1 ,1}, + {IDC_TXT_TIMEOUT_INFINITE ,0 ,1 ,1}, + + {IDC_TXT_LACTION ,0 ,1 ,1}, + {IDC_LACTION ,0 ,1 ,1}, + + {IDC_TXT_RACTION ,0 ,1 ,1}, + {IDC_RACTION ,0 ,1 ,1}, + + {IDC_CHECKWINDOW ,0 ,0 ,0}, //may be delete ?? + + {IDC_TXT_TITLE3 ,0 ,1 ,0}, + {IDC_SOFFLINE ,0 ,1 ,0}, + {IDC_SONLINE ,0 ,1 ,0}, + {IDC_SAWAY ,0 ,1 ,0}, + {IDC_SNA ,0 ,1 ,0}, + {IDC_SOCCUPIED ,0 ,1 ,0}, + {IDC_SDND ,0 ,1 ,0}, + {IDC_SFREE4CHAT ,0 ,1 ,0}, + {IDC_SINVISIBLE ,0 ,1 ,0}, + {IDC_SPHONE ,0 ,1 ,0}, + {IDC_SLUNCH ,0 ,1 ,0}, + + {IDC_TXT_TITLE4 ,0 ,0 ,0}, + {IDC_SOFFLINE2 ,0 ,0 ,0}, + {IDC_SONLINE2 ,0 ,0 ,0}, + {IDC_SAWAY2 ,0 ,0 ,0}, + {IDC_SNA2 ,0 ,0 ,0}, + {IDC_SOCCUPIED2 ,0 ,0 ,0}, + {IDC_SDND2 ,0 ,0 ,0}, + {IDC_SFREE4CHAT2 ,0 ,0 ,0}, + {IDC_SINVISIBLE2 ,0 ,0 ,0}, + {IDC_SPHONE2 ,0 ,0 ,0}, + {IDC_SLUNCH2 ,0 ,0 ,0}, + + {IDC_ICO_INFO ,0 ,1 ,1}, + {IDC_TXT_COLORS ,0 ,1 ,1}, + {IDC_MORE ,0 ,1 ,1}, + + {IDC_PREVIEW ,0 ,1 ,1}, + }; + + static UINT ctrlsClass[] = { + IDC_TXT_TITLE1, /*IDC_TXT_TITLE3,*/ + IDC_TXT_TIMEOUT, IDC_TIMEOUT, + IDC_TIMEOUT_SPIN, IDC_TXT_TIMEOUT_SEC, + IDC_TXT_TIMEOUT_DEFAULT, IDC_TXT_TIMEOUT_INFINITE, + IDC_TXT_LACTION, IDC_LACTION, + IDC_TXT_RACTION, IDC_RACTION, + IDC_ICO_INFO, IDC_TXT_COLORS, + }; + + static UINT ctrlsEnable[] = { + IDC_TXT_TIMEOUT, IDC_TIMEOUT, IDC_TIMEOUT_SPIN, + IDC_TXT_TIMEOUT_SEC , IDC_TXT_TIMEOUT_DEFAULT, IDC_TXT_TIMEOUT_INFINITE, + IDC_TXT_LACTION, IDC_LACTION, + IDC_TXT_RACTION, IDC_RACTION, + /*IDC_CHECKWINDOW,*/ IDC_TXT_TITLE3, IDC_TXT_TITLE4, + IDC_ICO_INFO, IDC_TXT_COLORS, IDC_MORE, + + IDC_SOFFLINE, IDC_SONLINE, IDC_SAWAY, IDC_SNA, + IDC_SOCCUPIED, IDC_SDND, IDC_SFREE4CHAT, + IDC_SINVISIBLE, IDC_SPHONE, IDC_SLUNCH, + + IDC_SOFFLINE2, IDC_SONLINE2, IDC_SAWAY2, IDC_SNA2, + IDC_SOCCUPIED2, IDC_SDND2, IDC_SFREE4CHAT2, + IDC_SINVISIBLE2, IDC_SPHONE2, IDC_SLUNCH2, + }; + + static UINT ctrlsContact[] = { + /*IDC_CHECKWINDOW,*/ IDC_TXT_TITLE4, + IDC_SOFFLINE2, IDC_SONLINE2, IDC_SAWAY2, IDC_SNA2, + IDC_SOCCUPIED2, IDC_SDND2, IDC_SFREE4CHAT2, + IDC_SINVISIBLE2, IDC_SPHONE2, IDC_SLUNCH2, + }; + + static int titleIds[] = { + IDC_TXT_TITLE1, + IDC_TXT_TITLE3, + IDC_TXT_TITLE4, + }; + + static struct { + int idCtrl; + int iconId; + char *title; + DWORD statusFlag; + DWORD disableWhenFlag; + } statusButtons[] = { + {IDC_SOFFLINE, SKINICON_STATUS_OFFLINE, "Offline", PF2_IDLE, PF2_IDLE}, + {IDC_SONLINE, SKINICON_STATUS_ONLINE, "Online", PF2_ONLINE, PF2_ONLINE}, + {IDC_SAWAY, SKINICON_STATUS_AWAY, "Away", PF2_SHORTAWAY, PF2_SHORTAWAY}, + {IDC_SNA, SKINICON_STATUS_NA, "N/A", PF2_LONGAWAY, PF2_LONGAWAY}, + {IDC_SOCCUPIED, SKINICON_STATUS_OCCUPIED, "Occupied", PF2_LIGHTDND, PF2_LIGHTDND}, + {IDC_SDND, SKINICON_STATUS_DND, "DND", PF2_HEAVYDND, PF2_HEAVYDND}, + {IDC_SFREE4CHAT, SKINICON_STATUS_FREE4CHAT, "Free for chat", PF2_FREECHAT, PF2_FREECHAT}, + {IDC_SINVISIBLE, SKINICON_STATUS_INVISIBLE, "Invisible", PF2_INVISIBLE, PF2_INVISIBLE}, + {IDC_SPHONE, SKINICON_STATUS_ONTHEPHONE, "On the phone", PF2_ONTHEPHONE, PF2_ONTHEPHONE}, + {IDC_SLUNCH, SKINICON_STATUS_OUTTOLUNCH, "Out to lunch", PF2_OUTTOLUNCH, PF2_OUTTOLUNCH}, + + {IDC_SOFFLINE2, SKINICON_STATUS_OFFLINE, "Offline", PF2_IDLE, PF2_IDLE<<16}, + {IDC_SONLINE2, SKINICON_STATUS_ONLINE, "Online", PF2_ONLINE, PF2_ONLINE<<16}, + {IDC_SAWAY2, SKINICON_STATUS_AWAY, "Away", PF2_SHORTAWAY, PF2_SHORTAWAY<<16}, + {IDC_SNA2, SKINICON_STATUS_NA, "N/A", PF2_LONGAWAY, PF2_LONGAWAY<<16}, + {IDC_SOCCUPIED2, SKINICON_STATUS_OCCUPIED, "Occupied", PF2_LIGHTDND, PF2_LIGHTDND<<16}, + {IDC_SDND2, SKINICON_STATUS_DND, "DND", PF2_HEAVYDND, PF2_HEAVYDND<<16}, + {IDC_SFREE4CHAT2, SKINICON_STATUS_FREE4CHAT, "Free for chat", PF2_FREECHAT, PF2_FREECHAT<<16}, + {IDC_SINVISIBLE2, SKINICON_STATUS_INVISIBLE, "Invisible", PF2_INVISIBLE, PF2_INVISIBLE<<16}, + {IDC_SPHONE2, SKINICON_STATUS_ONTHEPHONE, "On the phone", PF2_ONTHEPHONE, PF2_ONTHEPHONE<<16}, + {IDC_SLUNCH2, SKINICON_STATUS_OUTTOLUNCH, "Out to lunch", PF2_OUTTOLUNCH, PF2_OUTTOLUNCH<<16}, + }; + + + switch ( msg ) { + case WM_INITDIALOG: + { + int i; + TranslateDialogDefault( hwnd ); + + //Treeview + HWND hwndTree = GetDlgItem(hwnd, IDC_TREE1); + { + int iconIndex = 0; + char iconName[MAXMODULELABELLENGTH]; + TCHAR itemName[MAXMODULELABELLENGTH]; + TreeView_DeleteAllItems(hwndTree); + //Treeview create image list + HIMAGELIST hImgLst = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_COLOR|ILC_COLOR32|ILC_MASK, 5, num_classes+1); + ImageList_ReplaceIcon(hImgLst, -1, IcoLib_GetIcon(ICO_OPT_GROUP,0)); + TreeView_SetImageList(hwndTree, hImgLst, TVSIL_NORMAL); + + for (i = 0; i < gTreeData.getCount(); ++i) { + switch (gTreeData[i]->typ) { + case 1: //Treeview part for typ 1 (notification) + mir_snprintf(iconName, sizeof(iconName), "%s_"TCHAR_STR_PARAM"_"TCHAR_STR_PARAM, MODULNAME, gTreeData[i]->pszTreeRoot, gTreeData[i]->pszDescription); + iconIndex = ImageList_ReplaceIcon(hImgLst, -1, IcoLib_GetIcon(iconName)); + wsprintf(itemName, _T("%s/%s"), gTreeData[i]->pszTreeRoot, gTreeData[i]->pszDescription); + break; + case 2: //Treeview part typ 2 (popup class api) + iconIndex = ImageList_ReplaceIcon(hImgLst, -1, gTreeData[i]->pupClass.hIcon); + wsprintf(itemName, _T("%s/%s"), _T("CLASS Plugins")/*gTreeData[i]->pszTreeRoot*/, gTreeData[i]->pszDescription); + break; + default: + break; + } + OptTree_AddItem(hwndTree, itemName, (LPARAM)gTreeData[i], iconIndex); + } + OptTree_Translate(hwndTree); + } // end Treeview + + //Bold Title + for (i = 0; i < SIZEOF(titleIds); ++i) + { + LOGFONT lf; + GetObject((HFONT)SendDlgItemMessage(hwnd, titleIds[i], WM_GETFONT, 0, 0), sizeof(lf), &lf); + lf.lfWeight = FW_BOLD; + SendDlgItemMessage(hwnd, titleIds[i], WM_SETFONT, (WPARAM)CreateFontIndirect(&lf), TRUE); + } + + //spindown for Timeout + SendDlgItemMessage(hwnd, IDC_TIMEOUT_SPIN, UDM_SETRANGE, 0, (LPARAM)MAKELONG(SETTING_LIFETIME_MAX, SETTING_LIFETIME_INFINITE)); + SetDlgItemInt(hwnd,IDC_TIMEOUT, (UINT)0, TRUE); + //status buttons + for (i = 0; i < SIZEOF(statusButtons); ++i) + { + SendDlgItemMessage(hwnd, statusButtons[i].idCtrl, BUTTONSETASFLATBTN, 0, 0); + SendDlgItemMessage(hwnd, statusButtons[i].idCtrl, BUTTONSETASPUSHBTN, 0, 0); + SendDlgItemMessage(hwnd, statusButtons[i].idCtrl, BM_SETIMAGE, + IMAGE_ICON, (LPARAM)LoadSkinnedIcon(statusButtons[i].iconId)); + SendDlgItemMessage(hwnd, statusButtons[i].idCtrl, BUTTONADDTOOLTIP, + (WPARAM)Translate(statusButtons[i].title), 0); + } + //info icon + SendDlgItemMessage(hwnd, IDC_ICO_INFO, STM_SETICON, (WPARAM)IcoLib_GetIcon(ICO_MISC_NOTIFY,0), 0); + //more button + EnableWindow(GetDlgItem(hwnd, IDC_MORE), FALSE); + //preview button + ShowWindow(GetDlgItem(hwnd, IDC_CHECKWINDOW), SW_HIDE); + + SendMessage(hwnd, WM_USER, 0, 0); + + return TRUE; + } + case WM_USER: + { + int i; + HWND hTV = GetDlgItem(hwnd, IDC_TREE1); + //get TreeView selection + tvi.hItem = TreeView_GetSelection(hTV); + tvi.mask = TVIF_PARAM|TVIF_HANDLE|TVIF_TEXT; + if (tvi.hItem) TreeView_GetItem(hTV, &tvi); + SetWindowLongPtr(hwnd, GWLP_USERDATA, tvi.lParam); + + if (tvi.lParam) { + POPUPTREEDATA* ptd = (POPUPTREEDATA *)tvi.lParam; + HWND hCtrl = 0; + LPTSTR psztSelect = NULL; + int index = 0; + //combo left action (default) + { + hCtrl = GetDlgItem(hwnd, IDC_LACTION); + ComboBox_ResetContent(hCtrl); + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT(POPUP_ACTION_DISMISS)),POPUP_ACTION_DISMISS); + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT(POPUP_ACTION_NOTHING)),POPUP_ACTION_NOTHING); + } + //combo right action (default) + { + hCtrl = GetDlgItem(hwnd, IDC_RACTION); + ComboBox_ResetContent(hCtrl); + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT(POPUP_ACTION_DISMISS)),POPUP_ACTION_DISMISS); + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateT(POPUP_ACTION_NOTHING)),POPUP_ACTION_NOTHING); + } + + //element typ1 (Notification) + if (ptd->typ == 1) { + LPTSTR psztAction = NULL; + //Timeout + SetDlgItemInt(hwnd,IDC_TIMEOUT, (UINT)ptd->timeoutValue, TRUE); + SendDlgItemMessage(hwnd, IDC_TIMEOUT_SPIN, UDM_SETRANGE, 0, (LPARAM)MAKELONG(250, -1)); + //combo left action (EXTRA) + hCtrl = GetDlgItem(hwnd, IDC_LACTION); + for (i = 0; i < ptd->notification.actionCount; ++i) { + psztAction = mir_a2t(ptd->notification.lpActions[i].lpzTitle); + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateTS(psztAction)),ptd->notification.lpActions[i].lpzTitle); + mir_free(psztAction); psztAction = NULL; + } + //combo right action (EXTRA) + hCtrl = GetDlgItem(hwnd, IDC_RACTION); + psztAction = NULL; + for (i = 0; i < ptd->notification.actionCount; ++i) { + psztAction = mir_a2t(ptd->notification.lpActions[i].lpzTitle); + ComboBox_SetItemData(hCtrl, ComboBox_AddString(hCtrl, TranslateTS(psztAction)),ptd->notification.lpActions[i].lpzTitle); + mir_free(psztAction); psztAction = NULL; + } + //enable all controls + for (i = 0; i < SIZEOF(ctrlsAll); ++i){ + ShowWindow(GetDlgItem(hwnd, ctrlsAll[i].idCtrl), ctrlsAll[i].onTyp1 ? SW_SHOW : SW_HIDE); + EnableWindow(GetDlgItem(hwnd, ctrlsAll[i].idCtrl), ctrlsAll[i].onTyp1); + } + //enable or disable controls ctrlsEnable + for (i = 0; i < SIZEOF(ctrlsEnable); ++i) + EnableWindow(GetDlgItem(hwnd, ctrlsEnable[i]), ptd->enabled ? TRUE : FALSE); + //show or hide controls ctrlsContact + for (i = 0; i < SIZEOF(ctrlsContact); ++i) + ShowWindow(GetDlgItem(hwnd, ctrlsContact[i]), ptd->notification.dwFlags&PNF_CONTACT ? SW_SHOW : SW_HIDE); + //statusButtons state + for (i = 0; i < SIZEOF(statusButtons); ++i) + CheckDlgButton(hwnd, statusButtons[i].idCtrl, ptd->disableWhen & statusButtons[i].disableWhenFlag ? TRUE : FALSE); + } + //element typ2 (CLASS Plugins) + else if (ptd->typ == 2) { + //Timeout + SetDlgItemInt(hwnd,IDC_TIMEOUT, (UINT)ptd->timeoutValue, TRUE); + SendDlgItemMessage(hwnd, IDC_TIMEOUT_SPIN, UDM_SETRANGE, 0, (LPARAM)MAKELONG(250, -1)); + //enable ctrls + for (i = 0; i < SIZEOF(ctrlsAll); ++i){ + ShowWindow(GetDlgItem(hwnd, ctrlsAll[i].idCtrl), ctrlsAll[i].onTyp2 ? SW_SHOW : SW_HIDE); + EnableWindow(GetDlgItem(hwnd, ctrlsAll[i].idCtrl), ctrlsAll[i].onTyp2); + } + } + //checkbox enable notify + CheckDlgButton(hwnd, IDC_ENABLE, ptd->enabled ? TRUE : FALSE); + //combo left action (SELECT) + hCtrl = GetDlgItem(hwnd, IDC_LACTION); + ComboBox_SelectItem (hCtrl, -1, ptd->leftAction); //use Workaround for MS bug ComboBox_SelectItemData + //combo right action (SELECT) + hCtrl = GetDlgItem(hwnd, IDC_RACTION); + ComboBox_SelectItem (hCtrl, -1, ptd->rightAction); //use Workaround for MS bug ComboBox_SelectItemData + } //end if (tvi.lParam) + else { + //enable / disable controls + for (int i = 0; i < SIZEOF(ctrlsAll); ++i) { + ShowWindow(GetDlgItem(hwnd, ctrlsAll[i].idCtrl), ctrlsAll[i].onTyp0 ? SW_SHOW : SW_HIDE); + EnableWindow(GetDlgItem(hwnd, ctrlsAll[i].idCtrl), ctrlsAll[i].onTyp0); + } + } + break; + } + case WM_COMMAND: + { + UINT idCtrl = LOWORD(wParam); + POPUPTREEDATA* ptd = (POPUPTREEDATA *)GetWindowLongPtr(hwnd, GWLP_USERDATA); + if (!ptd) break; + switch (HIWORD(wParam)) { + int i; + case BN_CLICKED: //Button controls + switch(idCtrl) { + case IDC_ENABLE: + ptd->enabled = (BYTE)Button_GetCheck((HWND)lParam); + for (i = 0; i < SIZEOF(ctrlsEnable); ++i) + EnableWindow(GetDlgItem(hwnd, ctrlsEnable[i]), ptd->enabled); + SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); + break; + case IDC_PREVIEW: + { + POPUPDATA2 ppd = {0}; + ppd.cbSize = sizeof(ppd); + ppd.flags = PU2_TCHAR; + ppd.lptzTitle = ptd->pszDescription; + ppd.lptzText = TranslateT("Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn!"); + ppd.iSeconds = ptd->timeoutValue; + ppd.colorBack = ptd->colorBack; + ppd.colorText = ptd->colorText; + POPUPTREEDATA *ptdPrev = NULL; + if(ptd->typ == 1) { + //we work with a copy for preview + ptdPrev = (POPUPTREEDATA *)mir_alloc(sizeof(POPUPTREEDATA)); + memcpy(ptdPrev, ptd, sizeof(POPUPTREEDATA)); + ptdPrev->enabled = ptd->enabled; + ptdPrev->timeoutValue = ptd->timeoutValue; + strcpy(ptdPrev->leftAction , ptd->leftAction); //geht noch nicht?? + strcpy(ptdPrev->rightAction , ptd->rightAction); //geht noch nicht?? + ptdPrev->disableWhen = ptd->disableWhen; + + ppd.lchNotification = (HANDLE)ptdPrev; + } + else if(ptd->typ == 2) { + ppd.lchIcon = ptd->pupClass.hIcon; + } + CallService(MS_POPUP_ADDPOPUP2, (WPARAM)&ppd, APF_NO_HISTORY); + mir_free(ptdPrev); ptdPrev = NULL; + } + break; + case IDC_MORE: + { + OPENOPTIONSDIALOG ood = {0}; + ood.cbSize = sizeof(OPENOPTIONSDIALOG); + ood.pszGroup = "Customize"; + ood.pszPage = Translate("Fonts & Colors"); + CallService(MS_OPT_OPENOPTIONS, 0, (LPARAM)&ood); + } + break; + case IDC_SOFFLINE: case IDC_SONLINE: case IDC_SAWAY: case IDC_SNA: case IDC_SOCCUPIED: + case IDC_SDND: case IDC_SFREE4CHAT: case IDC_SINVISIBLE: case IDC_SPHONE: case IDC_SLUNCH: + case IDC_SOFFLINE2: case IDC_SONLINE2: case IDC_SAWAY2: case IDC_SNA2: case IDC_SOCCUPIED2: + case IDC_SDND2: case IDC_SFREE4CHAT2: case IDC_SINVISIBLE2: case IDC_SPHONE2: case IDC_SLUNCH2: + { + ptd->disableWhen = 0; + for (i = 0; i < SIZEOF(statusButtons); ++i) { + if (IsDlgButtonChecked(hwnd, statusButtons[i].idCtrl)) + ptd->disableWhen |= statusButtons[i].disableWhenFlag; + if (idCtrl == statusButtons[i].idCtrl) + SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); + } + } + break; + default: + break; + } + break; + case CBN_SELCHANGE: //ComboBox controls + switch(idCtrl) { + //lParam = Handle to the control + case IDC_LACTION: + lstrcpynA(ptd->leftAction, + (char *)ComboBox_GetItemData((HWND)lParam, ComboBox_GetCurSel((HWND)lParam)), + sizeof(ptd->leftAction)); + SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); + break; + case IDC_RACTION: + lstrcpynA(ptd->rightAction, + (char *)ComboBox_GetItemData((HWND)lParam, ComboBox_GetCurSel((HWND)lParam)), + sizeof(ptd->rightAction)); + SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); + break; + default: + break; + } + break; + case EN_CHANGE: //Edit controls + switch(idCtrl) { + //lParam = Handle to the control + case IDC_TIMEOUT: + { + int seconds = GetDlgItemInt(hwnd, idCtrl, NULL, TRUE); + if ( seconds >= SETTING_LIFETIME_INFINITE && + seconds <= SETTING_LIFETIME_MAX && + seconds != ptd->timeoutValue) { + ptd->timeoutValue = seconds; + SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); + } + } + break; + default: + break; + } + break; + case EN_KILLFOCUS: //Edit controls lost fokus + switch(idCtrl) { + //lParam = Handle to the control + case IDC_TIMEOUT: + { + int seconds = GetDlgItemInt(hwnd, idCtrl, NULL, TRUE); + if (seconds > SETTING_LIFETIME_MAX) + ptd->timeoutValue = SETTING_LIFETIME_MAX; + else if (seconds < SETTING_LIFETIME_INFINITE) + ptd->timeoutValue = SETTING_LIFETIME_INFINITE; + if(seconds != ptd->timeoutValue) { + SetDlgItemInt(hwnd, idCtrl, ptd->timeoutValue, TRUE); + ErrorMSG(SETTING_LIFETIME_INFINITE, SETTING_LIFETIME_MAX); + SetFocus((HWND)lParam); + } + } + break; + default: + break; + }//end switch(idCtrl) + break; + default: + break; + } + break; + } + case WM_NOTIFY: + { + switch(((LPNMHDR)lParam)->idFrom) { + case 0: + { + switch (((LPNMHDR)lParam)->code) { + case PSN_RESET: + { + for(int i = 0; i < gTreeData.getCount(); ++i) { + switch (gTreeData[i]->typ) { + case 1: + LoadNotificationSettings(gTreeData[i], "PopUpNotifications"); + break; + case 2: //not finish + LoadClassSettings(gTreeData[i], PU_MODULCLASS); + gTreeData[i]->timeoutValue = gTreeData[i]->pupClass.iSeconds; + break; + default: + break; + } + } + return TRUE; + } + case PSN_APPLY: + { + for(int i = 0; i < gTreeData.getCount(); ++i) { + switch (gTreeData[i]->typ) { + case 1: + gTreeData[i]->notification.iSeconds = gTreeData[i]->timeoutValue; + SaveNotificationSettings(gTreeData[i],"PopUpNotifications"); + break; + case 2: //not finish + gTreeData[i]->pupClass.iSeconds = gTreeData[i]->timeoutValue; + SaveClassSettings(gTreeData[i],"PopUpCLASS"); + break; + default: + break; + } + } + return TRUE; + } + } + break; + } + + case IDC_TREE1: + { + switch (((LPNMHDR)lParam)->code) + { + case TVN_SELCHANGEDA: + case TVN_SELCHANGEDW: + { + PostMessage(hwnd, WM_USER, 0, 0); + break; + } + } + break; + } + } + break; + } + + case WM_DESTROY: + ZeroMemory(&tvi,sizeof(tvi)); + break; + + default: + return FALSE; + } + return FALSE; +} + +void LoadClassSettings(POPUPTREEDATA *ptd, char* szModul) +{ + char setting[2*MAXMODULELABELLENGTH]; + char *szTmp = NULL; + + mir_snprintf(setting, sizeof(setting), "%s/enabled", ptd->pupClass.pszName); + ptd->enabled = + (signed char)DBGetContactSettingByte(NULL, szModul, setting, TRUE); + + mir_snprintf(setting, sizeof(setting), "%s/Timeout", ptd->pupClass.pszName); + ptd->pupClass.iSeconds = + (signed char)DBGetContactSettingWord(NULL, szModul, setting, 0); + + mir_snprintf(setting, sizeof(setting), "%s/TimeoutVal", ptd->pupClass.pszName); + ptd->timeoutValue = + (signed char)DBGetContactSettingWord(NULL, szModul, setting, + ptd->pupClass.iSeconds ? ptd->pupClass.iSeconds : PopUpOptions.Seconds); + + mir_snprintf(setting, sizeof(setting), "%s/leftAction", ptd->pupClass.pszName); + szTmp = DBGetContactSettingString(NULL, szModul, setting, POPUP_ACTION_NOTHING); //standart ?? + lstrcpynA(ptd->leftAction, szTmp, sizeof(ptd->leftAction)); + mir_free(szTmp); szTmp = NULL; + + mir_snprintf(setting, sizeof(setting), "%s/rightAction", ptd->pupClass.pszName); + szTmp = DBGetContactSettingString(NULL, szModul, setting, POPUP_ACTION_DISMISS); //standart ?? + lstrcpynA(ptd->rightAction, szTmp, sizeof(ptd->rightAction)); + mir_free(szTmp); szTmp = NULL; + +} +void SaveClassSettings(POPUPTREEDATA *ptd, char* szModul) +{ + char setting[2*MAXMODULELABELLENGTH]; + + mir_snprintf(setting, sizeof(setting), "%s/enabled", ptd->pupClass.pszName); + DBWriteContactSettingByte(NULL, szModul, setting, ptd->enabled); + + mir_snprintf(setting, sizeof(setting), "%s/Timeout", ptd->pupClass.pszName); + DBWriteContactSettingWord(NULL, szModul, setting, ptd->pupClass.iSeconds); + + mir_snprintf(setting, sizeof(setting), "%s/TimeoutVal",ptd->pupClass.pszName); + DBWriteContactSettingWord(NULL, szModul, setting, ptd->timeoutValue); + + mir_snprintf(setting, sizeof(setting), "%s/leftAction",ptd->pupClass.pszName); + DBWriteContactSettingString(NULL, szModul, setting, ptd->leftAction); + + mir_snprintf(setting, sizeof(setting), "%s/rightAction",ptd->pupClass.pszName); + DBWriteContactSettingString(NULL, szModul, setting, ptd->rightAction); +} -- cgit v1.2.3