summaryrefslogtreecommitdiff
path: root/frontends/windows/prefs.c
diff options
context:
space:
mode:
Diffstat (limited to 'frontends/windows/prefs.c')
-rw-r--r--frontends/windows/prefs.c680
1 files changed, 680 insertions, 0 deletions
diff --git a/frontends/windows/prefs.c b/frontends/windows/prefs.c
new file mode 100644
index 000000000..adc0101a7
--- /dev/null
+++ b/frontends/windows/prefs.c
@@ -0,0 +1,680 @@
+/*
+ * Copyright 2009 Mark Benjamin <netsurf-browser.org.MarkBenjamin@dfgh.net>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf 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; version 2 of the License.
+ *
+ * NetSurf 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "utils/config.h"
+
+#include <windows.h>
+#include <commctrl.h>
+
+#include "utils/nsoption.h"
+#include "utils/log.h"
+#include "utils/messages.h"
+#include "utils/utils.h"
+#include "windows/gui.h"
+#include "windows/prefs.h"
+#include "windows/resourceid.h"
+#include "windows/windbg.h"
+
+#define NSWS_PREFS_WINDOW_WIDTH 600
+#define NSWS_PREFS_WINDOW_HEIGHT 400
+
+static CHOOSEFONT *nsws_prefs_font_prepare(int fontfamily, HWND parent)
+{
+ CHOOSEFONT *cf = malloc(sizeof(CHOOSEFONT));
+ if (cf == NULL) {
+ win32_warning(messages_get("NoMemory"),0);
+ return NULL;
+ }
+ LOGFONT *lf = malloc(sizeof(LOGFONT));
+ if (lf == NULL) {
+ win32_warning(messages_get("NoMemory"),0);
+ free(cf);
+ return NULL;
+ }
+ switch(fontfamily) {
+ case FF_ROMAN:
+ snprintf(lf->lfFaceName, LF_FACESIZE, "%s",
+ nsoption_charp(font_serif));
+ break;
+ case FF_MODERN:
+ snprintf(lf->lfFaceName, LF_FACESIZE, "%s",
+ nsoption_charp(font_mono));
+ break;
+ case FF_SCRIPT:
+ snprintf(lf->lfFaceName, LF_FACESIZE, "%s",
+ nsoption_charp(font_cursive));
+ break;
+ case FF_DECORATIVE:
+ snprintf(lf->lfFaceName, LF_FACESIZE, "%s",
+ nsoption_charp(font_fantasy));
+ break;
+ case FF_SWISS:
+ default:
+ snprintf(lf->lfFaceName, LF_FACESIZE, "%s",
+ nsoption_charp(font_sans));
+ break;
+ }
+
+ cf->lStructSize = sizeof(CHOOSEFONT);
+ cf->hwndOwner = parent;
+ cf->lpLogFont = lf;
+ cf->Flags = CF_SCREENFONTS | CF_INITTOLOGFONTSTRUCT | CF_LIMITSIZE;
+ cf->nSizeMin = 16;
+ cf->nSizeMax = 24;
+
+ return cf;
+}
+
+static void change_spinner(HWND sub, double change, double minval, double maxval)
+{
+ char *temp, number[6];
+ int len;
+ double value = 0;
+
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+
+ if (temp == NULL)
+ return;
+
+ SendMessage(sub, WM_GETTEXT, (WPARAM)(len + 1), (LPARAM) temp);
+
+ value = strtod(temp, NULL) - change;
+
+ free(temp);
+ value = max(value, minval);
+ value = min(value, maxval);
+
+ if ((change == 1.0) || (change == -1.0))
+ snprintf(number, 6, "%.0f", value);
+ else
+ snprintf(number, 6, "%.1f", value);
+
+ SendMessage(sub, WM_SETTEXT, 0, (LPARAM)number);
+}
+
+
+static BOOL CALLBACK options_appearance_dialog_handler(HWND hwnd,
+ UINT msg, WPARAM wparam, LPARAM lParam)
+{
+ int len;
+ char *temp, number[6];
+ HWND sub;
+
+ LOG_WIN_MSG(hwnd, msg, wparam, lParam);
+
+ switch (msg) {
+ case WM_INITDIALOG:
+ sub = GetDlgItem(hwnd, IDC_PREFS_FONTDEF);
+ SendMessage(sub, CB_ADDSTRING, 0, (LPARAM)"Sans serif");
+ SendMessage(sub, CB_ADDSTRING, 0, (LPARAM)"Serif");
+ SendMessage(sub, CB_ADDSTRING, 0, (LPARAM)"Monospace");
+ SendMessage(sub, CB_ADDSTRING, 0, (LPARAM)"Cursive");
+ SendMessage(sub, CB_ADDSTRING, 0, (LPARAM)"Fantasy");
+ SendMessage(sub, CB_SETCURSEL,
+ (WPARAM) (nsoption_int(font_default) - 1), 0);
+
+ if ((nsoption_charp(font_sans) != NULL) &&
+ (nsoption_charp(font_sans)[0] != '\0')) {
+ sub = GetDlgItem(hwnd, IDC_PREFS_SANS);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)nsoption_charp(font_sans));
+ }
+ if ((nsoption_charp(font_serif) != NULL) &&
+ (nsoption_charp(font_serif)[0] != '\0')) {
+ sub = GetDlgItem(hwnd, IDC_PREFS_SERIF);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)nsoption_charp(font_serif));
+ }
+ if ((nsoption_charp(font_mono) != NULL) &&
+ (nsoption_charp(font_mono)[0] != '\0')) {
+ sub = GetDlgItem(hwnd, IDC_PREFS_MONO);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)nsoption_charp(font_mono));
+ }
+ if ((nsoption_charp(font_cursive) != NULL) &&
+ (nsoption_charp(font_cursive)[0] != '\0')) {
+ sub = GetDlgItem(hwnd, IDC_PREFS_CURSIVE);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)nsoption_charp(font_cursive));
+ }
+ if ((nsoption_charp(font_fantasy) != NULL) &&
+ (nsoption_charp(font_fantasy)[0] != '\0')) {
+ sub = GetDlgItem(hwnd, IDC_PREFS_FANTASY);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)nsoption_charp(font_fantasy));
+ }
+ if (nsoption_int(font_min_size) != 0) {
+ sub = GetDlgItem(hwnd, IDC_PREFS_FONT_MINSIZE);
+ snprintf(number, 6, "%.1f", nsoption_int(font_min_size) / 10.0);
+ SendMessage(sub, WM_SETTEXT, 0, (LPARAM)number);
+ }
+ if (nsoption_int(font_size) != 0) {
+ sub = GetDlgItem(hwnd, IDC_PREFS_FONT_SIZE);
+ snprintf(number, 6, "%.1f", nsoption_int(font_size) / 10.0);
+ SendMessage(sub, WM_SETTEXT, 0, (LPARAM)number);
+ }
+ if (nsoption_int(max_fetchers) != 0) {
+ sub = GetDlgItem(hwnd, IDC_PREFS_FETCHERS);
+ snprintf(number, 6, "%d", nsoption_int(max_fetchers));
+ SendMessage(sub, WM_SETTEXT, 0, (LPARAM)number);
+ }
+ if (nsoption_int(max_fetchers_per_host) != 0) {
+ sub = GetDlgItem(hwnd, IDC_PREFS_FETCH_HOST);
+ snprintf(number, 6, "%d",
+ nsoption_int(max_fetchers_per_host));
+ SendMessage(sub, WM_SETTEXT, 0, (LPARAM)number);
+ }
+ if (nsoption_int(max_cached_fetch_handles) != 0) {
+ sub = GetDlgItem(hwnd, IDC_PREFS_FETCH_HANDLES);
+ snprintf(number, 6, "%d",
+ nsoption_int(max_cached_fetch_handles));
+ SendMessage(sub, WM_SETTEXT, 0, (LPARAM)number);
+ }
+
+
+ /* animation */
+ sub = GetDlgItem(hwnd, IDC_PREFS_NOANIMATION);
+ SendMessage(sub, BM_SETCHECK, (WPARAM)((nsoption_bool(animate_images))
+ ? BST_UNCHECKED : BST_CHECKED), 0);
+
+ if (nsoption_int(minimum_gif_delay) != 0) {
+ sub = GetDlgItem(hwnd, IDC_PREFS_ANIMATIONDELAY);
+ snprintf(number, 6, "%.1f", nsoption_int(minimum_gif_delay) /
+ 100.0);
+ SendMessage(sub, WM_SETTEXT, 0, (LPARAM)number);
+ }
+ break;
+
+ case WM_NOTIFY:
+ switch (((NMHDR FAR *)lParam)->code) {
+ case PSN_APPLY:
+ sub = GetDlgItem(hwnd, IDC_PREFS_FONT_SIZE);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp != NULL) {
+ SendMessage(sub, WM_GETTEXT, (WPARAM)
+ (len + 1), (LPARAM) temp);
+ nsoption_int(font_size) = (int)
+ (10 * strtod(temp, NULL));
+ free(temp);
+ }
+
+ sub = GetDlgItem(hwnd, IDC_PREFS_FONT_MINSIZE);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp != NULL) {
+ SendMessage(sub, WM_GETTEXT, (WPARAM)
+ (len + 1), (LPARAM) temp);
+ nsoption_set_int(font_min_size,
+ (int)(10 * strtod(temp, NULL)));
+ free(temp);
+ }
+
+ /* animation */
+ nsoption_set_bool(animate_images,
+ (IsDlgButtonChecked(hwnd, IDC_PREFS_NOANIMATION) == BST_CHECKED) ? true : false);
+
+
+ sub = GetDlgItem(hwnd, IDC_PREFS_ANIMATIONDELAY);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp != NULL) {
+ SendMessage(sub, WM_GETTEXT, (WPARAM)
+ (len + 1), (LPARAM) temp);
+ nsoption_set_int(minimum_gif_delay,
+ (int)(100 * strtod(temp, NULL)));
+ free(temp);
+ }
+
+ break;
+
+ case UDN_DELTAPOS: {
+ NMUPDOWN *ud = (NMUPDOWN *)lParam;
+ switch(((NMHDR *)lParam)->idFrom) {
+ case IDC_PREFS_FONT_SIZE_SPIN:
+ change_spinner(GetDlgItem(hwnd, IDC_PREFS_FONT_SIZE), 0.1 * ud->iDelta, 1.0, 50.0);
+ return TRUE;
+
+ case IDC_PREFS_FONT_MINSIZE_SPIN:
+ change_spinner(GetDlgItem(hwnd, IDC_PREFS_FONT_MINSIZE), 0.1 * ud->iDelta, 1.0, 50.0);
+ return TRUE;
+
+ case IDC_PREFS_ANIMATIONDELAY_SPIN:
+ change_spinner(GetDlgItem(hwnd, IDC_PREFS_ANIMATIONDELAY), 0.1 * ud->iDelta, 0.1, 100.0);
+ return TRUE;
+
+ }
+ }
+ break;
+ }
+
+
+ case WM_COMMAND:
+ LOG("WM_COMMAND Identifier 0x%x",LOWORD(wparam));
+
+ switch(LOWORD(wparam)) {
+ case IDC_PREFS_PROXYTYPE:
+ sub = GetDlgItem(hwnd, IDC_PREFS_PROXYTYPE);
+ nsoption_set_int(http_proxy_auth,
+ SendMessage(sub, CB_GETCURSEL, 0, 0) - 1);
+ nsoption_set_bool(http_proxy,
+ (nsoption_int(http_proxy_auth) != -1));
+ nsoption_set_int(http_proxy_auth,
+ nsoption_int(http_proxy_auth) +
+ (nsoption_bool(http_proxy)) ? 0 : 1);
+ break;
+
+ case IDC_PREFS_SANS: {
+ CHOOSEFONT *cf = nsws_prefs_font_prepare(FF_SWISS, hwnd);
+ if (cf == NULL) {
+ break;
+ }
+
+ if (ChooseFont(cf) == TRUE) {
+ nsoption_set_charp(font_sans,
+ strdup(cf->lpLogFont->lfFaceName));
+ }
+
+ free(cf->lpLogFont);
+ free(cf);
+ if ((nsoption_charp(font_sans) != NULL) &&
+ (nsoption_charp(font_sans)[0] != '\0')) {
+ sub = GetDlgItem(hwnd, IDC_PREFS_SANS);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)nsoption_charp(font_sans));
+ }
+ break;
+ }
+
+ case IDC_PREFS_SERIF: {
+ CHOOSEFONT *cf = nsws_prefs_font_prepare(FF_ROMAN, hwnd);
+ if (cf == NULL) {
+ break;
+ }
+
+ if (ChooseFont(cf) == TRUE) {
+ nsoption_set_charp(font_serif,
+ strdup(cf->lpLogFont->lfFaceName));
+ }
+
+ free(cf->lpLogFont);
+ free(cf);
+ if ((nsoption_charp(font_serif) != NULL) &&
+ (nsoption_charp(font_serif)[0] != '\0')) {
+ sub = GetDlgItem(hwnd, IDC_PREFS_SERIF);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)nsoption_charp(font_serif));
+ }
+ break;
+ }
+
+ case IDC_PREFS_MONO: {
+ CHOOSEFONT *cf = nsws_prefs_font_prepare(FF_MODERN, hwnd);
+ if (cf == NULL) {
+ break;
+ }
+
+ if (ChooseFont(cf) == TRUE) {
+ nsoption_set_charp(font_mono,
+ strdup(cf->lpLogFont->lfFaceName));
+ }
+
+ free(cf->lpLogFont);
+ free(cf);
+
+ if ((nsoption_charp(font_mono) != NULL) &&
+ (nsoption_charp(font_mono)[0] != '\0')) {
+ sub = GetDlgItem(hwnd, IDC_PREFS_MONO);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)nsoption_charp(font_mono));
+ }
+ break;
+ }
+
+ case IDC_PREFS_CURSIVE: {
+ CHOOSEFONT *cf = nsws_prefs_font_prepare(FF_SCRIPT, hwnd);
+ if (cf == NULL) {
+ break;
+ }
+
+ if (ChooseFont(cf) == TRUE) {
+ nsoption_set_charp(font_cursive,
+ strdup(cf->lpLogFont->lfFaceName));
+ }
+ free(cf->lpLogFont);
+ free(cf);
+ if ((nsoption_charp(font_cursive) != NULL) &&
+ (nsoption_charp(font_cursive)[0] != '\0')) {
+ sub = GetDlgItem(hwnd, IDC_PREFS_CURSIVE);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)nsoption_charp(font_cursive));
+ }
+ break;
+ }
+
+ case IDC_PREFS_FANTASY: {
+ CHOOSEFONT *cf = nsws_prefs_font_prepare(FF_DECORATIVE, hwnd);
+ if (cf == NULL) {
+ break;
+ }
+
+ if (ChooseFont(cf) == TRUE) {
+ nsoption_set_charp(font_fantasy,
+ strdup(cf->lpLogFont->lfFaceName));
+ }
+ free(cf->lpLogFont);
+ free(cf);
+ if ((nsoption_charp(font_fantasy) != NULL) &&
+ (nsoption_charp(font_fantasy)[0] != '\0')) {
+ sub = GetDlgItem(hwnd, IDC_PREFS_FANTASY);
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)nsoption_charp(font_fantasy));
+ }
+ break;
+ }
+
+ case IDC_PREFS_FONTDEF:
+ sub = GetDlgItem(hwnd, IDC_PREFS_FONTDEF);
+ nsoption_set_int(font_default,
+ SendMessage(sub, CB_GETCURSEL, 0, 0) + 1);
+ break;
+
+ }
+ break;
+
+ }
+ return FALSE;
+}
+
+static BOOL CALLBACK options_connections_dialog_handler(HWND hwnd,
+ UINT msg, WPARAM wparam, LPARAM lParam)
+{
+ int len;
+ char *temp, number[6];
+ HWND sub;
+
+ LOG_WIN_MSG(hwnd, msg, wparam, lParam);
+
+ switch (msg) {
+ case WM_INITDIALOG:
+ sub = GetDlgItem(hwnd, IDC_PREFS_PROXYTYPE);
+ SendMessage(sub, CB_ADDSTRING, 0, (LPARAM)"None");
+ SendMessage(sub, CB_ADDSTRING, 0, (LPARAM)"Simple");
+ SendMessage(sub, CB_ADDSTRING, 0, (LPARAM)"Basic Auth");
+ SendMessage(sub, CB_ADDSTRING, 0, (LPARAM)"NTLM Auth");
+ if (nsoption_bool(http_proxy)) {
+ SendMessage(sub, CB_SETCURSEL, (WPARAM)
+ (nsoption_int(http_proxy_auth) + 1), 0);
+ } else {
+ SendMessage(sub, CB_SETCURSEL, 0, 0);
+ }
+
+ sub = GetDlgItem(hwnd, IDC_PREFS_PROXYHOST);
+ if ((nsoption_charp(http_proxy_host) != NULL) &&
+ (nsoption_charp(http_proxy_host)[0] != '\0'))
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)nsoption_charp(http_proxy_host));
+
+ sub = GetDlgItem(hwnd, IDC_PREFS_PROXYPORT);
+ if (nsoption_int(http_proxy_port) != 0) {
+ snprintf(number, 6, "%d", nsoption_int(http_proxy_port));
+ SendMessage(sub, WM_SETTEXT, 0, (LPARAM)number);
+ }
+
+ sub = GetDlgItem(hwnd, IDC_PREFS_PROXYNAME);
+ if ((nsoption_charp(http_proxy_auth_user) != NULL) &&
+ (nsoption_charp(http_proxy_auth_user)[0] != '\0'))
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)nsoption_charp(http_proxy_auth_user));
+
+ sub = GetDlgItem(hwnd, IDC_PREFS_PROXYPASS);
+ if ((nsoption_charp(http_proxy_auth_pass) != NULL) &&
+ (nsoption_charp(http_proxy_auth_pass)[0] != '\0'))
+ SendMessage(sub, WM_SETTEXT, 0,
+ (LPARAM)nsoption_charp(http_proxy_auth_pass));
+
+ sub = GetDlgItem(hwnd, IDC_PREFS_FETCHERS);
+ snprintf(number, 6, "%d", nsoption_int(max_fetchers));
+ SendMessage(sub, WM_SETTEXT, 0, (LPARAM)number);
+
+ sub = GetDlgItem(hwnd, IDC_PREFS_FETCH_HOST);
+ snprintf(number, 6, "%d", nsoption_int(max_fetchers_per_host));
+ SendMessage(sub, WM_SETTEXT, 0, (LPARAM)number);
+
+ sub = GetDlgItem(hwnd, IDC_PREFS_FETCH_HANDLES);
+ snprintf(number, 6, "%d", nsoption_int(max_cached_fetch_handles));
+ SendMessage(sub, WM_SETTEXT, 0, (LPARAM)number);
+
+ break;
+
+ case WM_NOTIFY:
+ switch (((NMHDR FAR *)lParam)->code) {
+ case PSN_APPLY:
+ sub = GetDlgItem(hwnd, IDC_PREFS_PROXYHOST);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp != NULL) {
+ SendMessage(sub, WM_GETTEXT, (WPARAM)(len + 1),
+ (LPARAM)temp);
+ nsoption_set_charp(http_proxy_host, strdup(temp));
+ free(temp);
+ }
+
+ sub = GetDlgItem(hwnd, IDC_PREFS_PROXYPORT);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp != NULL) {
+ SendMessage(sub, WM_GETTEXT, (WPARAM)(len + 1),
+ (LPARAM)temp);
+ nsoption_set_int(http_proxy_port, atoi(temp));
+ free(temp);
+ }
+
+ sub = GetDlgItem(hwnd, IDC_PREFS_PROXYNAME);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp != NULL) {
+ SendMessage(sub, WM_GETTEXT, (WPARAM)(len + 1),
+ (LPARAM)temp);
+ nsoption_set_charp(http_proxy_auth_user, strdup(temp));
+ free(temp);
+ }
+
+ sub = GetDlgItem(hwnd, IDC_PREFS_PROXYPASS);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp != NULL) {
+ SendMessage(sub, WM_GETTEXT, (WPARAM)(len + 1),
+ (LPARAM)temp);
+ nsoption_set_charp(http_proxy_auth_pass, strdup(temp));
+ free(temp);
+ }
+
+ /* fetchers */
+ sub = GetDlgItem(hwnd, IDC_PREFS_FETCHERS);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp != NULL) {
+ SendMessage(sub, WM_GETTEXT, (WPARAM)(len + 1),
+ (LPARAM)temp);
+ nsoption_set_int(max_fetchers, atoi(temp));
+ free(temp);
+ }
+
+ sub = GetDlgItem(hwnd, IDC_PREFS_FETCH_HOST);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp != NULL) {
+ SendMessage(sub, WM_GETTEXT, (WPARAM)(len + 1),
+ (LPARAM)temp);
+ nsoption_set_int(max_fetchers_per_host, atoi(temp));
+ free(temp);
+ }
+
+ sub = GetDlgItem(hwnd, IDC_PREFS_FETCH_HANDLES);
+ len = SendMessage(sub, WM_GETTEXTLENGTH, 0, 0);
+ temp = malloc(len + 1);
+ if (temp != NULL) {
+ SendMessage(sub, WM_GETTEXT, (WPARAM)(len + 1),
+ (LPARAM)temp);
+ nsoption_set_int(max_cached_fetch_handles, atoi(temp));
+ free(temp);
+ }
+ break;
+
+ case UDN_DELTAPOS: {
+ NMUPDOWN *ud = (NMUPDOWN *)lParam;
+ switch(((NMHDR *)lParam)->idFrom) {
+ case IDC_PREFS_FETCHERS_SPIN:
+ change_spinner(GetDlgItem(hwnd, IDC_PREFS_FETCHERS), 1.0 * ud->iDelta, 1.0, 100.0);
+ return TRUE;
+
+ case IDC_PREFS_FETCH_HOST_SPIN:
+ change_spinner(GetDlgItem(hwnd, IDC_PREFS_FETCH_HOST), 1.0 * ud->iDelta, 1.0, 100.0);
+ return TRUE;
+
+ case IDC_PREFS_FETCH_HANDLES_SPIN:
+ change_spinner(GetDlgItem(hwnd, IDC_PREFS_FETCH_HANDLES), 1.0 * ud->iDelta, 1.0, 100.0);
+ return TRUE;
+
+ }
+ }
+ break;
+ }
+ }
+ return FALSE;
+}
+
+static BOOL CALLBACK options_general_dialog_handler(HWND hwnd,
+ UINT msg, WPARAM wparam, LPARAM lParam)
+{
+ HWND sub;
+
+ LOG_WIN_MSG(hwnd, msg, wparam, lParam);
+
+ switch (msg) {
+ case WM_INITDIALOG:
+ /* homepage url */
+ sub = GetDlgItem(hwnd, IDC_PREFS_HOMEPAGE);
+ SendMessage(sub, WM_SETTEXT, 0, (LPARAM)nsoption_charp(homepage_url));
+
+ /* Display images */
+ sub = GetDlgItem(hwnd, IDC_PREFS_IMAGES);
+ SendMessage(sub, BM_SETCHECK,
+ (WPARAM) ((nsoption_bool(suppress_images)) ?
+ BST_CHECKED : BST_UNCHECKED), 0);
+
+ /* advert blocking */
+ sub = GetDlgItem(hwnd, IDC_PREFS_ADVERTS);
+ SendMessage(sub, BM_SETCHECK,
+ (WPARAM) ((nsoption_bool(block_advertisements)) ?
+ BST_CHECKED : BST_UNCHECKED), 0);
+
+ /* Referrer sending */
+ sub = GetDlgItem(hwnd, IDC_PREFS_REFERER);
+ SendMessage(sub, BM_SETCHECK,
+ (WPARAM)((nsoption_bool(send_referer)) ?
+ BST_CHECKED : BST_UNCHECKED), 0);
+ break;
+
+ case WM_NOTIFY:
+ switch (((NMHDR FAR *)lParam)->code) {
+ case PSN_APPLY:
+ /* homepage */
+ sub = GetDlgItem(hwnd, IDC_PREFS_HOMEPAGE);
+ if (sub != NULL) {
+ int text_length;
+ char *text;
+ text_length = SendMessage(sub,
+ WM_GETTEXTLENGTH, 0, 0);
+ text = malloc(text_length + 1);
+ if (text != NULL) {
+ SendMessage(sub, WM_GETTEXT,
+ (WPARAM)text_length + 1,
+ (LPARAM)text);
+ nsoption_set_charp(homepage_url, text);
+ }
+ }
+
+ nsoption_set_bool(suppress_images,
+ (IsDlgButtonChecked(hwnd, IDC_PREFS_IMAGES) == BST_CHECKED) ? true : false);
+
+ nsoption_set_bool(block_advertisements, (IsDlgButtonChecked(hwnd,
+ IDC_PREFS_ADVERTS) == BST_CHECKED) ? true : false);
+
+ nsoption_set_bool(send_referer, (IsDlgButtonChecked(hwnd,
+ IDC_PREFS_REFERER) == BST_CHECKED) ? true : false);
+
+ break;
+
+ }
+ }
+ return FALSE;
+}
+
+void nsws_prefs_dialog_init(HINSTANCE hinst, HWND parent)
+{
+ int ret;
+ PROPSHEETPAGE psp[3];
+ PROPSHEETHEADER psh;
+
+ psp[0].dwSize = sizeof(PROPSHEETPAGE);
+ psp[0].dwFlags = 0;/*PSP_USEICONID*/
+ psp[0].hInstance = hinst;
+ psp[0].pszTemplate = MAKEINTRESOURCE(IDD_DLG_OPTIONS_GENERAL);
+ psp[0].pfnDlgProc = options_general_dialog_handler;
+ psp[0].lParam = 0;
+ psp[0].pfnCallback = NULL;
+
+ psp[1].dwSize = sizeof(PROPSHEETPAGE);
+ psp[1].dwFlags = 0;/*PSP_USEICONID*/
+ psp[1].hInstance = hinst;
+ psp[1].pszTemplate = MAKEINTRESOURCE(IDD_DLG_OPTIONS_CONNECTIONS);
+ psp[1].pfnDlgProc = options_connections_dialog_handler;
+ psp[1].lParam = 0;
+ psp[1].pfnCallback = NULL;
+
+ psp[2].dwSize = sizeof(PROPSHEETPAGE);
+ psp[2].dwFlags = 0;/*PSP_USEICONID*/
+ psp[2].hInstance = hinst;
+ psp[2].pszTemplate = MAKEINTRESOURCE(IDD_DLG_OPTIONS_APPERANCE);
+ psp[2].pfnDlgProc = options_appearance_dialog_handler;
+ psp[2].lParam = 0;
+ psp[2].pfnCallback = NULL;
+
+
+ psh.dwSize = sizeof(PROPSHEETHEADER);
+ psh.dwFlags = PSH_NOAPPLYNOW | PSH_USEICONID | PSH_PROPSHEETPAGE;
+ psh.hwndParent = parent;
+ psh.hInstance = hinst;
+ psh.pszIcon = MAKEINTRESOURCE(IDR_NETSURF_ICON);
+ psh.pszCaption = (LPSTR) "NetSurf Options";
+ psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
+ psh.nStartPage = 0;
+ psh.ppsp = (LPCPROPSHEETPAGE) &psp;
+ psh.pfnCallback = NULL;
+
+ ret = PropertySheet(&psh);
+ if (ret == -1) {
+ win_perror("PropertySheet");
+ } else if (ret > 0) {
+ /* user saved changes */
+ nsoption_write(options_file_location, NULL, NULL);
+ }
+}