From 08997af71f3b28d1fc23f22b63552de23b0ab883 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Fri, 27 Dec 2013 19:48:21 +0000 Subject: Nudge to create its own type of events git-svn-id: http://svn.miranda-ng.org/main/trunk@7398 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Nudge/src/options.cpp | 653 ++++++++++++++++++++---------------------- 1 file changed, 313 insertions(+), 340 deletions(-) (limited to 'plugins/Nudge/src/options.cpp') diff --git a/plugins/Nudge/src/options.cpp b/plugins/Nudge/src/options.cpp index b89cadc97d..63fc12ad3a 100644 --- a/plugins/Nudge/src/options.cpp +++ b/plugins/Nudge/src/options.cpp @@ -2,137 +2,169 @@ CNudgeElement* ActualNudge = NULL; -int NudgeOptInit(WPARAM wParam,LPARAM lParam) +static int GetSelProto(HWND hwnd, HTREEITEM hItem) { - OPTIONSDIALOGPAGE odp = { sizeof(odp) }; - odp.position = -790000000; - odp.hInstance = hInst; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_NUDGE); - odp.pszTitle = LPGEN("Nudge"); - odp.pszGroup = LPGEN("Events"); - odp.pszTab = LPGEN("Nudge"); - odp.flags = ODPF_BOLDGROUPS; - odp.pfnDlgProc = DlgProcNudgeOpt; - Options_AddPage(wParam, &odp); + HWND hLstView = GetDlgItem(hwnd, IDC_PROTOLIST); + TVITEM tvi = { 0 }; - odp.position = -790000001; - odp.pszTab = LPGEN("Window Shaking"); - odp.pfnDlgProc = DlgProcShakeOpt; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_SHAKE); - Options_AddPage(wParam, &odp); - return 0; + tvi.mask = TVIF_IMAGE; + tvi.hItem = hItem == NULL ? TreeView_GetSelection(hLstView) : hItem; + + TreeView_GetItem(hLstView, &tvi); + + return tvi.iImage; } -INT_PTR CALLBACK DlgProcShakeOpt(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) +static void UpdateControls(HWND hwnd) { - switch(msg) - { - case WM_INITDIALOG: + int proto = nProtocol; + if (GlobalNudge.useByProtocol) { + proto = GetSelProto(hwnd, NULL); + ActualNudge = NULL; + for (NudgeElementList *n = NudgeList; n != NULL; n = n->next) + if (n->item.iProtoNumber == proto) + ActualNudge = &n->item; + } + else ActualNudge = &DefaultNudge; + + SetDlgItemInt(hwnd, IDC_SENDTIME, GlobalNudge.sendTimeSec, FALSE); + SetDlgItemInt(hwnd, IDC_RECVTIME, GlobalNudge.recvTimeSec, FALSE); + SetDlgItemInt(hwnd, IDC_RESENDDELAY, GlobalNudge.resendDelaySec, FALSE); + CheckDlgButton(hwnd, IDC_USEBYPROTOCOL, (WPARAM)GlobalNudge.useByProtocol); + + if (ActualNudge) { // fix NULL pointer then no nudge support protocols + CheckDlgButton(hwnd, IDC_CHECKPOP, (WPARAM)ActualNudge->showPopup); + CheckDlgButton(hwnd, IDC_CHECKCLIST, (WPARAM)ActualNudge->shakeClist); + CheckDlgButton(hwnd, IDC_CHECKCHAT, (WPARAM)ActualNudge->shakeChat); + CheckDlgButton(hwnd, IDC_CHECKSTATUS, (WPARAM)ActualNudge->showStatus); + CheckDlgButton(hwnd, IDC_AUTORESEND, (WPARAM)ActualNudge->autoResend); + CheckDlgButton(hwnd, IDC_OPENMESSAGE, (WPARAM)ActualNudge->openMessageWindow); + CheckDlgButton(hwnd, IDC_OPENCONTACTLIST, (WPARAM)ActualNudge->openContactList); + CheckDlgButton(hwnd, IDC_IGNORE, (WPARAM)ActualNudge->useIgnoreSettings); + EnableWindow(GetDlgItem(hwnd, IDC_RESENDDELAY), ActualNudge->autoResend); + CheckDlgButton(hwnd, IDC_CHECKST0, ActualNudge->statusFlags & NUDGE_ACC_ST0 ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwnd, IDC_CHECKST1, ActualNudge->statusFlags & NUDGE_ACC_ST1 ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwnd, IDC_CHECKST2, ActualNudge->statusFlags & NUDGE_ACC_ST2 ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwnd, IDC_CHECKST3, ActualNudge->statusFlags & NUDGE_ACC_ST3 ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwnd, IDC_CHECKST4, ActualNudge->statusFlags & NUDGE_ACC_ST4 ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwnd, IDC_CHECKST5, ActualNudge->statusFlags & NUDGE_ACC_ST5 ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwnd, IDC_CHECKST6, ActualNudge->statusFlags & NUDGE_ACC_ST6 ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwnd, IDC_CHECKST7, ActualNudge->statusFlags & NUDGE_ACC_ST7 ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwnd, IDC_CHECKST8, ActualNudge->statusFlags & NUDGE_ACC_ST8 ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwnd, IDC_CHECKST9, ActualNudge->statusFlags & NUDGE_ACC_ST9 ? BST_CHECKED : BST_UNCHECKED); + SetDlgItemText(hwnd, IDC_SENDTEXT, ActualNudge->senText); + SetDlgItemText(hwnd, IDC_RECVTEXT, ActualNudge->recText); + } + else EnableWindow(GetDlgItem(hwnd, IDC_PROTOLIST), FALSE); +} + +static void CheckChange(HWND hwnd, HTREEITEM hItem) +{ + HWND hLstView = GetDlgItem(hwnd, IDC_PROTOLIST); + bool isChecked = !TreeView_GetCheckState(hLstView, hItem); + + TreeView_SelectItem(hLstView, hItem); + + int proto = nProtocol; + if (GlobalNudge.useByProtocol) { + proto = GetSelProto(hwnd, hItem); + ActualNudge = NULL; + for (NudgeElementList *n = NudgeList; n != NULL; n = n->next) + if (n->item.iProtoNumber == proto) + ActualNudge = &n->item; + } + else ActualNudge = &DefaultNudge; + + if (ActualNudge)// fix NULL pointer then no nudge support protocols + ActualNudge->enabled = isChecked; + + UpdateControls(hwnd); +} + +///////////////////////////////////////////////////////////////////////////////////////// + +static INT_PTR CALLBACK DlgProcShakeOpt(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) +{ + switch (msg) { + case WM_INITDIALOG: + TranslateDialogDefault(hwnd); + { TCHAR szBuf[20]; - TranslateDialogDefault(hwnd); mir_sntprintf(szBuf, 10, _T("%d"), shake.nMoveClist); - SetDlgItemText(hwnd,IDC_LNUMBER_CLIST,szBuf); + SetDlgItemText(hwnd, IDC_LNUMBER_CLIST, szBuf); mir_sntprintf(szBuf, 10, _T("%d"), shake.nMoveChat); - SetDlgItemText(hwnd,IDC_LNUMBER_CHAT,szBuf); + SetDlgItemText(hwnd, IDC_LNUMBER_CHAT, szBuf); mir_sntprintf(szBuf, 10, _T("%d"), shake.nScaleClist); - SetDlgItemText(hwnd,IDC_LSCALE_CLIST,szBuf); + SetDlgItemText(hwnd, IDC_LSCALE_CLIST, szBuf); mir_sntprintf(szBuf, 10, _T("%d"), shake.nScaleChat); - SetDlgItemText(hwnd,IDC_LSCALE_CHAT,szBuf); + SetDlgItemText(hwnd, IDC_LSCALE_CHAT, szBuf); + } - SendDlgItemMessage(hwnd, IDC_SNUMBER_CLIST, TBM_SETRANGE, 0, (LPARAM)MAKELONG(1, 60)); - SendDlgItemMessage(hwnd, IDC_SNUMBER_CHAT, TBM_SETRANGE, 0, (LPARAM)MAKELONG(1, 60)); + SendDlgItemMessage(hwnd, IDC_SNUMBER_CLIST, TBM_SETRANGE, 0, (LPARAM)MAKELONG(1, 60)); + SendDlgItemMessage(hwnd, IDC_SNUMBER_CHAT, TBM_SETRANGE, 0, (LPARAM)MAKELONG(1, 60)); - SendDlgItemMessage(hwnd, IDC_SSCALE_CLIST, TBM_SETRANGE, 0, (LPARAM)MAKELONG(1, 40)); - SendDlgItemMessage(hwnd, IDC_SSCALE_CHAT, TBM_SETRANGE, 0, (LPARAM)MAKELONG(1, 40)); + SendDlgItemMessage(hwnd, IDC_SSCALE_CLIST, TBM_SETRANGE, 0, (LPARAM)MAKELONG(1, 40)); + SendDlgItemMessage(hwnd, IDC_SSCALE_CHAT, TBM_SETRANGE, 0, (LPARAM)MAKELONG(1, 40)); - SendDlgItemMessage(hwnd, IDC_SNUMBER_CLIST, TBM_SETPOS, TRUE, shake.nMoveClist); - SendDlgItemMessage(hwnd, IDC_SNUMBER_CHAT, TBM_SETPOS, TRUE, shake.nMoveChat); + SendDlgItemMessage(hwnd, IDC_SNUMBER_CLIST, TBM_SETPOS, TRUE, shake.nMoveClist); + SendDlgItemMessage(hwnd, IDC_SNUMBER_CHAT, TBM_SETPOS, TRUE, shake.nMoveChat); - SendDlgItemMessage(hwnd, IDC_SSCALE_CLIST, TBM_SETPOS, TRUE, shake.nScaleClist); - SendDlgItemMessage(hwnd, IDC_SSCALE_CHAT, TBM_SETPOS, TRUE, shake.nScaleChat); + SendDlgItemMessage(hwnd, IDC_SSCALE_CLIST, TBM_SETPOS, TRUE, shake.nScaleClist); + SendDlgItemMessage(hwnd, IDC_SSCALE_CHAT, TBM_SETPOS, TRUE, shake.nScaleChat); + break; - break; - case WM_COMMAND: - { - WORD wNotifyCode = HIWORD(wParam); - switch(LOWORD(wParam)) - { - case IDC_PREVIEW: - ShakeClist(0,0); - //SendMessage(GetParent(hwnd),PSM_CHANGED,0,0); - break; - } + case WM_COMMAND: + switch (LOWORD(wParam)) { + case IDC_PREVIEW: + ShakeClist(0, 0); break; } - case WM_HSCROLL: - if ((HWND)lParam == GetDlgItem(hwnd, IDC_SNUMBER_CLIST) || (HWND)lParam == GetDlgItem(hwnd, IDC_SNUMBER_CHAT) - || (HWND)lParam == GetDlgItem(hwnd, IDC_SSCALE_CLIST) || (HWND)lParam == GetDlgItem(hwnd, IDC_SSCALE_CHAT)) - { - TCHAR szBuf[20]; - DWORD dwPos = SendMessage((HWND) lParam, TBM_GETPOS, 0, 0); - mir_sntprintf(szBuf, sizeof(szBuf), _T("%d"), dwPos); - if ((HWND)lParam == GetDlgItem(hwnd, IDC_SNUMBER_CLIST)) - SetDlgItemText(hwnd,IDC_LNUMBER_CLIST,szBuf); - if ((HWND)lParam == GetDlgItem(hwnd, IDC_SNUMBER_CHAT)) - SetDlgItemText(hwnd,IDC_LNUMBER_CHAT,szBuf); - if ((HWND)lParam == GetDlgItem(hwnd, IDC_SSCALE_CLIST)) - SetDlgItemText(hwnd,IDC_LSCALE_CLIST,szBuf); - if ((HWND)lParam == GetDlgItem(hwnd, IDC_SSCALE_CHAT)) - SetDlgItemText(hwnd,IDC_LSCALE_CHAT,szBuf); - SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); - } - break; - - case WM_SHOWWINDOW: - break; + break; - case WM_NOTIFY: - switch(((LPNMHDR)lParam)->idFrom) - { - case 0: - switch(((LPNMHDR)lParam)->code) - { - case PSN_APPLY: - { - shake.nMoveClist = (int) SendMessage(GetDlgItem(hwnd, IDC_SNUMBER_CLIST), TBM_GETPOS, 0, 0); - shake.nMoveChat = (int) SendMessage(GetDlgItem(hwnd, IDC_SNUMBER_CHAT), TBM_GETPOS, 0, 0); - shake.nScaleClist = (int) SendMessage(GetDlgItem(hwnd, IDC_SSCALE_CLIST), TBM_GETPOS, 0, 0); - shake.nScaleChat = (int) SendMessage(GetDlgItem(hwnd, IDC_SSCALE_CHAT), TBM_GETPOS, 0, 0); - shake.Save(); - } - } + case WM_HSCROLL: + if ((HWND)lParam == GetDlgItem(hwnd, IDC_SNUMBER_CLIST) || (HWND)lParam == GetDlgItem(hwnd, IDC_SNUMBER_CHAT) + || (HWND)lParam == GetDlgItem(hwnd, IDC_SSCALE_CLIST) || (HWND)lParam == GetDlgItem(hwnd, IDC_SSCALE_CHAT)) + { + TCHAR szBuf[20]; + DWORD dwPos = SendMessage((HWND)lParam, TBM_GETPOS, 0, 0); + mir_sntprintf(szBuf, sizeof(szBuf), _T("%d"), dwPos); + if ((HWND)lParam == GetDlgItem(hwnd, IDC_SNUMBER_CLIST)) + SetDlgItemText(hwnd, IDC_LNUMBER_CLIST, szBuf); + if ((HWND)lParam == GetDlgItem(hwnd, IDC_SNUMBER_CHAT)) + SetDlgItemText(hwnd, IDC_LNUMBER_CHAT, szBuf); + if ((HWND)lParam == GetDlgItem(hwnd, IDC_SSCALE_CLIST)) + SetDlgItemText(hwnd, IDC_LSCALE_CLIST, szBuf); + if ((HWND)lParam == GetDlgItem(hwnd, IDC_SSCALE_CHAT)) + SetDlgItemText(hwnd, IDC_LSCALE_CHAT, szBuf); + SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); + } + break; + + case WM_SHOWWINDOW: + break; + + case WM_NOTIFY: + switch (((LPNMHDR)lParam)->idFrom) { + case 0: + switch (((LPNMHDR)lParam)->code) { + case PSN_APPLY: + shake.nMoveClist = (int)SendMessage(GetDlgItem(hwnd, IDC_SNUMBER_CLIST), TBM_GETPOS, 0, 0); + shake.nMoveChat = (int)SendMessage(GetDlgItem(hwnd, IDC_SNUMBER_CHAT), TBM_GETPOS, 0, 0); + shake.nScaleClist = (int)SendMessage(GetDlgItem(hwnd, IDC_SSCALE_CLIST), TBM_GETPOS, 0, 0); + shake.nScaleChat = (int)SendMessage(GetDlgItem(hwnd, IDC_SSCALE_CHAT), TBM_GETPOS, 0, 0); + shake.Save(); } - break; + } + break; } return FALSE; } -void CreateImageList(HWND hWnd) -{ - // Create and populate image list - HIMAGELIST hImList = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_MASK | ILC_COLOR32, nProtocol, 0); - - for(NudgeElementList *n = NudgeList;n != NULL; n = n->next) - { - INT_PTR res = CallProtoService(n->item.ProtocolName, PS_LOADICON,PLI_PROTOCOL | PLIF_SMALL | PLIF_ICOLIB, 0); - if(res==CALLSERVICE_NOTFOUND) - res = (INT_PTR)Skin_GetIconByHandle(n->item.hIcoLibItem); +///////////////////////////////////////////////////////////////////////////////////////// - HICON hIcon = (HICON) res; - ImageList_AddIcon(hImList, hIcon); - } - //ADD default Icon for nudge - HICON hIcon = (HICON) LoadImage(hInst, MAKEINTRESOURCE(IDI_NUDGE), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0); - ImageList_AddIcon(hImList, hIcon); - DestroyIcon(hIcon); - - HWND hLstView = GetDlgItem(hWnd, IDC_PROTOLIST); - TreeView_SetImageList(hLstView, hImList, TVSIL_NORMAL); -} - -void PopulateProtocolList(HWND hWnd) +static void PopulateProtocolList(HWND hWnd) { bool useOne = IsDlgButtonChecked(hWnd, IDC_USEBYPROTOCOL) == BST_UNCHECKED; @@ -140,287 +172,228 @@ void PopulateProtocolList(HWND hWnd) TreeView_DeleteAllItems(hLstView); - TVINSERTSTRUCT tvi = {0}; + TVINSERTSTRUCT tvi = { 0 }; tvi.hParent = TVI_ROOT; tvi.hInsertAfter = TVI_LAST; tvi.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_STATE | TVIF_SELECTEDIMAGE; tvi.item.stateMask = TVIS_STATEIMAGEMASK; int i = 0; - if (GlobalNudge.useByProtocol) - { - for(NudgeElementList *n = NudgeList;n != NULL; n = n->next) - { + if (GlobalNudge.useByProtocol) { + for (NudgeElementList *n = NudgeList; n != NULL; n = n->next) { tvi.item.pszText = n->item.AccountName; - tvi.item.iImage = i; + tvi.item.iImage = i; n->item.iProtoNumber = i; tvi.item.iSelectedImage = i; - tvi.item.state = INDEXTOSTATEIMAGEMASK(n->item.enabled?2:1); + tvi.item.state = INDEXTOSTATEIMAGEMASK(n->item.enabled ? 2 : 1); TreeView_InsertItem(hLstView, &tvi); i++; } } - else - { + else { tvi.item.pszText = TranslateT("Nudge"); - tvi.item.iImage = nProtocol; + tvi.item.iImage = nProtocol; DefaultNudge.iProtoNumber = nProtocol; tvi.item.iSelectedImage = nProtocol; - tvi.item.state = INDEXTOSTATEIMAGEMASK(DefaultNudge.enabled?2:1); + tvi.item.state = INDEXTOSTATEIMAGEMASK(DefaultNudge.enabled ? 2 : 1); TreeView_InsertItem(hLstView, &tvi); } TreeView_SelectItem(hLstView, TreeView_GetRoot(hLstView)); - //TreeView_SetCheckState(hLstView, TreeView_GetRoot(hLstView), TRUE) } +static void CreateImageList(HWND hWnd) +{ + // Create and populate image list + HIMAGELIST hImList = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_MASK | ILC_COLOR32, nProtocol, 0); + + for (NudgeElementList *n = NudgeList; n != NULL; n = n->next) { + INT_PTR res = CallProtoService(n->item.ProtocolName, PS_LOADICON, PLI_PROTOCOL | PLIF_SMALL | PLIF_ICOLIB, 0); + if (res == CALLSERVICE_NOTFOUND) + res = (INT_PTR)Skin_GetIconByHandle(n->item.hIcoLibItem); + + HICON hIcon = (HICON)res; + ImageList_AddIcon(hImList, hIcon); + } + //ADD default Icon for nudge + HICON hIcon = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_NUDGE), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0); + ImageList_AddIcon(hImList, hIcon); + DestroyIcon(hIcon); + + HWND hLstView = GetDlgItem(hWnd, IDC_PROTOLIST); + TreeView_SetImageList(hLstView, hImList, TVSIL_NORMAL); +} -INT_PTR CALLBACK DlgProcNudgeOpt(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) +static INT_PTR CALLBACK DlgProcNudgeOpt(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { static bool iInitDone = true; - switch(msg) - { - case WM_INITDIALOG: - iInitDone = false; - TranslateDialogDefault(hwnd); - CreateImageList(hwnd); - PopulateProtocolList(hwnd); - UpdateControls(hwnd); - iInitDone = true; - break; - case WM_DESTROY: + switch (msg) { + case WM_INITDIALOG: + iInitDone = false; + TranslateDialogDefault(hwnd); + CreateImageList(hwnd); + PopulateProtocolList(hwnd); + UpdateControls(hwnd); + iInitDone = true; + break; + + case WM_DESTROY: { HIMAGELIST hImList = TreeView_GetImageList(GetDlgItem(hwnd, IDC_PROTOLIST), TVSIL_NORMAL); - if (hImList) - { + if (hImList) { TreeView_SetImageList(GetDlgItem(hwnd, IDC_PROTOLIST), NULL, TVSIL_NORMAL); // Avoiding Access Violation in CommonControls DLL ImageList_Destroy(hImList); } - break; } - case WM_COMMAND: - { - WORD wNotifyCode = HIWORD(wParam); - switch(LOWORD(wParam)) + break; + + case WM_COMMAND: + switch (LOWORD(wParam)) { + case IDC_PREVIEW: + Preview(); + break; + case IDC_USEBYPROTOCOL: + GlobalNudge.useByProtocol = (IsDlgButtonChecked(hwnd, IDC_USEBYPROTOCOL) == BST_CHECKED); + PopulateProtocolList(hwnd); + UpdateControls(hwnd); + SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); + break; + case IDC_AUTORESEND: + if (ActualNudge)// fix NULL pointer then no nudge support protocols { - case IDC_PREVIEW: - Preview(); - break; - case IDC_USEBYPROTOCOL: - GlobalNudge.useByProtocol = (IsDlgButtonChecked(hwnd,IDC_USEBYPROTOCOL)==BST_CHECKED); - PopulateProtocolList(hwnd); - UpdateControls(hwnd); - SendMessage(GetParent(hwnd),PSM_CHANGED,0,0); - break; - case IDC_AUTORESEND: + ActualNudge->autoResend = (IsDlgButtonChecked(hwnd, IDC_AUTORESEND) == BST_CHECKED); + EnableWindow(GetDlgItem(hwnd, IDC_RESENDDELAY), ActualNudge->autoResend); + } + SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); + break; + case IDC_CHECKST0: + case IDC_CHECKST1: + case IDC_CHECKST2: + case IDC_CHECKST3: + case IDC_CHECKST4: + case IDC_CHECKST5: + case IDC_CHECKST6: + case IDC_CHECKST7: + case IDC_CHECKST8: + case IDC_CHECKST9: + case IDC_CHECKPOP: + case IDC_OPENMESSAGE: + case IDC_CHECKCLIST: + case IDC_CHECKCHAT: + case IDC_CHECKSTATUS: + case IDC_IGNORE: + case IDC_OPENCONTACTLIST: + SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); + break; + case IDC_RESENDDELAY: + case IDC_SENDTEXT: + case IDC_RECVTEXT: + case IDC_SENDTIME: + case IDC_RECVTIME: + if (iInitDone && (HIWORD(wParam) == EN_CHANGE)) + SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); + break; + } + break; + + case WM_SHOWWINDOW: + break; + + case WM_NOTIFY: + switch (((LPNMHDR)lParam)->idFrom) { + case 0: + switch (((LPNMHDR)lParam)->code) { + case PSN_APPLY: + { + BOOL Translated; + GlobalNudge.sendTimeSec = GetDlgItemInt(hwnd, IDC_SENDTIME, &Translated, FALSE); + GlobalNudge.recvTimeSec = GetDlgItemInt(hwnd, IDC_RECVTIME, &Translated, FALSE); + GlobalNudge.resendDelaySec = GetDlgItemInt(hwnd, IDC_RESENDDELAY, &Translated, FALSE); + if (GlobalNudge.resendDelaySec > 10) GlobalNudge.resendDelaySec = 10; + if (GlobalNudge.resendDelaySec < 1) GlobalNudge.resendDelaySec = 1; if (ActualNudge)// fix NULL pointer then no nudge support protocols { - ActualNudge->autoResend = (IsDlgButtonChecked(hwnd,IDC_AUTORESEND)==BST_CHECKED); - EnableWindow(GetDlgItem(hwnd,IDC_RESENDDELAY),ActualNudge->autoResend); + ActualNudge->shakeClist = (IsDlgButtonChecked(hwnd, IDC_CHECKCLIST) == BST_CHECKED); + ActualNudge->shakeChat = (IsDlgButtonChecked(hwnd, IDC_CHECKCHAT) == BST_CHECKED); + ActualNudge->openMessageWindow = (IsDlgButtonChecked(hwnd, IDC_OPENMESSAGE) == BST_CHECKED); + ActualNudge->openContactList = (IsDlgButtonChecked(hwnd, IDC_OPENCONTACTLIST) == BST_CHECKED); + ActualNudge->useIgnoreSettings = (IsDlgButtonChecked(hwnd, IDC_IGNORE) == BST_CHECKED); + ActualNudge->showStatus = (IsDlgButtonChecked(hwnd, IDC_CHECKSTATUS) == BST_CHECKED); + ActualNudge->showPopup = (IsDlgButtonChecked(hwnd, IDC_CHECKPOP) == BST_CHECKED); + ActualNudge->statusFlags = + ((IsDlgButtonChecked(hwnd, IDC_CHECKST0) == BST_CHECKED) ? NUDGE_ACC_ST0 : 0) | + ((IsDlgButtonChecked(hwnd, IDC_CHECKST1) == BST_CHECKED) ? NUDGE_ACC_ST1 : 0) | + ((IsDlgButtonChecked(hwnd, IDC_CHECKST2) == BST_CHECKED) ? NUDGE_ACC_ST2 : 0) | + ((IsDlgButtonChecked(hwnd, IDC_CHECKST3) == BST_CHECKED) ? NUDGE_ACC_ST3 : 0) | + ((IsDlgButtonChecked(hwnd, IDC_CHECKST4) == BST_CHECKED) ? NUDGE_ACC_ST4 : 0) | + ((IsDlgButtonChecked(hwnd, IDC_CHECKST5) == BST_CHECKED) ? NUDGE_ACC_ST5 : 0) | + ((IsDlgButtonChecked(hwnd, IDC_CHECKST6) == BST_CHECKED) ? NUDGE_ACC_ST6 : 0) | + ((IsDlgButtonChecked(hwnd, IDC_CHECKST7) == BST_CHECKED) ? NUDGE_ACC_ST7 : 0) | + ((IsDlgButtonChecked(hwnd, IDC_CHECKST8) == BST_CHECKED) ? NUDGE_ACC_ST8 : 0) | + ((IsDlgButtonChecked(hwnd, IDC_CHECKST9) == BST_CHECKED) ? NUDGE_ACC_ST9 : 0); + + GetDlgItemText(hwnd, IDC_SENDTEXT, ActualNudge->senText, TEXT_LEN); + GetDlgItemText(hwnd, IDC_RECVTEXT, ActualNudge->recText, TEXT_LEN); + ActualNudge->Save(); } - SendMessage(GetParent(hwnd),PSM_CHANGED,0,0); - break; - case IDC_CHECKST0: - case IDC_CHECKST1: - case IDC_CHECKST2: - case IDC_CHECKST3: - case IDC_CHECKST4: - case IDC_CHECKST5: - case IDC_CHECKST6: - case IDC_CHECKST7: - case IDC_CHECKST8: - case IDC_CHECKST9: - case IDC_CHECKPOP: - case IDC_OPENMESSAGE: - case IDC_CHECKCLIST: - case IDC_CHECKCHAT: - case IDC_CHECKSTATUS: - case IDC_IGNORE: - case IDC_OPENCONTACTLIST: - SendMessage(GetParent(hwnd),PSM_CHANGED,0,0); - break; - case IDC_RESENDDELAY: - case IDC_SENDTEXT: - case IDC_RECVTEXT: - case IDC_SENDTIME: - case IDC_RECVTIME: - if(iInitDone && (wNotifyCode == EN_CHANGE)) - SendMessage(GetParent(hwnd),PSM_CHANGED,0,0); - break; + GlobalNudge.Save(); + } } break; - } - case WM_SHOWWINDOW: - break; - case WM_NOTIFY: - switch(((LPNMHDR)lParam)->idFrom) - { - case 0: - switch(((LPNMHDR)lParam)->code) - { - case PSN_APPLY: - { - BOOL Translated; - GlobalNudge.sendTimeSec = GetDlgItemInt(hwnd,IDC_SENDTIME,&Translated,FALSE); - GlobalNudge.recvTimeSec = GetDlgItemInt(hwnd,IDC_RECVTIME,&Translated,FALSE); - GlobalNudge.resendDelaySec = GetDlgItemInt(hwnd,IDC_RESENDDELAY,&Translated,FALSE); - if(GlobalNudge.resendDelaySec > 10 ) GlobalNudge.resendDelaySec = 10; - if(GlobalNudge.resendDelaySec < 1 ) GlobalNudge.resendDelaySec = 1; - if (ActualNudge)// fix NULL pointer then no nudge support protocols - { - ActualNudge->shakeClist = (IsDlgButtonChecked(hwnd,IDC_CHECKCLIST)==BST_CHECKED); - ActualNudge->shakeChat = (IsDlgButtonChecked(hwnd,IDC_CHECKCHAT)==BST_CHECKED); - ActualNudge->openMessageWindow = (IsDlgButtonChecked(hwnd,IDC_OPENMESSAGE)==BST_CHECKED); - ActualNudge->openContactList = (IsDlgButtonChecked(hwnd,IDC_OPENCONTACTLIST)==BST_CHECKED); - ActualNudge->useIgnoreSettings = (IsDlgButtonChecked(hwnd,IDC_IGNORE)==BST_CHECKED); - ActualNudge->showStatus = (IsDlgButtonChecked(hwnd,IDC_CHECKSTATUS)==BST_CHECKED); - ActualNudge->showPopup = (IsDlgButtonChecked(hwnd,IDC_CHECKPOP)==BST_CHECKED); - ActualNudge->statusFlags = - ((IsDlgButtonChecked(hwnd,IDC_CHECKST0)==BST_CHECKED) ? NUDGE_ACC_ST0 : 0) | - ((IsDlgButtonChecked(hwnd,IDC_CHECKST1)==BST_CHECKED) ? NUDGE_ACC_ST1 : 0) | - ((IsDlgButtonChecked(hwnd,IDC_CHECKST2)==BST_CHECKED) ? NUDGE_ACC_ST2 : 0) | - ((IsDlgButtonChecked(hwnd,IDC_CHECKST3)==BST_CHECKED) ? NUDGE_ACC_ST3 : 0) | - ((IsDlgButtonChecked(hwnd,IDC_CHECKST4)==BST_CHECKED) ? NUDGE_ACC_ST4 : 0) | - ((IsDlgButtonChecked(hwnd,IDC_CHECKST5)==BST_CHECKED) ? NUDGE_ACC_ST5 : 0) | - ((IsDlgButtonChecked(hwnd,IDC_CHECKST6)==BST_CHECKED) ? NUDGE_ACC_ST6 : 0) | - ((IsDlgButtonChecked(hwnd,IDC_CHECKST7)==BST_CHECKED) ? NUDGE_ACC_ST7 : 0) | - ((IsDlgButtonChecked(hwnd,IDC_CHECKST8)==BST_CHECKED) ? NUDGE_ACC_ST8 : 0) | - ((IsDlgButtonChecked(hwnd,IDC_CHECKST9)==BST_CHECKED) ? NUDGE_ACC_ST9 : 0) ; - - GetDlgItemText(hwnd,IDC_SENDTEXT,ActualNudge->senText,TEXT_LEN); - GetDlgItemText(hwnd,IDC_RECVTEXT,ActualNudge->recText,TEXT_LEN); - ActualNudge->Save(); - } - GlobalNudge.Save(); - } - } - case IDC_PROTOLIST: - switch (((LPNMHDR)lParam)->code) - { - case NM_CLICK: - { - TVHITTESTINFO ht = {0}; - - DWORD dwpos = GetMessagePos(); - POINTSTOPOINT(ht.pt, MAKEPOINTS(dwpos)); - MapWindowPoints(HWND_DESKTOP, ((LPNMHDR)lParam)->hwndFrom, &ht.pt, 1); - - TreeView_HitTest(((LPNMHDR)lParam)->hwndFrom, &ht); - /*if (TVHT_ONITEM & ht.flags) - CheckChange(hwnd,ht.hItem);*/ - if (TVHT_ONITEMSTATEICON & ht.flags) - CheckChange(hwnd,ht.hItem); - } - - case TVN_KEYDOWN: - if (((LPNMTVKEYDOWN) lParam)->wVKey == VK_SPACE) - CheckChange(hwnd, TreeView_GetSelection(((LPNMHDR)lParam)->hwndFrom)); - break; - - case TVN_SELCHANGED: - { - LPNMTREEVIEW pnmtv = (LPNMTREEVIEW) lParam; - if (pnmtv->itemNew.state & TVIS_SELECTED) - UpdateControls(hwnd); - } - break; - } - break; + case IDC_PROTOLIST: + switch (((LPNMHDR)lParam)->code) { + case NM_CLICK: + { + TVHITTESTINFO ht = { 0 }; + + DWORD dwpos = GetMessagePos(); + POINTSTOPOINT(ht.pt, MAKEPOINTS(dwpos)); + MapWindowPoints(HWND_DESKTOP, ((LPNMHDR)lParam)->hwndFrom, &ht.pt, 1); + + TreeView_HitTest(((LPNMHDR)lParam)->hwndFrom, &ht); + if (TVHT_ONITEMSTATEICON & ht.flags) + CheckChange(hwnd, ht.hItem); + } + + case TVN_KEYDOWN: + if (((LPNMTVKEYDOWN)lParam)->wVKey == VK_SPACE) + CheckChange(hwnd, TreeView_GetSelection(((LPNMHDR)lParam)->hwndFrom)); + break; + + case TVN_SELCHANGED: + LPNMTREEVIEW pnmtv = (LPNMTREEVIEW)lParam; + if (pnmtv->itemNew.state & TVIS_SELECTED) + UpdateControls(hwnd); + break; } break; + } + break; } return FALSE; } -void CheckChange(HWND hwnd, HTREEITEM hItem) -{ - HWND hLstView = GetDlgItem(hwnd, IDC_PROTOLIST); - bool isChecked = !TreeView_GetCheckState(hLstView, hItem); +///////////////////////////////////////////////////////////////////////////////////////// - TreeView_SelectItem(hLstView, hItem); - - int proto = nProtocol; - if (GlobalNudge.useByProtocol) - { - proto = GetSelProto(hwnd, hItem); - ActualNudge = NULL; - for(NudgeElementList *n = NudgeList;n != NULL; n = n->next) - { - if(n->item.iProtoNumber == proto) - ActualNudge = &n->item; - } - } - else - ActualNudge = &DefaultNudge; - - if (ActualNudge)// fix NULL pointer then no nudge support protocols - ActualNudge->enabled = isChecked; - - UpdateControls(hwnd); -} - -void UpdateControls(HWND hwnd) +int NudgeOptInit(WPARAM wParam, LPARAM lParam) { - int proto = nProtocol; - if (GlobalNudge.useByProtocol) - { - proto = GetSelProto(hwnd,NULL); - ActualNudge = NULL; - for(NudgeElementList *n = NudgeList;n != NULL; n = n->next) - { - if(n->item.iProtoNumber == proto) - ActualNudge = &n->item; - } - } - else - ActualNudge = &DefaultNudge; - - SetDlgItemInt(hwnd, IDC_SENDTIME, GlobalNudge.sendTimeSec,FALSE); - SetDlgItemInt(hwnd, IDC_RECVTIME, GlobalNudge.recvTimeSec,FALSE); - SetDlgItemInt(hwnd, IDC_RESENDDELAY, GlobalNudge.resendDelaySec,FALSE); - CheckDlgButton(hwnd, IDC_USEBYPROTOCOL, (WPARAM) GlobalNudge.useByProtocol); + OPTIONSDIALOGPAGE odp = { sizeof(odp) }; + odp.position = -790000000; + odp.hInstance = hInst; + odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_NUDGE); + odp.pszTitle = LPGEN("Nudge"); + odp.pszGroup = LPGEN("Events"); + odp.pszTab = LPGEN("Nudge"); + odp.flags = ODPF_BOLDGROUPS; + odp.pfnDlgProc = DlgProcNudgeOpt; + Options_AddPage(wParam, &odp); - if (ActualNudge)// fix NULL pointer then no nudge support protocols - { - CheckDlgButton(hwnd, IDC_CHECKPOP, (WPARAM) ActualNudge->showPopup); - CheckDlgButton(hwnd, IDC_CHECKCLIST, (WPARAM) ActualNudge->shakeClist); - CheckDlgButton(hwnd, IDC_CHECKCHAT, (WPARAM) ActualNudge->shakeChat); - CheckDlgButton(hwnd, IDC_CHECKSTATUS, (WPARAM) ActualNudge->showStatus); - CheckDlgButton(hwnd, IDC_AUTORESEND, (WPARAM) ActualNudge->autoResend); - CheckDlgButton(hwnd, IDC_OPENMESSAGE, (WPARAM) ActualNudge->openMessageWindow); - CheckDlgButton(hwnd, IDC_OPENCONTACTLIST, (WPARAM) ActualNudge->openContactList); - CheckDlgButton(hwnd, IDC_IGNORE, (WPARAM) ActualNudge->useIgnoreSettings); - EnableWindow(GetDlgItem(hwnd,IDC_RESENDDELAY),ActualNudge->autoResend); - CheckDlgButton(hwnd,IDC_CHECKST0,ActualNudge->statusFlags & NUDGE_ACC_ST0 ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwnd,IDC_CHECKST1,ActualNudge->statusFlags & NUDGE_ACC_ST1 ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwnd,IDC_CHECKST2,ActualNudge->statusFlags & NUDGE_ACC_ST2 ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwnd,IDC_CHECKST3,ActualNudge->statusFlags & NUDGE_ACC_ST3 ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwnd,IDC_CHECKST4,ActualNudge->statusFlags & NUDGE_ACC_ST4 ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwnd,IDC_CHECKST5,ActualNudge->statusFlags & NUDGE_ACC_ST5 ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwnd,IDC_CHECKST6,ActualNudge->statusFlags & NUDGE_ACC_ST6 ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwnd,IDC_CHECKST7,ActualNudge->statusFlags & NUDGE_ACC_ST7 ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwnd,IDC_CHECKST8,ActualNudge->statusFlags & NUDGE_ACC_ST8 ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwnd,IDC_CHECKST9,ActualNudge->statusFlags & NUDGE_ACC_ST9 ? BST_CHECKED : BST_UNCHECKED); - SetDlgItemText(hwnd,IDC_SENDTEXT,ActualNudge->senText); - SetDlgItemText(hwnd,IDC_RECVTEXT,ActualNudge->recText); - } - else - { - EnableWindow(GetDlgItem(hwnd,IDC_PROTOLIST),FALSE); - } + odp.position = -790000001; + odp.pszTab = LPGEN("Window Shaking"); + odp.pfnDlgProc = DlgProcShakeOpt; + odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_SHAKE); + Options_AddPage(wParam, &odp); + return 0; } - -int GetSelProto(HWND hwnd, HTREEITEM hItem) -{ - HWND hLstView = GetDlgItem(hwnd, IDC_PROTOLIST); - TVITEM tvi = {0}; - - tvi.mask = TVIF_IMAGE; - tvi.hItem = hItem == NULL ? TreeView_GetSelection(hLstView) : hItem; - - TreeView_GetItem(hLstView, &tvi); - - return tvi.iImage; -} \ No newline at end of file -- cgit v1.2.3