diff options
author | George Hazan <ghazan@miranda.im> | 2021-04-04 21:05:17 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2021-04-04 21:05:17 +0300 |
commit | d18819b23a4d12d1ca49c40165962c2a51db0f74 (patch) | |
tree | b51dbc89d9ae4b1d8024a49644d8e92e9ad45f7f /protocols/WebView/src/webview_ui.cpp | |
parent | 0099dc67c8f511725f8e06762d1ced1d8aee0093 (diff) |
fixes #2835 (WebView: fix and remove "Disable main menu items" option)
Diffstat (limited to 'protocols/WebView/src/webview_ui.cpp')
-rw-r--r-- | protocols/WebView/src/webview_ui.cpp | 850 |
1 files changed, 850 insertions, 0 deletions
diff --git a/protocols/WebView/src/webview_ui.cpp b/protocols/WebView/src/webview_ui.cpp new file mode 100644 index 0000000000..cf0f00b4fb --- /dev/null +++ b/protocols/WebView/src/webview_ui.cpp @@ -0,0 +1,850 @@ +/* +* A plugin for Miranda IM which displays web page text in a window +* Copyright (C) 2005 Vincent Joyce. +* +* Miranda IM: the free icq client for MS Windows Copyright (C) 2000-2 +* Richard Hughes, Roland Rabien & Tristan Van de Vreede +* +* 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. +*/ + +#include "stdafx.h" +#include "webview.h" + +static const wchar_t *szTrackerBarDescr[] = { + LPGENW("No whitespace removal"), + LPGENW("Minimal level of whitespace removal"), + LPGENW("Medium level of whitespace removal"), + LPGENW("Large level of whitespace removal"), + LPGENW("Remove all whitespace") +}; + +static wchar_t *AlertTypes[] = { LPGENW("Popup plugin"), LPGENW("Log to file"), LPGENW("Open data display window"), LPGENW("Use OSD plugin") }; +static wchar_t *EventTypes[] = { LPGENW("A string is present"), LPGENW("The web page changes"), LPGENW("A specific part of web page changes") }; + +#define M_FILLSCRIPTCOMBO (WM_USER+16) + +wchar_t* FixButtonText(wchar_t *url, size_t len) +{ + wchar_t buttontext[256], stringbefore[256], newbuttontext[256]; + wcsncpy_s(buttontext, url, _TRUNCATE); + wcsncpy_s(newbuttontext, url, _TRUNCATE); + + if (wcschr(newbuttontext, '&') != nullptr) { + while (true) { + if (wcschr(newbuttontext, '&') == nullptr) + break; + + wcsncpy_s(buttontext, newbuttontext, _TRUNCATE); + wchar_t *stringafter = wcschr(buttontext, '&'); + int pos = (stringafter - buttontext); + int posbefore = (stringafter - buttontext) - 1; + int posafter = (stringafter - buttontext) + 1; + strdelw(stringafter, 1); + wcsncpy_s(stringbefore, pos, buttontext, _TRUNCATE); + mir_snwprintf(newbuttontext, L"%s!!%s", stringbefore, stringafter); + + posafter = 0; + posbefore = 0; + } + + while (true) { + if (wcschr(newbuttontext, '!') != nullptr) { + wchar_t *stringafter = wcschr(newbuttontext, '!'); + int pos = (stringafter - newbuttontext); + newbuttontext[pos] = '&'; + } + if (wcschr(newbuttontext, '!') == nullptr) + break; + } + } + + wcsncpy_s(url, len, newbuttontext, _TRUNCATE); + return url; +} + +///////////////////////////////////////////////////////////////////////////////////////// + +INT_PTR CALLBACK DlgProcAlertOpt(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + HWND ParentHwnd; + DBVARIANT dbv; + int alertIndex = 0; + int eventIndex = 0; + static int test; + MCONTACT hContact; + + ParentHwnd = GetParent(hwndDlg); + + switch (msg) { + case WM_INITDIALOG: + test = 0; + TranslateDialogDefault(hwndDlg); + hContact = lParam; + SetWindowLongPtr(hwndDlg, GWLP_USERDATA, lParam); + + SetWindowText(hwndDlg, TranslateT("Alert options")); + + SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(g_plugin.getInst(), MAKEINTRESOURCE(IDI_ALERT))); + + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_APPLY), 0); + + if (!g_plugin.getWString(hContact, ALERT_STRING_KEY, &dbv)) { + SetDlgItemText(hwndDlg, IDC_ALERT_STRING, dbv.pwszVal); + db_free(&dbv); + } + if (!g_plugin.getWString(hContact, ALRT_S_STRING_KEY, &dbv)) { + SetDlgItemText(hwndDlg, IDC_START2, dbv.pwszVal); + db_free(&dbv); + } + if (!g_plugin.getWString(hContact, ALRT_E_STRING_KEY, &dbv)) { + SetDlgItemText(hwndDlg, IDC_END2, dbv.pwszVal); + db_free(&dbv); + } + CheckDlgButton(hwndDlg, IDC_ENABLE_ALERTS, g_plugin.getByte(hContact, ENABLE_ALERTS_KEY, 0) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_ADD_DATE_NAME, g_plugin.getByte(hContact, APND_DATE_NAME_KEY, 0) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_24_HOUR, g_plugin.getByte(hContact, USE_24_HOUR_KEY, 0) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_ALWAYS_LOG, g_plugin.getByte(hContact, ALWAYS_LOG_KEY, 0) ? BST_CHECKED : BST_UNCHECKED); + + SetDlgItemText(hwndDlg, IDC_ALERT_TYPE, TranslateW(AlertTypes[g_plugin.getByte(hContact, ALRT_INDEX_KEY, 0)])); + SetDlgItemText(hwndDlg, IDC_EVENT_TYPE, TranslateW(EventTypes[g_plugin.getByte(hContact, EVNT_INDEX_KEY, 0)])); + + for (auto &it: AlertTypes) + SendDlgItemMessage(hwndDlg, IDC_ALERT_TYPE, CB_ADDSTRING, 0, (LPARAM)TranslateW(it)); + + for (auto &it: EventTypes) + SendDlgItemMessage(hwndDlg, IDC_EVENT_TYPE, CB_ADDSTRING, 0, (LPARAM)TranslateW(it)); + + if (g_plugin.getByte(hContact, ENABLE_ALERTS_KEY, 0)) { + CheckDlgButton(hwndDlg, IDC_ENABLE_ALERTS, BST_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_ADD_DATE_NAME, BST_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_24_HOUR, BST_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_PREFIX, BST_UNCHECKED); + } + EnableWindow(GetDlgItem(hwndDlg, IDC_EVENT_TYPE), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + EnableWindow(GetDlgItem(hwndDlg, IDC_ADD_DATE_NAME), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + + if (IsDlgButtonChecked(hwndDlg, IDC_ADD_DATE_NAME)) { + EnableWindow(GetDlgItem(hwndDlg, IDC_PREFIX), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + EnableWindow(GetDlgItem(hwndDlg, IDC_SUFFIX), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + EnableWindow(GetDlgItem(hwndDlg, IDC_24_HOUR), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + } + else { + EnableWindow(GetDlgItem(hwndDlg, IDC_PREFIX), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_SUFFIX), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_24_HOUR), 0); + } + + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_TYPE), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_STRING), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + EnableWindow(GetDlgItem(hwndDlg, IDC_FILENAME), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + EnableWindow(GetDlgItem(hwndDlg, IDC_BROWSE), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + EnableWindow(GetDlgItem(hwndDlg, IDC_APPEND), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + EnableWindow(GetDlgItem(hwndDlg, IDC_START2), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + EnableWindow(GetDlgItem(hwndDlg, IDC_END2), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + EnableWindow(GetDlgItem(hwndDlg, IDC_ALWAYS_LOG), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + EnableWindow(GetDlgItem(hwndDlg, IDC_SAVE_AS_RAW), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + + if (!g_plugin.getString(hContact, EVNT_INDEX_KEY, &dbv)) { + eventIndex = g_plugin.getByte(hContact, EVNT_INDEX_KEY, 0); + db_free(&dbv); + } + if (!g_plugin.getString(hContact, ALRT_INDEX_KEY, &dbv)) { + alertIndex = g_plugin.getByte(hContact, ALRT_INDEX_KEY, 0); + db_free(&dbv); + } + + // alerts + if (alertIndex == 0) // Popup + { + if (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS)) { + EnableWindow(GetDlgItem(hwndDlg, IDC_APPEND), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_FILENAME), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_BROWSE), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_SAVE_AS_RAW), 0); + } + } + else if (alertIndex == 1) // file + { + if (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS)) { + EnableWindow(GetDlgItem(hwndDlg, IDC_APPEND), 1); + EnableWindow(GetDlgItem(hwndDlg, IDC_FILENAME), 1); + EnableWindow(GetDlgItem(hwndDlg, IDC_BROWSE), 1); + EnableWindow(GetDlgItem(hwndDlg, IDC_SAVE_AS_RAW), 1); + } + } + else if (alertIndex == 2) // datawindow + { + if (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS)) { + EnableWindow(GetDlgItem(hwndDlg, IDC_APPEND), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_FILENAME), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_BROWSE), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_SAVE_AS_RAW), 0); + } + } + else if (alertIndex == 3) // osd + { + if (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS)) { + EnableWindow(GetDlgItem(hwndDlg, IDC_APPEND), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_FILENAME), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_BROWSE), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_SAVE_AS_RAW), 0); + } + } + + // events + if (eventIndex == 0) // string is present + { + if (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS)) { + EnableWindow(GetDlgItem(hwndDlg, IDC_START2), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_END2), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_STRING), 1); + } + } + else if (eventIndex == 1) // webpage changed + { + if (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS)) { + EnableWindow(GetDlgItem(hwndDlg, IDC_START2), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_END2), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_STRING), 0); + } + } + else if (eventIndex == 2) // part of page changed + { + if (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS)) { + EnableWindow(GetDlgItem(hwndDlg, IDC_START2), 1); + EnableWindow(GetDlgItem(hwndDlg, IDC_END2), 1); + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_STRING), 0); + } + } + + if (!g_plugin.getWString(hContact, FILE_KEY, &dbv)) { + SetDlgItemText(hwndDlg, IDC_FILENAME, dbv.pwszVal); + db_free(&dbv); + } + + CheckDlgButton(hwndDlg, IDC_APPEND, g_plugin.getByte(hContact, APPEND_KEY, 0) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_SAVE_AS_RAW, g_plugin.getByte(hContact, SAVE_AS_RAW_KEY, 0) ? BST_CHECKED : BST_UNCHECKED); + + if (g_plugin.getByte(hContact, CONTACT_PREFIX_KEY, 1) == 1) + CheckRadioButton(hwndDlg, IDC_PREFIX, IDC_SUFFIX, IDC_PREFIX); + else + CheckRadioButton(hwndDlg, IDC_PREFIX, IDC_SUFFIX, IDC_SUFFIX); + + if (g_plugin.getByte(hContact, ALWAYS_LOG_KEY, 0)) { + if (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS)) { + EnableWindow(GetDlgItem(hwndDlg, IDC_APPEND), 1); + EnableWindow(GetDlgItem(hwndDlg, IDC_FILENAME), 1); + EnableWindow(GetDlgItem(hwndDlg, IDC_BROWSE), 1); + EnableWindow(GetDlgItem(hwndDlg, IDC_SAVE_AS_RAW), 1); + } + } + return TRUE; + + case WM_COMMAND: + switch (LOWORD(wParam)) { + case IDC_BROWSE: + { + wchar_t szFileName[MAX_PATH]; + GetDlgItemText(hwndDlg, IDC_FILENAME, szFileName, _countof(szFileName)); + + OPENFILENAME ofn = { 0 }; + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = hwndDlg; + ofn.hInstance = nullptr; + ofn.lpstrFilter = L"TEXT Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0\0"; + ofn.lpstrFile = szFileName; + ofn.Flags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; + ofn.nMaxFile = _countof(szFileName); + ofn.nMaxFileTitle = MAX_PATH; + ofn.lpstrDefExt = L"txt"; + if (!GetSaveFileName(&ofn)) + break; + + SetDlgItemText(hwndDlg, IDC_FILENAME, szFileName); + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_APPLY), 1); + } + break; + + case IDC_ADD_DATE_NAME: + EnableWindow(GetDlgItem(hwndDlg, IDC_PREFIX), (IsDlgButtonChecked(hwndDlg, IDC_ADD_DATE_NAME))); + EnableWindow(GetDlgItem(hwndDlg, IDC_SUFFIX), (IsDlgButtonChecked(hwndDlg, IDC_ADD_DATE_NAME))); + EnableWindow(GetDlgItem(hwndDlg, IDC_24_HOUR), (IsDlgButtonChecked(hwndDlg, IDC_ADD_DATE_NAME))); + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_APPLY), 1); + break; + + case IDC_24_HOUR: + case IDC_SUFFIX: + case IDC_PREFIX: + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_APPLY), 1); + break; + + case IDC_ALERT_STRING: + if (HIWORD(wParam) == EN_CHANGE) + test++; + if (test > 1) + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_APPLY), 1); + break; + + case IDC_START2: + case IDC_END2: + if (HIWORD(wParam) == EN_CHANGE) + test++; + if (test > 3) + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_APPLY), 1); + break; + + case IDC_APPEND: + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_APPLY), 1); + break; + + case IDC_SAVE_AS_RAW: + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_APPLY), 1); + break; + + case IDC_ENABLE_ALERTS: + hContact = (MCONTACT)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + EnableWindow(GetDlgItem(hwndDlg, IDC_ADD_DATE_NAME), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + + if (IsDlgButtonChecked(hwndDlg, IDC_ADD_DATE_NAME)) { + EnableWindow(GetDlgItem(hwndDlg, IDC_PREFIX), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + EnableWindow(GetDlgItem(hwndDlg, IDC_SUFFIX), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + EnableWindow(GetDlgItem(hwndDlg, IDC_24_HOUR), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + } + else { + EnableWindow(GetDlgItem(hwndDlg, IDC_PREFIX), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_SUFFIX), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_24_HOUR), 0); + } + + EnableWindow(GetDlgItem(hwndDlg, IDC_EVENT_TYPE), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_TYPE), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + EnableWindow(GetDlgItem(hwndDlg, IDC_ALWAYS_LOG), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + + eventIndex = g_plugin.getByte(hContact, EVNT_INDEX_KEY, 0); + alertIndex = g_plugin.getByte(hContact, ALRT_INDEX_KEY, 0); + + if (eventIndex == 2) { // part of webpage changed + EnableWindow(GetDlgItem(hwndDlg, IDC_START2), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + EnableWindow(GetDlgItem(hwndDlg, IDC_END2), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + } + else { + EnableWindow(GetDlgItem(hwndDlg, IDC_START2), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_END2), 0); + } + + // //////// + if (alertIndex == 0) { // popup + if (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS)) { + EnableWindow(GetDlgItem(hwndDlg, IDC_APPEND), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_FILENAME), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_BROWSE), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_SAVE_AS_RAW), 0); + + if (eventIndex == 2) // part of webpage changed + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_STRING), 0); + if (eventIndex == 1) // webpage changed + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_STRING), 0); + if (eventIndex == 0) // string present + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_STRING), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + } + } + else if (alertIndex == 1) { // log to file + if (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS)) { + EnableWindow(GetDlgItem(hwndDlg, IDC_APPEND), 1); + EnableWindow(GetDlgItem(hwndDlg, IDC_FILENAME), 1); + EnableWindow(GetDlgItem(hwndDlg, IDC_BROWSE), 1); + EnableWindow(GetDlgItem(hwndDlg, IDC_SAVE_AS_RAW), 1); + + if (eventIndex == 1) // webpage changed + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_STRING), 0); + if (eventIndex == 0) // string present + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_STRING), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + } + else { + EnableWindow(GetDlgItem(hwndDlg, IDC_APPEND), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_FILENAME), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_BROWSE), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_SAVE_AS_RAW), 0); + } + } + else if (alertIndex == 2) { // display window + if (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS)) { + EnableWindow(GetDlgItem(hwndDlg, IDC_APPEND), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_FILENAME), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_BROWSE), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_SAVE_AS_RAW), 0); + + if (eventIndex == 1) // webpage changed + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_STRING), 0); + if (eventIndex == 0) // string present + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_STRING), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + } + } + else if (alertIndex == 3) { // osd + if (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS)) { + EnableWindow(GetDlgItem(hwndDlg, IDC_APPEND), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_FILENAME), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_BROWSE), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_SAVE_AS_RAW), 0); + + if (eventIndex == 1) // webpage changed + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_STRING), 0); + if (eventIndex == 0) // string present + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_STRING), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + } + } + + if (eventIndex == 0) // string present + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_STRING), (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))); + + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_APPLY), 1); + + if (IsDlgButtonChecked(hwndDlg, IDC_ALWAYS_LOG)) { + if (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS)) { + EnableWindow(GetDlgItem(hwndDlg, IDC_APPEND), 1); + EnableWindow(GetDlgItem(hwndDlg, IDC_FILENAME), 1); + EnableWindow(GetDlgItem(hwndDlg, IDC_BROWSE), 1); + EnableWindow(GetDlgItem(hwndDlg, IDC_SAVE_AS_RAW), 1); + } + else { + EnableWindow(GetDlgItem(hwndDlg, IDC_APPEND), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_FILENAME), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_BROWSE), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_SAVE_AS_RAW), 0); + } + } + break; + + case IDC_ALWAYS_LOG: + EnableWindow(GetDlgItem(hwndDlg, IDC_APPEND), (IsDlgButtonChecked(hwndDlg, IDC_ALWAYS_LOG))); + EnableWindow(GetDlgItem(hwndDlg, IDC_FILENAME), (IsDlgButtonChecked(hwndDlg, IDC_ALWAYS_LOG))); + EnableWindow(GetDlgItem(hwndDlg, IDC_BROWSE), (IsDlgButtonChecked(hwndDlg, IDC_ALWAYS_LOG))); + EnableWindow(GetDlgItem(hwndDlg, IDC_SAVE_AS_RAW), (IsDlgButtonChecked(hwndDlg, IDC_ALWAYS_LOG))); + break; + + case IDC_ALERT_TYPE: + if (HIWORD(wParam) == CBN_SELCHANGE || HIWORD(wParam) == CBN_EDITCHANGE) { + hContact = (MCONTACT)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + alertIndex = SendDlgItemMessage(hwndDlg, IDC_ALERT_TYPE, CB_GETCURSEL, 0, 0); + + if (HIWORD(wParam) == CBN_SELCHANGE) { + g_plugin.setByte(hContact, ALRT_INDEX_KEY, alertIndex); + if (alertIndex == 0) { + // PopUp + EnableWindow(GetDlgItem(hwndDlg, IDC_APPEND), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_FILENAME), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_BROWSE), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_SAVE_AS_RAW), 0); + } + else if (alertIndex == 1) { + // log to file + EnableWindow(GetDlgItem(hwndDlg, IDC_APPEND), 1); + EnableWindow(GetDlgItem(hwndDlg, IDC_FILENAME), 1); + EnableWindow(GetDlgItem(hwndDlg, IDC_BROWSE), 1); + EnableWindow(GetDlgItem(hwndDlg, IDC_SAVE_AS_RAW), 1); + } + else if (alertIndex == 2) { + // data window + EnableWindow(GetDlgItem(hwndDlg, IDC_APPEND), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_FILENAME), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_BROWSE), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_SAVE_AS_RAW), 0); + } + else if (alertIndex == 3) { + // OSD + EnableWindow(GetDlgItem(hwndDlg, IDC_APPEND), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_FILENAME), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_BROWSE), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_SAVE_AS_RAW), 0); + } + + if (IsDlgButtonChecked(hwndDlg, IDC_ALWAYS_LOG)) { + EnableWindow(GetDlgItem(hwndDlg, IDC_APPEND), (IsDlgButtonChecked(hwndDlg, IDC_ALWAYS_LOG))); + EnableWindow(GetDlgItem(hwndDlg, IDC_FILENAME), (IsDlgButtonChecked(hwndDlg, IDC_ALWAYS_LOG))); + EnableWindow(GetDlgItem(hwndDlg, IDC_BROWSE), (IsDlgButtonChecked(hwndDlg, IDC_ALWAYS_LOG))); + EnableWindow(GetDlgItem(hwndDlg, IDC_SAVE_AS_RAW), (IsDlgButtonChecked(hwndDlg, IDC_ALWAYS_LOG))); + } + } + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_APPLY), 1); + } + break; + + case IDC_EVENT_TYPE: + if (HIWORD(wParam) == CBN_SELCHANGE || HIWORD(wParam) == CBN_EDITCHANGE) { + hContact = (MCONTACT)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + eventIndex = SendDlgItemMessage(hwndDlg, IDC_EVENT_TYPE, CB_GETCURSEL, 0, 0); + + if (HIWORD(wParam) == CBN_SELCHANGE) { + g_plugin.setByte(hContact, EVNT_INDEX_KEY, eventIndex); + if (eventIndex == 0) { + // event when string is present + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_STRING), 1); + EnableWindow(GetDlgItem(hwndDlg, IDC_START2), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_END2), 0); + } + else if (eventIndex == 1) { + // event when web page changes + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_STRING), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_START2), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_END2), 0); + } + else if (eventIndex == 2) { + // event when part of web page changes + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_STRING), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_START2), 1); + EnableWindow(GetDlgItem(hwndDlg, IDC_END2), 1); + } + } + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_APPLY), 1); + } + break; + + case IDC_ALERT_APPLY: + case IDC_OK2: + { + hContact = (MCONTACT)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + + eventIndex = g_plugin.getByte(hContact, EVNT_INDEX_KEY, 0); + alertIndex = g_plugin.getByte(hContact, ALRT_INDEX_KEY, 0); + + g_plugin.setByte(hContact, ENABLE_ALERTS_KEY, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS)); + g_plugin.setByte(hContact, APND_DATE_NAME_KEY, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_ADD_DATE_NAME)); + g_plugin.setByte(hContact, USE_24_HOUR_KEY, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_24_HOUR)); + g_plugin.setByte(hContact, ALWAYS_LOG_KEY, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_ALWAYS_LOG)); + + //if alerts is unticked delete the cache + if (!(IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS))) + SiteDeleted(hContact, 0); + + if (eventIndex == 0) // string present + if (!(GetWindowTextLength(GetDlgItem(hwndDlg, IDC_ALERT_STRING)))) + if (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS)) { + MessageBox(nullptr, TranslateT("You need to supply a search string."), _A2W(MODULENAME), MB_OK); + break; + } + + if (eventIndex == 2) // part of web page changed + if (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS)) { + if (!(GetWindowTextLength(GetDlgItem(hwndDlg, IDC_START2)))) { + MessageBox(nullptr, TranslateT("You need to supply a start string."), _A2W(MODULENAME), MB_OK); + break; + } + if (!(GetWindowTextLength(GetDlgItem(hwndDlg, IDC_END2)))) { + MessageBox(nullptr, TranslateT("You need to supply an end string."), _A2W(MODULENAME), MB_OK); + break; + } + } + + if (alertIndex == 1) // log to file + if (!(GetWindowTextLength(GetDlgItem(hwndDlg, IDC_FILENAME)))) + if (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS)) { + MessageBox(nullptr, TranslateT("You need to supply a file name and path."), _A2W(MODULENAME), MB_OK); + break; + } + + if (IsDlgButtonChecked(hwndDlg, IDC_ALWAYS_LOG)) + if (!(GetWindowTextLength(GetDlgItem(hwndDlg, IDC_FILENAME)))) + if (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ALERTS)) { + MessageBox(nullptr, TranslateT("You need to supply a file name and path."), _A2W(MODULENAME), MB_OK); + break; + } + + wchar_t buf[MAX_PATH]; + GetDlgItemText(hwndDlg, IDC_FILENAME, buf, _countof(buf)); + g_plugin.setWString(hContact, FILE_KEY, buf); + + g_plugin.setByte(hContact, APPEND_KEY, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_APPEND)); + g_plugin.setByte(hContact, SAVE_AS_RAW_KEY, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_SAVE_AS_RAW)); + + GetDlgItemText(hwndDlg, IDC_ALERT_STRING, buf, _countof(buf)); + g_plugin.setWString(hContact, ALERT_STRING_KEY, buf); + + GetDlgItemText(hwndDlg, IDC_START2, buf, _countof(buf)); + g_plugin.setWString(hContact, ALRT_S_STRING_KEY, buf); + + GetDlgItemText(hwndDlg, IDC_END2, buf, _countof(buf)); + g_plugin.setWString(hContact, ALRT_E_STRING_KEY, buf); + + g_plugin.setByte(hContact, CONTACT_PREFIX_KEY, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_PREFIX)); + + EnableWindow(GetDlgItem(hwndDlg, IDC_ALERT_APPLY), 0); + + if (LOWORD(wParam) == IDC_OK2) + EndDialog(hwndDlg, 1); + } + break; + + case IDC_ALERT_CANCEL: + case IDC_CANCEL: + EndDialog(hwndDlg, 0); + } + } + return FALSE; +} + +///////////////////////////////////////////////////////////////////////////////////////// + +INT_PTR CALLBACK DlgProcContactOpt(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + DBVARIANT dbv; + wchar_t url[300]; + HWND ParentHwnd = GetParent(hwndDlg); + static int test; + static int test2; + MCONTACT hContact; + + switch (msg) { + case WM_INITDIALOG: + TranslateDialogDefault(hwndDlg); + + hContact = (MCONTACT)lParam; + + test = 0; + test2 = 0; + + SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)hContact); + + SetWindowText(hwndDlg, TranslateT("Contact options")); + + SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(g_plugin.getInst(), MAKEINTRESOURCE(IDI_OPTIONS))); + + EnableWindow(GetDlgItem(hwndDlg, IDC_OPT_APPLY), 0); + + if (!g_plugin.getWString(hContact, URL_KEY, &dbv)) { + SetDlgItemText(hwndDlg, IDC_URL, dbv.pwszVal); + db_free(&dbv); + } + if (!g_plugin.getWString(hContact, START_STRING_KEY, &dbv)) { + SetDlgItemText(hwndDlg, IDC_START, dbv.pwszVal); + db_free(&dbv); + } + if (!g_plugin.getWString(hContact, END_STRING_KEY, &dbv)) { + SetDlgItemText(hwndDlg, IDC_END, dbv.pwszVal); + db_free(&dbv); + } + if (g_plugin.getWString(hContact, PRESERVE_NAME_KEY, &dbv)) { + db_free(&dbv); + db_get_ws(hContact, "CList", "MyHandle", &dbv); + g_plugin.setWString(hContact, PRESERVE_NAME_KEY, dbv.pwszVal); + db_free(&dbv); + } + if (!g_plugin.getWString(hContact, PRESERVE_NAME_KEY, &dbv)) { + SetDlgItemText(hwndDlg, IDC_SITE_NAME, dbv.pwszVal); + db_free(&dbv); + } + + CheckDlgButton(hwndDlg, IDC_CLEAN, g_plugin.getByte(hContact, CLEAR_DISPLAY_KEY, 0) ? BST_CHECKED : BST_UNCHECKED); + + SendDlgItemMessage(hwndDlg, IDC_RWSPACE, TBM_SETRANGE, FALSE, MAKELONG(0, 4)); + SendDlgItemMessage(hwndDlg, IDC_RWSPACE, TBM_SETPOS, TRUE, g_plugin.getByte(hContact, RWSPACE_KEY, 0)); + SetDlgItemText(hwndDlg, IDC_RWSPC_TEXT, TranslateW(szTrackerBarDescr[SendDlgItemMessage(hwndDlg, IDC_RWSPACE, TBM_GETPOS, 0, 0)])); + + EnableWindow(GetDlgItem(hwndDlg, IDC_RWSPACE), (IsDlgButtonChecked(hwndDlg, IDC_CLEAN))); + EnableWindow(GetDlgItem(hwndDlg, IDC_RWSPC_TEXT), (IsDlgButtonChecked(hwndDlg, IDC_CLEAN))); + + if (g_plugin.getByte(hContact, DBLE_WIN_KEY, 1) == 1) + CheckRadioButton(hwndDlg, IDC_DBLE_WEB, IDC_DBLE_WIN, IDC_DBLE_WIN); + else + CheckRadioButton(hwndDlg, IDC_DBLE_WEB, IDC_DBLE_WIN, IDC_DBLE_WEB); + + if (g_plugin.getByte(hContact, U_ALLSITE_KEY, 0) == 1) { + CheckRadioButton(hwndDlg, IDC_U_SE_STRINGS, IDC_U_ALLSITE, IDC_U_ALLSITE); + EnableWindow(GetDlgItem(hwndDlg, IDC_START), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_END), 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_CPY_STRINGS), 0); + } + else { + CheckRadioButton(hwndDlg, IDC_U_SE_STRINGS, IDC_U_ALLSITE, IDC_U_SE_STRINGS); + EnableWindow(GetDlgItem(hwndDlg, IDC_START), 1); + EnableWindow(GetDlgItem(hwndDlg, IDC_END), 1); + EnableWindow(GetDlgItem(hwndDlg, IDC_CPY_STRINGS), 1); + //EnableWindow(GetDlgItem(hwndDlg, IDC_CPY_STR_TXT), 1); + } + break; + + case WM_HSCROLL: + SetDlgItemText(hwndDlg, IDC_RWSPC_TEXT, TranslateW(szTrackerBarDescr[SendDlgItemMessage(hwndDlg, IDC_RWSPACE, TBM_GETPOS, 0, 0)])); + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + EnableWindow(GetDlgItem(hwndDlg, IDC_OPT_APPLY), 1); + break; + + case WM_COMMAND: + switch (LOWORD(wParam)) { + case WM_CLOSE: + case IDCANCEL: + if (hwndDlg) { + DestroyWindow(hwndDlg); + hwndDlg = nullptr; + } + return TRUE; + + case IDC_SITE_NAME: + case IDC_URL: + if (HIWORD(wParam) == EN_CHANGE) + test++; + if (test > 2) + EnableWindow(GetDlgItem(hwndDlg, IDC_OPT_APPLY), 1); + break; + + case IDC_DBLE_WEB: + case IDC_DBLE_WIN: + EnableWindow(GetDlgItem(hwndDlg, IDC_OPT_APPLY), 1); + break; + + case IDC_START: + case IDC_END: + if (HIWORD(wParam) == EN_CHANGE) + test2++; + if (test2 > 2) + EnableWindow(GetDlgItem(hwndDlg, IDC_OPT_APPLY), 1); + break; + + case IDC_CPY_STRINGS: + { + wchar_t string[128]; + hContact = (MCONTACT)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + + GetDlgItemText(hwndDlg, IDC_START, string, _countof(string)); + g_plugin.setWString(hContact, ALRT_S_STRING_KEY, string); + + GetDlgItemText(hwndDlg, IDC_END, string, _countof(string)); + g_plugin.setWString(hContact, ALRT_E_STRING_KEY, string); + + g_plugin.setWord(hContact, EVNT_INDEX_KEY, 2); + } + break; + + case IDC_CLEAN: + EnableWindow(GetDlgItem(hwndDlg, IDC_RWSPACE), (IsDlgButtonChecked(hwndDlg, IDC_CLEAN))); + EnableWindow(GetDlgItem(hwndDlg, IDC_RWSPC_TEXT), (IsDlgButtonChecked(hwndDlg, IDC_CLEAN))); + EnableWindow(GetDlgItem(hwndDlg, IDC_OPT_APPLY), 1); + break; + + case IDC_U_SE_STRINGS: + EnableWindow(GetDlgItem(hwndDlg, IDC_START), (IsDlgButtonChecked(hwndDlg, IDC_U_SE_STRINGS))); + EnableWindow(GetDlgItem(hwndDlg, IDC_END), (IsDlgButtonChecked(hwndDlg, IDC_U_SE_STRINGS))); + EnableWindow(GetDlgItem(hwndDlg, IDC_CPY_STRINGS), (IsDlgButtonChecked(hwndDlg, IDC_U_SE_STRINGS))); + EnableWindow(GetDlgItem(hwndDlg, IDC_OPT_APPLY), 1); + break; + + case IDC_U_ALLSITE: + EnableWindow(GetDlgItem(hwndDlg, IDC_START), (IsDlgButtonChecked(hwndDlg, IDC_U_SE_STRINGS))); + EnableWindow(GetDlgItem(hwndDlg, IDC_END), (IsDlgButtonChecked(hwndDlg, IDC_U_SE_STRINGS))); + EnableWindow(GetDlgItem(hwndDlg, IDC_CPY_STRINGS), (IsDlgButtonChecked(hwndDlg, IDC_U_SE_STRINGS))); + EnableWindow(GetDlgItem(hwndDlg, IDC_OPT_APPLY), 1); + break; + + case IDC_OPT_APPLY: + case IDOK: + { + wchar_t str[128], contactname[128]; + if (!GetWindowTextLength(GetDlgItem(hwndDlg, IDC_URL))) { + MessageBox(nullptr, TranslateT("You need to supply a URL."), _A2W(MODULENAME), MB_OK); + break; + } + if (!GetWindowTextLength(GetDlgItem(hwndDlg, IDC_START))) { + if (IsDlgButtonChecked(hwndDlg, IDC_U_SE_STRINGS)) { + MessageBox(nullptr, TranslateT("You need to supply a start string."), _A2W(MODULENAME), MB_OK); + break; + } + } + if (!GetWindowTextLength(GetDlgItem(hwndDlg, IDC_END))) { + if (IsDlgButtonChecked(hwndDlg, IDC_U_SE_STRINGS)) { + MessageBox(nullptr, TranslateT("You need to supply an end string."), _A2W(MODULENAME), MB_OK); + break; + } + } + if (!GetWindowTextLength(GetDlgItem(hwndDlg, IDC_SITE_NAME))) { + MessageBox(nullptr, TranslateT("You need to supply a name for the contact."), _A2W(MODULENAME), MB_OK); + break; + } + + GetDlgItemText(hwndDlg, IDC_SITE_NAME, contactname, _countof(contactname)); + if (wcschr(contactname, '\\') != nullptr) { + MessageBox(nullptr, TranslateT("Invalid symbol present in contact name."), _A2W(MODULENAME), MB_OK); + break; + } + if (wcschr(contactname, '/') != nullptr) { + MessageBox(nullptr, TranslateT("Invalid symbol present in contact name."), _A2W(MODULENAME), MB_OK); + break; + } + if (wcschr(contactname, ':') != nullptr) { + MessageBox(nullptr, TranslateT("Invalid symbol present in contact name."), _A2W(MODULENAME), MB_OK); + break; + } + if (wcschr(contactname, '*') != nullptr) { + MessageBox(nullptr, TranslateT("Invalid symbol present in contact name."), _A2W(MODULENAME), MB_OK); + break; + } + if (wcschr(contactname, '?') != nullptr) { + MessageBox(nullptr, TranslateT("Invalid symbol present in contact name."), _A2W(MODULENAME), MB_OK); + break; + } + if (wcschr(contactname, '\"') != nullptr) { + MessageBox(nullptr, TranslateT("Invalid symbol present in contact name."), _A2W(MODULENAME), MB_OK); + break; + } + if (wcschr(contactname, '<') != nullptr) { + MessageBox(nullptr, TranslateT("Invalid symbol present in contact name."), _A2W(MODULENAME), MB_OK); + break; + } + if (wcschr(contactname, '>') != nullptr) { + MessageBox(nullptr, TranslateT("Invalid symbol present in contact name."), _A2W(MODULENAME), MB_OK); + break; + } + if (wcschr(contactname, '|') != nullptr) { + MessageBox(nullptr, TranslateT("Invalid symbol present in contact name."), _A2W(MODULENAME), MB_OK); + break; + } + + hContact = (MCONTACT)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + + GetDlgItemText(hwndDlg, IDC_URL, url, _countof(url)); + g_plugin.setWString(hContact, URL_KEY, url); + g_plugin.setWString(hContact, "Homepage", url); + + GetDlgItemText(hwndDlg, IDC_START, str, _countof(str)); + g_plugin.setWString(hContact, START_STRING_KEY, str); + + GetDlgItemText(hwndDlg, IDC_END, str, _countof(str)); + g_plugin.setWString(hContact, END_STRING_KEY, str); + + GetDlgItemText(hwndDlg, IDC_SITE_NAME, str, _countof(str)); + db_set_ws(hContact, "CList", "MyHandle", str); + + g_plugin.setByte(hContact, DBLE_WIN_KEY, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_DBLE_WIN)); + g_plugin.setByte(hContact, U_ALLSITE_KEY, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_U_ALLSITE)); + + g_plugin.setByte(hContact, CLEAR_DISPLAY_KEY, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_CLEAN)); + g_plugin.setByte(hContact, RWSPACE_KEY, (BYTE)(SendDlgItemMessage(hwndDlg, IDC_RWSPACE, TBM_GETPOS, 0, 0))); + + SetDlgItemText(ParentHwnd, IDC_OPEN_URL, FixButtonText(url, _countof(url))); + + SetWindowText(ParentHwnd, str); + EnableWindow(GetDlgItem(hwndDlg, IDC_OPT_APPLY), 0); + + if (LOWORD(wParam) == IDOK) + EndDialog(hwndDlg, 1); + } + break; + + case IDC_OPT_CANCEL: + EndDialog(hwndDlg, 0); + } + break; + } + return FALSE; +} |