From 271cf1987ef0dc4d6561d14e0ba89c17bb125903 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 10 Feb 2013 19:26:03 +0000 Subject: NotifyAnything plugin git-svn-id: http://svn.miranda-ng.org/main/trunk@3539 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/NotifyAnything/src/options.cpp | 209 +++++++++++++++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 plugins/NotifyAnything/src/options.cpp (limited to 'plugins/NotifyAnything/src/options.cpp') diff --git a/plugins/NotifyAnything/src/options.cpp b/plugins/NotifyAnything/src/options.cpp new file mode 100644 index 0000000000..53c06ecf23 --- /dev/null +++ b/plugins/NotifyAnything/src/options.cpp @@ -0,0 +1,209 @@ + +#include + +#include "common.h" +#include "resource.h" + +NASettings g_settings; + +INT_PTR CALLBACK DlgProcOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) { + case WM_INITDIALOG: + TranslateDialogDefault(hwndDlg); + { + char buf[10]; + CheckDlgButton(hwndDlg, NA_LOCAL_CHECK, g_settings.local_only ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwndDlg, NA_DEBUG_MSG_CHECK, g_settings.debug_messages ? BST_CHECKED : BST_UNCHECKED); + if (IsLogService) { + LS_LOGINFO pli; + pli.szID = LOG_ID; + pli.hContact = NULL; + pli.szLogPath = NULL; + pli.Flags = 0; + pli.cbSize = sizeof(LS_LOGINFO); + if (!CallService(MS_LOGSERVICE_GETLOGINFO, (WPARAM)(LS_LOGINFO *) &pli, 0)) { + CheckDlgButton(hwndDlg, NA_LOG_CHECK, (pli.Flags && LSLI_LOGENABLED) ? BST_CHECKED : BST_UNCHECKED); + } + std::tstring InLogService = TranslateT("Services"); + InLogService += _T(" -> "); + InLogService += TranslateT("LogService"); + InLogService += _T(" -> "); + InLogService += TranslateT(LOG_ID); + SetDlgItemText(hwndDlg, NA_LOG_FILENAME, InLogService.c_str()); + } + else { + CheckDlgButton(hwndDlg, NA_LOG_CHECK, g_settings.log_to_file ? BST_CHECKED : BST_UNCHECKED); + SetDlgItemTextA(hwndDlg, NA_LOG_FILENAME, g_settings.log_filename.c_str()); + } + EnableWindow(GetDlgItem(hwndDlg, NA_LOG_CHECK), !IsLogService); + EnableWindow(GetDlgItem(hwndDlg, NA_LOG_FILENAME), !IsLogService); + EnableWindow(GetDlgItem(hwndDlg, NA_LOG_BROWSE), !IsLogService); + EnableWindow(GetDlgItem(hwndDlg, NA_DEBUG_MSG_CHECK), IsDlgButtonChecked(hwndDlg, NA_LOG_CHECK) ? 1 : 0); + CheckDlgButton(hwndDlg, NA_PCSPEAKER_CHECK, g_settings.use_pcspeaker ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwndDlg, NA_ALLOW_EXECUTE, g_settings.allow_execute ? BST_CHECKED : BST_UNCHECKED); + SetDlgItemTextA(hwndDlg, NA_PORT, itoa(g_settings.port, buf, 10)); + SetDlgItemTextA(hwndDlg, NA_PASSWORD, g_settings.password.c_str()); + UINT state; + switch (g_settings.sound) { + case g_settings.always: + state = BST_CHECKED; break; + case g_settings.never: + state = BST_UNCHECKED; break; + case g_settings.request: + default: + state = BST_INDETERMINATE; break; + } + CheckDlgButton(hwndDlg, NA_SOUND_CHECK, state); + } + return TRUE; + + case WM_COMMAND: + switch(LOWORD(wParam)) { + case NA_SOUND_CHECK: + case NA_PCSPEAKER_CHECK: + case NA_LOCAL_CHECK: + case NA_DEBUG_MSG_CHECK: + case NA_LOG_CHECK: + case NA_PORT: + case NA_PASSWORD: + case NA_LOG_FILENAME: + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + } + + if (HIWORD(wParam) == BN_CLICKED) { + switch (LOWORD(wParam)) { + case NA_LOG_BROWSE: + TCHAR szTemp[MAX_PATH+1], szTemp1[MAX_PATH+1], szProfileDir[MAX_PATH+1]; + GetDlgItemText(hwndDlg, NA_LOG_FILENAME, szTemp, MAX_PATH); + OPENFILENAME ofn = {0}; + ofn.lStructSize = sizeof(ofn); + ofn.lpstrFile = szTemp; + ofn.nMaxFile = MAX_PATH; + ofn.hwndOwner = hwndDlg; + ofn.lpstrFilter = TranslateT("Log (*.log)\0*.log\0Text (*.txt)\0*.txt\0All Files (*.*)\0*.*\0"); + ofn.nFilterIndex = 1; + // Use profile directory as default, if path is not specified + CallService(MS_DB_GETPROFILEPATH, (WPARAM)MAX_PATH, (LPARAM) szProfileDir); + ofn.lpstrInitialDir = szProfileDir; + ofn.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY; + ofn.lpstrDefExt = _T("log"); + if ( GetOpenFileName(&ofn)) { + CallService(MS_UTILS_PATHTORELATIVE, (WPARAM)(char*) szTemp, (LPARAM)(char*) szTemp1); + SetDlgItemText(hwndDlg, NA_LOG_FILENAME, szTemp1); + SendMessage(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0); + } + + return 0; + } + } + break; + + case WM_NOTIFY: + if (((LPNMHDR)lParam)->idFrom != 0) + break; + + switch (((LPNMHDR)lParam)->code) { + case PSN_RESET: + return TRUE; + + case PSN_APPLY: { + UINT state = IsDlgButtonChecked(hwndDlg, NA_SOUND_CHECK); + NASettings s; + switch (state) { + case BST_CHECKED: + s.sound = s.always; break; + case BST_INDETERMINATE: + s.sound = s.request; break; + case BST_UNCHECKED: + default: + s.sound = s.never; break; + } + s.local_only = IsDlgButtonChecked(hwndDlg, NA_LOCAL_CHECK) != BST_UNCHECKED; + s.debug_messages = IsDlgButtonChecked(hwndDlg, NA_DEBUG_MSG_CHECK) != BST_UNCHECKED; + s.log_to_file = IsDlgButtonChecked(hwndDlg, NA_LOG_CHECK) != BST_UNCHECKED; + s.use_pcspeaker = IsDlgButtonChecked(hwndDlg, NA_PCSPEAKER_CHECK) != BST_UNCHECKED; + s.allow_execute = IsDlgButtonChecked(hwndDlg, NA_ALLOW_EXECUTE) != BST_UNCHECKED; + + TCHAR buf[1000]; + if (!GetDlgItemText(hwndDlg, NA_PORT, buf, sizeof buf - 1)) + buf[0] = '\0'; + int port = _ttoi(buf); + if (port <= 0 || port > 65535) + MessageBox(0, TranslateT("Invalid port number"), TranslateT("NotifyAnything"), MB_ICONWARNING | MB_OK); + else + s.port = port; + + if (!GetDlgItemText(hwndDlg, NA_PASSWORD, buf, sizeof buf - 1)) + buf[0] = '\0'; + s.password = _T2A(buf); + + if (!IsLogService) { + if (!GetDlgItemText(hwndDlg, NA_LOG_FILENAME, buf, sizeof buf - 1)) + buf[0] = '\0'; + s.log_filename = _T2A(buf); + } + + g_settings = s; + save_settings(); + stop_threads(); + start_threads(); + return TRUE; + } + } + break; + } + return FALSE; +} + +void save_settings() +{ + db_set_b(NULL, PlugName, "local_only", g_settings.local_only); + db_set_b(NULL, PlugName, "debug_messages", g_settings.debug_messages); + db_set_b(NULL, PlugName, "log_to_file", g_settings.log_to_file); + db_set_b(NULL, PlugName, "beep", g_settings.sound); + db_set_b(NULL, PlugName, "use_pcspeaker", g_settings.use_pcspeaker); + db_set_b(NULL, PlugName, "allow_execute", g_settings.allow_execute); + db_set_dw(NULL, PlugName, "port", g_settings.port); + db_set_s(NULL, PlugName, "password", g_settings.password.c_str()); + db_set_s(NULL, PlugName, "log_filename", g_settings.log_filename.c_str()); +} + +void load_settings() +{ + g_settings.local_only = db_get_b(NULL, PlugName, "local_only", 1) != 0; + g_settings.debug_messages = db_get_b(NULL, PlugName, "debug_messages", 0) != 0; + g_settings.log_to_file = db_get_b(NULL, PlugName, "log_to_file", 0) != 0; + g_settings.sound = NASettings::sound_t(db_get_b(NULL, PlugName, "beep", g_settings.request)); + g_settings.use_pcspeaker = db_get_b(NULL, PlugName, "use_pcspeaker", 0) != 0; + g_settings.allow_execute = db_get_b(NULL, PlugName, "allow_execute", 0) != 0; + g_settings.port = db_get_dw(NULL, PlugName, "port", 12001); + + DBVARIANT dbv; + if(!DBGetContactSetting(NULL, PlugName, "password", &dbv)) { + g_settings.password = dbv.pszVal; + DBFreeVariant(&dbv); + } + + if(!DBGetContactSetting(NULL, PlugName, "log_filename", &dbv)) { + g_settings.log_filename = dbv.pszVal; + DBFreeVariant(&dbv); + } + else + g_settings.log_filename = g_mirandaDir + "\\"+LOG_ID+".log"; +} + +int OptionsInitialize(WPARAM wParam, LPARAM lParam) +{ + OPTIONSDIALOGPAGE odp = { sizeof(odp) }; + odp.pszTemplate = MAKEINTRESOURCEA(NA_OPTIONS); + odp.pfnDlgProc = DlgProcOpts; + odp.pszTitle = "Notify Anything"; + odp.pszGroup = Translate("Plugins"); + odp.position = 100000000; + odp.hInstance = hInst; + odp.groupPosition = 910000000; + odp.flags = ODPF_BOLDGROUPS; + Options_AddPage(wParam, &odp); + return 0; +} -- cgit v1.2.3