/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * The contents of this file are subject to the Netscape Public License * Version 1.0 (the "NPL"); you may not use this file except in * compliance with the NPL. You may obtain a copy of the NPL at * http://www.mozilla.org/NPL/ * * Software distributed under the NPL is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL * for the specific language governing rights and limitations under the * NPL. * * The Initial Developer of this code under the NPL is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All Rights * Reserved. */ /* PrefsDialogGeneral.cpp -- the General page in XFE preferences dialogs Created: Linda Wei , 17-Sep-96. */ #include "Frame.h" #include "felocale.h" #include "structs.h" #include "fonts.h" #include "xpassert.h" #include "MozillaApp.h" #include "View.h" #include "prprf.h" #include "net.h" #include "libmocha.h" #ifdef JAVA #include "java.h" #endif #include "PrefsDialogAppl.h" #include "PrefsProxiesView.h" #include "PrefsApplEdit.h" #include "Netcaster.h" #include "PrefsDialog.h" #include "ColorDialog.h" #include "ViewGlue.h" #include "e_kit.h" #include "prefapi.h" #include "nf.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "Netcaster.h" #define DEFAULT_COLUMN_WIDTH 35 #define MAX_COLUMN_WIDTH 100 #define DEF_COLOR_BUTTON_WIDTH 40 #define DEF_COLOR_BUTTON_HEIGHT 20 extern int XFE_HELPERS_LIST_HEADER; extern int XFE_PRIVATE_MIMETYPE_RELOAD; extern int XFE_PRIVATE_MAILCAP_RELOAD; extern int XFE_PRIVATE_RELOADED_MIMETYPE; extern int XFE_PRIVATE_RELOADED_MAILCAP; extern int XFE_HELPERS_NETSCAPE; extern int XFE_HELPERS_UNKNOWN; extern int XFE_HELPERS_SAVE; extern int XFE_HELPERS_PLUGIN; extern int XFE_OUT_OF_MEMORY_URL; extern int XFE_HELPERS_CANNOT_DEL_STATIC_APPS; extern int XFE_PREFS_RESTART_FOR_FONT_CHANGES; extern "C" { void GH_ClearGlobalHistory(void); void NET_CleanupFileFormat(char *filename); void NET_CleanupMailCapList(char* filename); void NET_ReloadProxyConfig(MWContext *window_id); void NET_SelectProxyStyle(NET_ProxyStyle style); void NET_SetCacheUseMethod(CacheUseEnum method); void NET_SetDiskCacheSize(int32 new_size); void NET_SetMemoryCacheSize(int32 new_size); void NET_SetProxyServer(NET_ProxyType type, const char *org_host_port); char *XP_GetString(int i); void fe_browse_file_of_text(MWContext *context, Widget text_field, Boolean dirp); void fe_browse_file_of_text_in_url(MWContext *context, Widget text_field, Boolean dirp); void fe_installGeneralAppearance(); void fe_installGeneral(); void fe_installGeneralFonts(); void fe_installGeneralColors(); void fe_installGeneralAdvanced(); void fe_installGeneralAppl(); void fe_installGeneralCache(); void fe_installGeneralProxies(); void fe_installBrowserAppl(); void fe_installDiskSpace(); void fe_SwatchSetColor(Widget widget, LO_Color* color); XP_Bool fe_IsCalendarInstalled(); XP_Bool fe_IsConferenceInstalled(); static void fe_InvalidateFontData(void); static void prefsGeneralFontsCb_fontFamily(Widget, XtPointer, XtPointer); static void prefsGeneralFontsCb_fontSize(Widget, XtPointer, XtPointer); static void fe_set_new_font_sizes(PrefsDataGeneralFonts *, fe_FontPitch *); static void fe_set_new_font_families(PrefsDataGeneralFonts *, fe_FontPitch *, Widget, Widget); static void fe_get_scaled_font_size(PrefsDataGeneralFonts *fep); static Boolean xfe_is_asian_encoding(int); } // ************************************************************************ // ************************* Appearance ************************* // ************************************************************************ // Member: XFE_PrefsPageGeneralAppearance // Description: Constructor // Inputs: // Side effects: XFE_PrefsPageGeneralAppearance::XFE_PrefsPageGeneralAppearance(XFE_PrefsDialog *dialog) : XFE_PrefsPage(dialog), m_prefsDataGeneralAppearance(0), m_toolbar_needs_updating(FALSE) { m_toolbar_needs_updating = FALSE; } // Member: ~XFE_PrefsPageGeneralAppearance // Description: Destructor // Inputs: // Side effects: XFE_PrefsPageGeneralAppearance::~XFE_PrefsPageGeneralAppearance() { delete m_prefsDataGeneralAppearance; } // Member: create // Description: Creates page for GeneralAppearance // Inputs: // Side effects: void XFE_PrefsPageGeneralAppearance::create() { Widget kids[100]; Arg av[50]; int ac; int i; PrefsDataGeneralAppearance *fep = NULL; fep = new PrefsDataGeneralAppearance; memset(fep, 0, sizeof(PrefsDataGeneralAppearance)); m_prefsDataGeneralAppearance = fep; fep->context = getContext(); fep->prompt_dialog = getPrefsDialog()->getDialogChrome(); Widget form; ac = 0; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; form = XmCreateForm (m_wPageForm, "appearance", av, ac); XtManageChild (form); m_wPage = fep->page = form; // Launch on startup Widget frame1; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_NONE); ac++; frame1 = XmCreateFrame (form, "launchFrame", av, ac); Widget form1; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; form1 = XmCreateForm (frame1, "launchBox", av, ac); Widget label1; ac = 0; XtSetArg (av [ac], XmNchildType, XmFRAME_TITLE_CHILD); ac++; label1 = XmCreateLabelGadget (frame1, "launchBoxLabel", av, ac); // we have the following possible toggle buttons: // widget define's required fe_* calls may say not installed? // ------ ----------------- --------------------------------- // navigator no // composer EDITOR no // netcaster yes // messenger MOZ_MAIL_NEWS no // collabra MOZ_MAIL_NEWS no // conference MOZ_MAIL_NEWS yes // calendar MOZ_MAIL_NEWS yes Widget navigator_toggle; #ifdef EDITOR Widget composer_toggle; #endif Widget netcaster_toggle = 0; #ifdef MOZ_MAIL_NEWS Widget messenger_toggle; Widget collabra_toggle; Widget conference_toggle = 0; Widget calendar_toggle = 0; #endif // MOZ_MAIL_NEWS Widget widget_above; ac = 0; i = 0; kids[i++] = navigator_toggle = XmCreateToggleButtonGadget (form1, "navigator", av, ac); #ifdef EDITOR kids[i++] = composer_toggle = XmCreateToggleButtonGadget (form1, "composer", av, ac); #endif if (fe_IsNetcasterInstalled()) { kids[i++] = netcaster_toggle = XmCreateToggleButtonGadget (form1, "netcaster", av, ac); } #ifdef MOZ_MAIL_NEWS kids[i++] = messenger_toggle = XmCreateToggleButtonGadget (form1, "messenger", av, ac); kids[i++] = collabra_toggle = XmCreateToggleButtonGadget (form1, "collabra", av, ac); if (fe_IsConferenceInstalled()) { kids[i++] = conference_toggle = XmCreateToggleButtonGadget (form1, "conference", av, ac); } if (fe_IsCalendarInstalled()) { kids[i++] = calendar_toggle = XmCreateToggleButtonGadget (form1, "calendar", av, ac); } #endif // MOZ_MAIL_NEWS fep->navigator_toggle = navigator_toggle; #ifdef EDITOR fep->composer_toggle = composer_toggle; #endif fep->netcaster_toggle = netcaster_toggle; #ifdef MOZ_MAIL_NEWS fep->messenger_toggle = messenger_toggle; fep->collabra_toggle = collabra_toggle; fep->conference_toggle = conference_toggle; fep->calendar_toggle = calendar_toggle; #endif // MOZ_MAIL_NEWS // attempt a layout like this: // Navigator Messenger // Composer Collabra // Netcaster Conference // Calendar // with things shifting appropriately if various components // are missing. XtVaSetValues (navigator_toggle, XmNindicatorType, XmN_OF_MANY, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNrightAttachment, XmATTACH_NONE, 0); widget_above = navigator_toggle; #ifdef EDITOR XtVaSetValues (composer_toggle, XmNindicatorType, XmN_OF_MANY, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, widget_above, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, 0); widget_above = composer_toggle; #endif if (netcaster_toggle) { XtVaSetValues (netcaster_toggle, XmNindicatorType, XmN_OF_MANY, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, widget_above, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, 0); } #ifdef MOZ_MAIL_NEWS XtVaSetValues (messenger_toggle, XmNindicatorType, XmN_OF_MANY, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, navigator_toggle, XmNrightAttachment, XmATTACH_NONE, 0); widget_above = messenger_toggle; XtVaSetValues (collabra_toggle, XmNindicatorType, XmN_OF_MANY, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, widget_above, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, navigator_toggle, XmNrightAttachment, XmATTACH_NONE, 0); widget_above = collabra_toggle; if (conference_toggle) { XtVaSetValues (conference_toggle, XmNindicatorType, XmN_OF_MANY, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, widget_above, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, navigator_toggle, XmNrightAttachment, XmATTACH_NONE, 0); widget_above = conference_toggle; } if (netcaster_toggle) { XtVaSetValues (netcaster_toggle, XmNindicatorType, XmN_OF_MANY, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, widget_above, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, navigator_toggle, XmNrightAttachment, XmATTACH_NONE, 0); widget_above = netcaster_toggle; } if (calendar_toggle) { XtVaSetValues (calendar_toggle, XmNindicatorType, XmN_OF_MANY, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, widget_above, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, navigator_toggle, XmNrightAttachment, XmATTACH_NONE, 0); } #endif // MOZ_MAIL_NEWS XtManageChildren (kids, i); XtManageChild (label1); XtManageChild (form1); // Show Toolbar As Widget frame2; ac = 0; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_WIDGET); ac++; XtSetArg (av [ac], XmNtopWidget, frame1); ac++; XtSetArg (av [ac], XmNtopOffset, 8); ac++; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_NONE); ac++; frame2 = XmCreateFrame (form, "frame2", av, ac); Widget form2; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; form2 = XmCreateForm (frame2, "toolbarBox", av, ac); Widget label2; ac = 0; XtSetArg (av [ac], XmNchildType, XmFRAME_TITLE_CHILD); ac++; label2 = XmCreateLabelGadget (frame2, "toolbarBoxLabel", av, ac); ac = 0; i = 0; kids[i++] = fep->pic_and_text_toggle = XmCreateToggleButtonGadget (form2, "picAndText", av, ac); kids[i++] = fep->pic_only_toggle = XmCreateToggleButtonGadget (form2, "picOnly", av, ac); kids[i++] = fep->text_only_toggle = XmCreateToggleButtonGadget (form2, "textOnly", av, ac); kids[i++] = fep->show_tooltips_toggle = fe_CreateToolTipsDemoToggle (form2, "showTooltips", av, ac); XtVaSetValues (fep->pic_and_text_toggle, XmNindicatorType, XmONE_OF_MANY, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (fep->pic_only_toggle, XmNindicatorType, XmONE_OF_MANY, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, fep->pic_and_text_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, fep->pic_and_text_toggle, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (fep->text_only_toggle, XmNindicatorType, XmONE_OF_MANY, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, fep->pic_only_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, fep->pic_and_text_toggle, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (fep->show_tooltips_toggle, XmNindicatorType, XmN_OF_MANY, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, fep->pic_and_text_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 50, XmNrightAttachment, XmATTACH_NONE, 0); XtManageChildren (kids, i); XtManageChild (label2); XtManageChild (form2); XtManageChild (frame1); XtManageChild (frame2); XtAddCallback (fep->pic_and_text_toggle, XmNvalueChangedCallback, cb_setToolbarAttr, fep); XtAddCallback (fep->pic_only_toggle, XmNvalueChangedCallback, cb_setToolbarAttr, fep); XtAddCallback (fep->text_only_toggle, XmNvalueChangedCallback, cb_setToolbarAttr, fep); setCreated(TRUE); } // Read prefs from PREF backend. void XFE_PrefsPageGeneralAppearance::read() { XP_ASSERT(m_prefsDataGeneralAppearance); PrefsDataGeneralAppearance *fep = m_prefsDataGeneralAppearance; XFE_GlobalPrefs *prefs = &fe_globalPrefs; Boolean sensitive; // Launch on startup XtVaSetValues(fep->navigator_toggle, XmNset, prefs->startup_browser_p, 0); #ifdef EDITOR XtVaSetValues(fep->composer_toggle, XmNset, prefs->startup_editor_p, 0); #endif if (fep->netcaster_toggle) { XtVaSetValues(fep->netcaster_toggle, XmNset, prefs->startup_netcaster_p, 0); } #ifdef MOZ_MAIL_NEWS XtVaSetValues(fep->messenger_toggle, XmNset, prefs->startup_mail_p, 0); XtVaSetValues(fep->collabra_toggle, XmNset, prefs->startup_news_p, 0); if (fep->conference_toggle) { XtVaSetValues(fep->conference_toggle, XmNset, prefs->startup_conference_p, 0); } if (fep->calendar_toggle) { XtVaSetValues(fep->calendar_toggle, XmNset, prefs->startup_calendar_p, 0); } #endif // MOZ_MAIL_NEWS sensitive = !PREF_PrefIsLocked("general.startup.browser"); XtSetSensitive(fep->navigator_toggle, sensitive); #ifdef EDITOR sensitive = !PREF_PrefIsLocked("general.startup.editor"); XtSetSensitive(fep->composer_toggle, sensitive); #endif if (fep->netcaster_toggle) { sensitive = !PREF_PrefIsLocked("general.startup.netcaster"); XtSetSensitive(fep->netcaster_toggle, sensitive); } #ifdef MOZ_MAIL_NEWS sensitive = !PREF_PrefIsLocked("general.startup.mail"); XtSetSensitive(fep->messenger_toggle, sensitive); sensitive = !PREF_PrefIsLocked("general.startup.news"); XtSetSensitive(fep->collabra_toggle, sensitive); if (fep->conference_toggle) { sensitive = !PREF_PrefIsLocked("general.startup.conference"); XtSetSensitive(fep->conference_toggle, sensitive); } if (fep->calendar_toggle) { sensitive = !PREF_PrefIsLocked("general.startup.calendar"); XtSetSensitive(fep->calendar_toggle, sensitive); } #endif // MOZ_MAIL_NEWS // Show toolbar as int32 toolbar_style; PREF_GetIntPref("browser.chrome.toolbar_style", &toolbar_style); XtVaSetValues(fep->pic_and_text_toggle, XmNset, (toolbar_style == BROWSER_TOOLBAR_ICONS_AND_TEXT), 0); XtVaSetValues(fep->pic_only_toggle, XmNset, (toolbar_style == BROWSER_TOOLBAR_ICONS_ONLY), 0); XtVaSetValues(fep->text_only_toggle, XmNset, (toolbar_style == BROWSER_TOOLBAR_TEXT_ONLY), 0); sensitive = !PREF_PrefIsLocked("browser.chrome.toolbar_style"); XtSetSensitive(fep->pic_and_text_toggle, sensitive); XtSetSensitive(fep->pic_only_toggle, sensitive); XtSetSensitive(fep->text_only_toggle, sensitive); XtVaSetValues(fep->show_tooltips_toggle, XmNset, prefs->toolbar_tips_p, 0); sensitive = !PREF_PrefIsLocked("browser.chrome.toolbar_tips"); XtSetSensitive(fep->show_tooltips_toggle, sensitive); // Set it in the Tooltips api XfeTipStringGlobalSetEnabledState(sensitive); setInitialized(TRUE); } // Member: install // Description: // Inputs: // Side effects: void XFE_PrefsPageGeneralAppearance::install() { fe_installGeneralAppearance(); if (m_toolbar_needs_updating) { // Notify whoever is interested in updating toolbar appearance XFE_MozillaApp::theApp()->notifyInterested(XFE_MozillaApp::updateToolbarAppearance); m_toolbar_needs_updating = FALSE; } } // Write prefs UI to PREF backend. void XFE_PrefsPageGeneralAppearance::write() { PrefsDataGeneralAppearance *fep = m_prefsDataGeneralAppearance; Boolean b; XP_ASSERT(fep); // Launch on startup XtVaGetValues(fep->navigator_toggle, XmNset, &b, 0); fe_globalPrefs.startup_browser_p = b; #ifdef EDITOR XtVaGetValues(fep->composer_toggle, XmNset, &b, 0); fe_globalPrefs.startup_editor_p = b; #endif if (fep->netcaster_toggle) { XtVaGetValues(fep->netcaster_toggle, XmNset, &b, 0); fe_globalPrefs.startup_netcaster_p = b; } #ifdef MOZ_MAIL_NEWS XtVaGetValues(fep->messenger_toggle, XmNset, &b, 0); fe_globalPrefs.startup_mail_p = b; XtVaGetValues(fep->collabra_toggle, XmNset, &b, 0); fe_globalPrefs.startup_news_p = b; if (fep->conference_toggle) { XtVaGetValues(fep->conference_toggle, XmNset, &b, 0); fe_globalPrefs.startup_conference_p = b; } if (fep->calendar_toggle) { XtVaGetValues(fep->calendar_toggle, XmNset, &b, 0); fe_globalPrefs.startup_calendar_p = b; } #endif // MOZ_MAIL_NEWS // Show Toolbar as Boolean iconsNtext; Boolean iconsOnly; XtVaGetValues(fep->pic_and_text_toggle, XmNset, &iconsNtext, 0); XtVaGetValues(fep->pic_only_toggle, XmNset, &iconsOnly, 0); int32 new_toolbar_style = (iconsNtext ? BROWSER_TOOLBAR_ICONS_AND_TEXT : (iconsOnly ? BROWSER_TOOLBAR_ICONS_ONLY : BROWSER_TOOLBAR_TEXT_ONLY)); int32 old_toolbar_style; PREF_GetIntPref("browser.chrome.toolbar_style", &old_toolbar_style); if (old_toolbar_style != new_toolbar_style) { PREF_SetIntPref("browser.chrome.toolbar_style", new_toolbar_style); m_toolbar_needs_updating = TRUE; } XtVaGetValues(fep->show_tooltips_toggle, XmNset, &b, 0); fe_globalPrefs.toolbar_tips_p = b; // Globally enable/disable tooltips based on what is set on preferences XfeTipStringGlobalSetEnabledState(b); // Install preferences install(); } // Member: getData // Description: // Inputs: // Side effects: PrefsDataGeneralAppearance *XFE_PrefsPageGeneralAppearance::getData() { return m_prefsDataGeneralAppearance; } void XFE_PrefsPageGeneralAppearance::cb_setToolbarAttr(Widget widget, XtPointer closure, XtPointer call_data) { PrefsDataGeneralAppearance *fep = (PrefsDataGeneralAppearance *)closure; XmToggleButtonCallbackStruct *cb = (XmToggleButtonCallbackStruct *)call_data; if (! cb->set) { XtVaSetValues(widget, XmNset, True, 0); } else if (widget == fep->pic_and_text_toggle) { XtVaSetValues(fep->pic_only_toggle, XmNset, False, 0); XtVaSetValues(fep->text_only_toggle, XmNset, False, 0); } else if (widget == fep->pic_only_toggle) { XtVaSetValues(fep->pic_and_text_toggle, XmNset, False, 0); XtVaSetValues(fep->text_only_toggle, XmNset, False, 0); } else if (widget == fep->text_only_toggle) { XtVaSetValues(fep->pic_and_text_toggle, XmNset, False, 0); XtVaSetValues(fep->pic_only_toggle, XmNset, False, 0); } else abort(); } // ************************************************************************ // ************************* General/Fonts ************************* // ************************************************************************ // Member: XFE_PrefsPageGeneralFonts // Description: Constructor // Inputs: // Side effects: XFE_PrefsPageGeneralFonts::XFE_PrefsPageGeneralFonts(XFE_PrefsDialog *dialog) : XFE_PrefsPage(dialog), m_prefsDataGeneralFonts(0) { } // Member: ~XFE_PrefsPageGeneralFonts // Description: Destructor // Inputs: // Side effects: XFE_PrefsPageGeneralFonts::~XFE_PrefsPageGeneralFonts() { if (m_prefsDataGeneralFonts) XP_FREE(m_prefsDataGeneralFonts->encoding_menu_csid); delete m_prefsDataGeneralFonts; } void XFE_PrefsPageGeneralFonts::relayout(PrefsDataGeneralFonts *fep) { int family_pos, size_pos; int family_label_width, family_width, size_label_width; int toggle_text_height; /* * Layout the encoding widgets * * family label family selector size label size selector * column column column column * * + family_pos * | + size_pos * | | * v v * family_label:family size_label:size_selector * toggle:size_text * */ family_label_width = XfeVaGetWidestWidget(fep->encoding_label, fep->proportional_label, fep->fixed_label, NULL); family_pos = family_label_width; family_width = XfeVaGetWidestWidget(fep->prop_family_option, fep->fixed_family_option, NULL); size_label_width = XfeVaGetWidestWidget(fep->prop_size_label, fep->fixed_size_label, NULL); size_pos = family_pos + family_width + size_label_width; toggle_text_height = XfeVaGetTallestWidget(fep->prop_size_toggle, fep->prop_size_field, NULL); /* * Layout the family labels and family selectors */ /* encoding */ XtVaSetValues (fep->encoding_label, XmNleftAttachment, XmATTACH_NONE, RIGHT_JUSTIFY_VA_ARGS(fep->encoding_label,family_pos), XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, fep->encoding_menu, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomWidget, fep->encoding_menu, 0); XtVaSetValues (fep->encoding_menu, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, family_pos, XmNrightAttachment, XmATTACH_NONE, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, 0); /* proportional font */ XtVaSetValues (fep->proportional_label, XmNleftAttachment, XmATTACH_NONE, RIGHT_JUSTIFY_VA_ARGS(fep->proportional_label,family_pos), XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, fep->prop_family_option, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomWidget, fep->prop_family_option, 0); XtVaSetValues (fep->prop_family_option, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, family_pos, XmNrightAttachment, XmATTACH_NONE, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, fep->encoding_menu, XmNbottomAttachment, XmATTACH_NONE, 0); /* monospaced font */ XtVaSetValues (fep->fixed_label, XmNleftAttachment, XmATTACH_NONE, RIGHT_JUSTIFY_VA_ARGS(fep->fixed_label,family_pos), XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, fep->fixed_family_option, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomWidget, fep->fixed_family_option, 0); XtVaSetValues (fep->fixed_family_option, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, family_pos, XmNrightAttachment, XmATTACH_NONE, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, fep->prop_size_field, XmNbottomAttachment, XmATTACH_NONE, 0); /* * Layout the size labels and family selectors */ /* proportional font */ XtVaSetValues (fep->prop_size_label, XmNleftAttachment, XmATTACH_NONE, RIGHT_JUSTIFY_VA_ARGS(fep->prop_size_label,size_pos), XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, fep->prop_family_option, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomWidget, fep->prop_family_option, 0); XtVaSetValues (fep->prop_size_option, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, size_pos, XmNrightAttachment, XmATTACH_NONE, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, fep->prop_family_option, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomWidget, fep->prop_family_option, 0); /* monospaced font */ XtVaSetValues (fep->fixed_size_label, XmNleftAttachment, XmATTACH_NONE, RIGHT_JUSTIFY_VA_ARGS(fep->fixed_size_label,size_pos), XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, fep->fixed_family_option, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomWidget, fep->fixed_family_option, 0); XtVaSetValues (fep->fixed_size_option, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, size_pos, XmNrightAttachment, XmATTACH_NONE, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, fep->fixed_family_option, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomWidget, fep->fixed_family_option, 0); /* * Layout the scaled size toggle and text field */ /* proportional font */ XtVaSetValues (fep->prop_size_toggle, XmNleftAttachment, XmATTACH_NONE, RIGHT_JUSTIFY_VA_ARGS(fep->prop_size_toggle,size_pos), XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNheight, toggle_text_height, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, fep->prop_size_field, XmNbottomAttachment, XmATTACH_NONE, 0); XtVaSetValues (fep->prop_size_field, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, size_pos, XmNrightAttachment, XmATTACH_NONE, XmNheight, toggle_text_height, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, fep->prop_size_option, XmNbottomAttachment, XmATTACH_NONE, 0); /* monospaced font */ XtVaSetValues (fep->fixed_size_toggle, XmNleftAttachment, XmATTACH_NONE, RIGHT_JUSTIFY_VA_ARGS(fep->fixed_size_toggle,size_pos), XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNheight, toggle_text_height, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, fep->fixed_size_field, XmNbottomAttachment, XmATTACH_NONE, 0); XtVaSetValues (fep->fixed_size_field, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, size_pos, XmNrightAttachment, XmATTACH_NONE, XmNheight, toggle_text_height, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, fep->fixed_size_option, XmNbottomAttachment, XmATTACH_NONE, 0); } // Member: create // Description: Creates page for GeneralFonts // Inputs: // Side effects: void XFE_PrefsPageGeneralFonts::create() { Widget kids[100]; Arg av[50]; int ac; int i; int j; PrefsDataGeneralFonts *fep = NULL; fep = new PrefsDataGeneralFonts; memset(fep, 0, sizeof(PrefsDataGeneralFonts)); m_prefsDataGeneralFonts = fep; fep->context = getContext(); fep->prompt_dialog = getPrefsDialog()->getDialogChrome(); fep->encoding_menu_csid = (int*)XP_CALLOC(INTL_CHAR_SET_MAX, sizeof(int)); Widget form; ac = 0; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; form = XmCreateForm (m_wPageForm, "fonts", av, ac); XtManageChild (form); m_wPage = fep->page = form; // Fonts and Encodings Widget frame1; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_NONE); ac++; frame1 = XmCreateFrame (form, "fontsFrame", av, ac); Widget form1; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; form1 = XmCreateForm (frame1, "fontsBox", av, ac); Widget label1; ac = 0; XtSetArg (av [ac], XmNchildType, XmFRAME_TITLE_CHILD); ac++; label1 = XmCreateLabelGadget (frame1, "fontsBoxLabel", av, ac); Visual *v = 0; Colormap cmap = 0; Cardinal depth = 0; ac = 0; i = 0; kids[i++] = fep->encoding_label = XmCreateLabelGadget (form1, "encodingLabel", av, ac); XtVaGetValues (getPrefsDialog()->getPrefsParent(), XtNvisual, &v, XtNcolormap, &cmap, XtNdepth, &depth, 0); /* Create a combobox for storing encoding choices */ ac = 0; XtSetArg (av[ac], XmNmoveSelectedItemUp, False); ac++; XtSetArg (av[ac], XmNtype, XmDROP_DOWN_LIST_BOX); ac++; XtSetArg (av[ac], XmNarrowType, XmMOTIF); ac++; XtSetArg (av[ac], XmNvisual, v); ac++; XtSetArg (av[ac], XmNcolormap, cmap); ac++; XtSetArg (av[ac], XmNdepth, depth); ac++; kids[i++] = fep->encoding_menu = DtCreateComboBox(form1, "encodingMenu", av,ac); XtAddCallback(fep->encoding_menu, XmNselectionCallback, cb_charSet, this); fe_FontCharSet *charset; int selectedCharSet; selectedCharSet = 0; ac = 0; int num_encodings = 0; for (j = 0; j < INTL_CHAR_SET_MAX; j++) { XmString xmstr; charset = &fe_FontCharSets[fe_SortedFontCharSets[j]]; if (!charset->name) { continue; } fep->encoding_menu_csid[j] = fe_SortedFontCharSets[j]; xmstr = XmStringCreateLocalized(charset->name); DtComboBoxAddItem(fep->encoding_menu, xmstr, 0, True); num_encodings += 1; if (charset->selected) { DtComboBoxSelectItem(fep->encoding_menu, xmstr); selectedCharSet = j; } XmStringFree(xmstr); } if (num_encodings > 15) num_encodings = 15; XtVaSetValues(fep->encoding_menu, XmNvisibleItemCount, num_encodings, NULL); charset = &fe_FontCharSets[fe_SortedFontCharSets[selectedCharSet]]; fep->selected_encoding = fe_SortedFontCharSets[selectedCharSet]; ac = 0; kids[i++] = fep->proportional_label = XmCreateLabelGadget (form1, "proportionalLabel", av, ac); ac = 0; XtSetArg (av[ac], XmNarrowType, XmMOTIF); ac++; XtSetArg (av[ac], XmNvisual, v); ac++; XtSetArg (av[ac], XmNcolormap, cmap); ac++; XtSetArg (av[ac], XmNdepth, depth); ac++; kids[i++] = fep->prop_family_option = DtCreateComboBox(form1, "proportionalMenu", av, ac); /* need to add a callback */ XtAddCallback (fep->prop_family_option, XmNselectionCallback, prefsGeneralFontsCb_fontFamily, fep); ac = 0; kids[i++] = fep->prop_size_label = XmCreateLabelGadget (form1, "propSizeLabel", av, ac); ac = 0; XtSetArg (av[ac], XmNarrowType, XmMOTIF); ac++; XtSetArg (av[ac], XmNvisual, v); ac++; XtSetArg (av[ac], XmNcolormap, cmap); ac++; XtSetArg (av[ac], XmNdepth, depth); ac++; kids[i++] = fep->prop_size_option = DtCreateComboBox (form1, "propSizeMenu", av, ac); XtAddCallback(fep->prop_size_option, XmNselectionCallback, prefsGeneralFontsCb_fontSize, fep); ac = 0; XtSetArg (av[ac], XmNcolumns, 5); ac++; kids [i++] = fep->prop_size_field = fe_CreateTextField (form1, "propSizeField", av, ac); ac = 0; kids[i++] = fep->prop_size_toggle = XmCreateToggleButtonGadget(form1, "propSizeToggle", av, ac); XtAddCallback(fep->prop_size_toggle, XmNvalueChangedCallback, cb_allowScaling, this); fe_set_new_font_families(fep, &charset->pitches[0], fep->prop_family_option, fep->prop_size_option); ac = 0; kids[i++] = fep->fixed_label = XmCreateLabelGadget(form1, "fixedLabel", av, ac); ac = 0; XtSetArg (av[ac], XmNarrowType, XmMOTIF); ac++; XtSetArg (av[ac], XmNvisual, v); ac++; XtSetArg (av[ac], XmNcolormap, cmap); ac++; XtSetArg (av[ac], XmNdepth, depth); ac++; kids[i++] = fep->fixed_family_option = DtCreateComboBox (form1, "fixedMenu", av, ac); XtAddCallback (fep->fixed_family_option, XmNselectionCallback, prefsGeneralFontsCb_fontFamily, fep); ac = 0; kids[i++] = fep->fixed_size_label = XmCreateLabelGadget (form1, "fixedSizeLabel", av, ac); ac = 0; XtSetArg (av[ac], XmNarrowType, XmMOTIF); ac++; XtSetArg (av[ac], XmNvisual, v); ac++; XtSetArg (av[ac], XmNcolormap, cmap); ac++; XtSetArg (av[ac], XmNdepth, depth); ac++; kids[i++] = fep->fixed_size_option = DtCreateComboBox (form1, "fixedSizeMenu", av, ac); XtAddCallback(fep->fixed_size_option, XmNselectionCallback, prefsGeneralFontsCb_fontSize, fep); ac = 0; XtSetArg (av[ac], XmNcolumns, 5); ac++; kids [i++] = fep->fixed_size_field = fe_CreateTextField (form1, "fixedSizeField", av, ac); ac = 0; kids [i++] = fep->fixed_size_toggle = XmCreateToggleButtonGadget (form1, "fixedSizeToggle", av, ac); XtAddCallback(fep->fixed_size_toggle, XmNvalueChangedCallback, cb_allowScaling, this); fe_set_new_font_families(fep, &charset->pitches[1], fep->fixed_family_option, fep->fixed_size_option); relayout(fep); XtManageChildren (kids, i); XtManageChild (label1); XtManageChild (form1); XtManageChild (frame1); // Web Font Widget frame2; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_WIDGET); ac++; XtSetArg (av [ac], XmNtopWidget, frame1); ac++; XtSetArg (av [ac], XmNtopOffset, 8); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_NONE); ac++; frame2 = XmCreateFrame (form, "webFontFrame", av, ac); Widget form2; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; form2 = XmCreateForm (frame2, "webFontBox", av, ac); ac = 0; i = 0; kids[i++] = fep->use_font_label = XmCreateLabelGadget (form2, "useFontLabel", av, ac); kids[i++] = fep->use_my_font_toggle = XmCreateToggleButtonGadget(form2, "useMyFont", av, ac); kids[i++] = fep->use_doc_font_selective_toggle = XmCreateToggleButtonGadget(form2, "useDocFontSelective", av, ac); kids[i++] = fep->use_doc_font_whenever_toggle = XmCreateToggleButtonGadget(form2, "useDocFontWhenever", av, ac); /* * Layout the webfont enable toggles */ XtVaSetValues(fep->use_font_label, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, 0); XtVaSetValues(fep->use_my_font_toggle, XmNindicatorType, XmONE_OF_MANY, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, fep->use_font_label, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, fep->use_font_label, XmNleftOffset, 16, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, 0); XtVaSetValues(fep->use_doc_font_selective_toggle, XmNindicatorType, XmONE_OF_MANY, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, fep->use_my_font_toggle, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, fep->use_my_font_toggle, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, 0); XtVaSetValues(fep->use_doc_font_whenever_toggle, XmNindicatorType, XmONE_OF_MANY, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, fep->use_doc_font_selective_toggle, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, fep->use_my_font_toggle, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, 0); XtManageChildren (kids, i); XtManageChild (form2); XtManageChild (frame2); XtAddCallback(fep->use_my_font_toggle, XmNvalueChangedCallback, cb_toggleUseFont, fep); XtAddCallback(fep->use_doc_font_selective_toggle, XmNvalueChangedCallback, cb_toggleUseFont, fep); XtAddCallback(fep->use_doc_font_whenever_toggle, XmNvalueChangedCallback, cb_toggleUseFont, fep); setCreated(TRUE); } // Read prefs from PREF backend. void XFE_PrefsPageGeneralFonts::read() { XP_ASSERT(m_prefsDataGeneralFonts); PrefsDataGeneralFonts *fep = m_prefsDataGeneralFonts; XFE_GlobalPrefs *prefs = &fe_globalPrefs; Boolean sensitive; // TODO: Fonts & Encoding // Web font XtVaSetValues(fep->use_my_font_toggle, XmNset, (prefs->use_doc_fonts == DOC_FONTS_NEVER), 0); XtVaSetValues(fep->use_doc_font_selective_toggle, XmNset, (prefs->use_doc_fonts == DOC_FONTS_QUICK), 0); XtVaSetValues(fep->use_doc_font_whenever_toggle, XmNset, (prefs->use_doc_fonts == DOC_FONTS_ALWAYS), 0); // If pref is locked, grey it out. sensitive = !PREF_PrefIsLocked("browser.use_document_fonts"); XtSetSensitive(fep->use_my_font_toggle, sensitive); XtSetSensitive(fep->use_doc_font_selective_toggle, sensitive); XtSetSensitive(fep->use_doc_font_whenever_toggle, sensitive); setInitialized(TRUE); } // Member: install // Description: // Inputs: // Side effects: void XFE_PrefsPageGeneralFonts::install() { fe_installGeneralFonts(); } // Write prefs UI to PREF backend. void XFE_PrefsPageGeneralFonts::write() { PrefsDataGeneralFonts *fep = m_prefsDataGeneralFonts; XP_ASSERT(fep); fe_get_scaled_font_size(fep); if (fep->fonts_changed) { // Notify whoever is interested in changes in default font XFE_MozillaApp::theApp()->notifyInterested(XFE_MozillaApp::defaultFontChanged); fep->fonts_changed = 0; } Boolean b; XtVaGetValues(fep->use_my_font_toggle, XmNset, &b, 0); if (b) fe_globalPrefs.use_doc_fonts = DOC_FONTS_NEVER; XtVaGetValues(fep->use_doc_font_selective_toggle, XmNset, &b, 0); if (b) fe_globalPrefs.use_doc_fonts = DOC_FONTS_QUICK; XtVaGetValues(fep->use_doc_font_whenever_toggle, XmNset, &b, 0); if (b) fe_globalPrefs.use_doc_fonts = DOC_FONTS_ALWAYS; // Install preferences install(); } // Member: getData // Description: // Inputs: // Side effects: PrefsDataGeneralFonts *XFE_PrefsPageGeneralFonts::getData() { return m_prefsDataGeneralFonts; } void prefsGeneralFontsCb_fontFamily(Widget widget, XtPointer closure, XtPointer call_data) { PrefsDataGeneralFonts *fep; XtPointer data; fe_FontFamily *family; fe_FontPitch *pitch; int i; DtComboBoxCallbackStruct *cbs; fep = (PrefsDataGeneralFonts *)closure; fep->fonts_changed = 1; cbs = (DtComboBoxCallbackStruct *)call_data; XtVaGetValues(widget, XmNuserData, &data, 0); pitch = (fe_FontPitch *) data; pitch->selectedFamily = NULL; for (i = 0; i < pitch->numberOfFamilies; i++) { family = &pitch->families[i]; if (i == cbs->item_position) { family->selected = 1; } else { family->selected = 0; } } fe_set_new_font_sizes(fep, pitch); fe_InvalidateFontData(); // Notify whoever is interested in changes in default font XFE_MozillaApp::theApp()->notifyInterested(XFE_MozillaApp::defaultFontChanged); fep->fonts_changed = 0; // For Asian encoding, the user should exit communicator in order for // font prefs to take effect (workaround for bug 72939) if (xfe_is_asian_encoding(fep->selected_encoding)) { FE_Alert(fep->context, XP_GetString(XFE_PREFS_RESTART_FOR_FONT_CHANGES)); } } void prefsGeneralFontsCb_fontSize(Widget widget, XtPointer closure, XtPointer call_data) { PrefsDataGeneralFonts *fep; XtPointer data; fe_FontFamily *family; fe_FontPitch *pitch; fe_FontSize *size; int i; DtComboBoxCallbackStruct *cbs; fep = (PrefsDataGeneralFonts *) closure; fep->fonts_changed = 1; cbs = (DtComboBoxCallbackStruct *)call_data; XtVaGetValues(widget, XmNuserData, &data, 0); pitch = (fe_FontPitch *) data; family = NULL; for (i = 0; i < pitch->numberOfFamilies; i++) { family = &pitch->families[i]; if (family->selected) { break; } else { family = NULL; } } if (!family) { return; } for (i = 0; i < family->numberOfPointSizes; i++) { size = &family->pointSizes[i]; if (i == cbs->item_position) size->selected = 1; else size->selected = 0; } fe_FreeFontSizeTable(family); fe_InvalidateFontData(); // Notify whoever is interested in changes in default font XFE_MozillaApp::theApp()->notifyInterested(XFE_MozillaApp::defaultFontChanged); fep->fonts_changed = 0; // For Asian encoding, the user should exit communicator in order for // font prefs to take effect (workaround for bug 72939) if (xfe_is_asian_encoding(fep->selected_encoding)) { FE_Alert(fep->context, XP_GetString(XFE_PREFS_RESTART_FOR_FONT_CHANGES)); } } void XFE_PrefsPageGeneralFonts::cb_charSet(Widget /* widget */, XtPointer closure, XtPointer call_data) { PrefsDataGeneralFonts *fep; fe_FontCharSet *charset; int charsetID; int i; DtComboBoxCallbackStruct *cbs; XFE_PrefsPageGeneralFonts *thePage = (XFE_PrefsPageGeneralFonts *)closure; fep = thePage->getData(); cbs = (DtComboBoxCallbackStruct *)call_data; charsetID = fep->encoding_menu_csid[cbs->item_position]; fep->selected_encoding = charsetID; for (i = 0; i < INTL_CHAR_SET_MAX; i++) { fe_FontCharSets[i].selected = 0; } charset = &fe_FontCharSets[charsetID]; charset->selected = 1; fe_set_new_font_families(fep, &charset->pitches[0], fep->prop_family_option, fep->prop_size_option); fe_set_new_font_families(fep, &charset->pitches[1], fep->fixed_family_option, fep->fixed_size_option); thePage->relayout(fep); } void XFE_PrefsPageGeneralFonts::cb_toggleUseFont(Widget widget, XtPointer closure, XtPointer call_data) { PrefsDataGeneralFonts *fep = (PrefsDataGeneralFonts *)closure; XmToggleButtonCallbackStruct *cb = (XmToggleButtonCallbackStruct *)call_data; if (! cb->set) { XtVaSetValues(widget, XmNset, True, 0); } else if (widget == fep->use_my_font_toggle) { XtVaSetValues(fep->use_doc_font_selective_toggle, XmNset, False, 0); XtVaSetValues(fep->use_doc_font_whenever_toggle, XmNset, False, 0); } else if (widget == fep->use_doc_font_selective_toggle) { XtVaSetValues(fep->use_my_font_toggle, XmNset, False, 0); XtVaSetValues(fep->use_doc_font_whenever_toggle, XmNset, False, 0); } else if (widget == fep->use_doc_font_whenever_toggle) { XtVaSetValues(fep->use_my_font_toggle, XmNset, False, 0); XtVaSetValues(fep->use_doc_font_selective_toggle, XmNset, False, 0); } else abort(); } // Member: cb_allowScaling // Description: // Inputs: // Side effects: void XFE_PrefsPageGeneralFonts::cb_allowScaling(Widget w, XtPointer closure, XtPointer callData) { XFE_PrefsPageGeneralFonts *thePage = (XFE_PrefsPageGeneralFonts *)closure; PrefsDataGeneralFonts *fep = thePage->getData(); XmToggleButtonCallbackStruct *cb; XtPointer data; fe_FontFamily *family; fe_FontPitch *pitch; unsigned int allowScaling; int i; cb = (XmToggleButtonCallbackStruct *)callData; fep->fonts_changed = 1; XtVaGetValues(w, XmNuserData, &data, 0); pitch = (fe_FontPitch *) data; family = NULL; for (i = 0; i < pitch->numberOfFamilies; i++) { family = &pitch->families[i]; if (family->selected) { break; } else { family = NULL; } } if (!family) { return; } if (cb->set) { allowScaling = 1; } else { allowScaling = 0; } /* * sanity check */ if (family->pointSizes->size) { allowScaling = 0; XtVaSetValues(w, XmNset, False, 0); XtVaSetValues(w, XmNsensitive, False, 0); } else if (family->numberOfPointSizes == 1) { allowScaling = 1; XtVaSetValues(w, XmNset, True, 0); XtVaSetValues(w, XmNsensitive, False, 0); } if (allowScaling != family->allowScaling) { fe_FreeFontSizeTable(family); family->allowScaling = allowScaling; fe_InvalidateFontData(); // Notify whoever is interested in changes in default font XFE_MozillaApp::theApp()->notifyInterested(XFE_MozillaApp::defaultFontChanged); fep->fonts_changed = 0; } } /* This disabled the backends notion of the font cache. * * FE caches fonts for each LO_TextAttr in the LO_TextAttr->FE_Data. Once * the user changes either the default family/face, size, proportional/fixed, * scaled/non-scaled, we will need to clear the font cache that backend * maintains. */ static void fe_InvalidateFontData(void) { /* * free the Asian font groups, which are also caches */ fe_FreeFontGroups(); } static void fe_set_new_font_families(PrefsDataGeneralFonts *fep, fe_FontPitch *pitch, Widget familyCombobox, Widget sizeCombobox) { int i; fe_FontFamily *family; Widget list; pitch->sizeMenu = sizeCombobox; DtComboBoxDeleteAllItems(familyCombobox); XtVaGetValues(familyCombobox, XmNlist, &list, NULL); XtVaSetValues(list, XmNuserData, pitch, NULL); for (i = 0; i < pitch->numberOfFamilies; i++) { XmString xmstr; family = &pitch->families[i]; xmstr = XmStringCreateLocalized(family->name); DtComboBoxAddItem(familyCombobox, xmstr, 0, True); if ((i == 0) || (family->selected)) DtComboBoxSelectItem(familyCombobox, xmstr); XmStringFree(xmstr); } if (pitch->numberOfFamilies > 15) XtVaSetValues(familyCombobox, XmNvisibleItemCount, 15, NULL); else XtVaSetValues(familyCombobox, XmNvisibleItemCount, pitch->numberOfFamilies, NULL); fe_set_new_font_sizes(fep, pitch); } static void fe_set_new_font_sizes(PrefsDataGeneralFonts *fep, fe_FontPitch *pitch) { int i; char name[16]; fe_FontFamily *family; fe_FontSize *size; Widget list; Widget toggle; XmString xms; if (pitch->sizeMenu == fep->prop_size_option) toggle = fep->prop_size_toggle; else toggle = fep->fixed_size_toggle; DtComboBoxDeleteAllItems(pitch->sizeMenu); family = NULL; for (i = 0; i < pitch->numberOfFamilies; i++) { family = &pitch->families[i]; if (family->selected) break; else family = NULL; } if (!family) return; XtVaGetValues(pitch->sizeMenu, XmNlist, &list, NULL); XtVaSetValues(list, XmNuserData, pitch, NULL); if (family->allowScaling) { XtVaSetValues(toggle, XmNset, True, 0); } else { XtVaSetValues(toggle, XmNset, False, 0); } if (family->pointSizes->size) { XtVaSetValues(toggle, XmNsensitive, False, 0); } else { if (family->numberOfPointSizes == 1) { XtVaSetValues(toggle, XmNsensitive, False, 0); } else { XtVaSetValues(toggle, XmNsensitive, True, 0); } } XtVaSetValues(toggle, XmNuserData, pitch, NULL); for (i = 0; i < family->numberOfPointSizes; i++) { size = &family->pointSizes[i]; if (size->size) (void) PR_snprintf(name, sizeof(name), "%d.%d ", size->size / 10, size->size % 10); else (void) PR_snprintf(name, sizeof(name), "%d ", size->size); xms = XmStringCreateLtoR(name, XmFONTLIST_DEFAULT_TAG); DtComboBoxAddItem(pitch->sizeMenu, xms, 0, True); if ((i == 0) || (size->selected)) DtComboBoxSelectItem(pitch->sizeMenu, xms); XmStringFree(xms); } } static void fe_get_scaled_font_size(PrefsDataGeneralFonts *fep) { fe_FontCharSet *charset = NULL; fe_FontFamily *family; Widget field; fe_FontPitch *pitch; char *endptr; char *buf; int i; int j; int oldSize; for (i = 0; i < INTL_CHAR_SET_MAX; i++) { if (fe_FontCharSets[i].selected) { charset = &fe_FontCharSets[i]; } } if (!charset){ return; } for (i = 0; i < 2; i++) { field = (i ? fep->fixed_size_field : fep->prop_size_field); pitch = &charset->pitches[i]; XtVaGetValues(field, XmNvalue, &buf, 0); family = NULL; for (j = 0; j < pitch->numberOfFamilies; j++) { family = &pitch->families[j]; if (family->selected) { break; } else { family = NULL; } } if (!family) { continue; } oldSize = family->scaledSize; errno = 0; family->scaledSize = ((int) (strtod(buf, &endptr) * 10)); if (errno || (family->scaledSize < 0)){ family->scaledSize = 0; } if (family->scaledSize != oldSize){ fep->fonts_changed = 1; fe_FreeFontSizeTable(family); fe_InvalidateFontData(); } XtFree(buf); } } static Boolean xfe_is_asian_encoding(int encoding) { char *encoding_name = fe_FontCharSets[encoding].mimeName; if ((! XP_STRCASECMP(encoding_name, "gb_2312-80")) || // Simplified Chinese (! XP_STRCASECMP(encoding_name, "jis_x0201")) || // Japanese (! XP_STRCASECMP(encoding_name, "jis_x0208-1983")) || // Japanese (! XP_STRCASECMP(encoding_name, "jis_x0212-1990")) || // Japanese (! XP_STRCASECMP(encoding_name, "ks_c_5601-1987")) || // Korean (! XP_STRCASECMP(encoding_name, "x-cns11643-1110")) || // traditional Chinese (! XP_STRCASECMP(encoding_name, "x-cns11643-1")) || // traditional Chinese (! XP_STRCASECMP(encoding_name, "x-cns11643-2")) || // traditional Chinese (! XP_STRCASECMP(encoding_name, "x-gb2312-11")) || // simplified Chinese (! XP_STRCASECMP(encoding_name, "x-jisx0208-11")) || // Japanese (! XP_STRCASECMP(encoding_name, "x-ksc5601-11")) || // Korean (! XP_STRCASECMP(encoding_name, "x-x-big5"))) // Traditional Chinese return TRUE; else return FALSE; } // ************************************************************************ // ************************* General/Colors ************************* // ************************************************************************ // Member: XFE_PrefsPageGeneralColors // Description: Constructor // Inputs: // Side effects: XFE_PrefsPageGeneralColors::XFE_PrefsPageGeneralColors(XFE_PrefsDialog *dialog) : XFE_PrefsPage(dialog), m_prefsDataGeneralColors(0), m_underlinelinks_changed(FALSE), m_colors_changed(FALSE) { } // Member: ~XFE_PrefsPageGeneralColors // Description: Destructor // Inputs: // Side effects: XFE_PrefsPageGeneralColors::~XFE_PrefsPageGeneralColors() { PrefsDataGeneralColors *fep = m_prefsDataGeneralColors; char *orig_color; XtVaGetValues(fep->text_color_button, XmNuserData, &orig_color, NULL); if (orig_color) XtFree(orig_color); XtVaGetValues(fep->bg_color_button, XmNuserData, &orig_color, NULL); if (orig_color) XtFree(orig_color); XtVaGetValues(fep->links_color_button, XmNuserData, &orig_color, NULL); if (orig_color) XtFree(orig_color); XtVaGetValues(fep->vlinks_color_button, XmNuserData, &orig_color, NULL); if (orig_color) XtFree(orig_color); delete m_prefsDataGeneralColors; } // Member: create // Description: Creates page for GeneralColors // Inputs: // Side effects: void XFE_PrefsPageGeneralColors::create() { Widget kids[100]; Arg av[50]; int ac; int i; PrefsDataGeneralColors *fep = NULL; fep = new PrefsDataGeneralColors; memset(fep, 0, sizeof(PrefsDataGeneralColors)); m_prefsDataGeneralColors = fep; fep->context = getContext(); fep->prompt_dialog = getPrefsDialog()->getDialogChrome(); Widget form; ac = 0; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; form = XmCreateForm (m_wPageForm, "colors", av, ac); XtManageChild (form); m_wPage = fep->page = form; // Colors Widget frame1; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_POSITION); ac++; XtSetArg (av [ac], XmNrightPosition, 50); ac++; XtSetArg (av [ac], XmNrightOffset, 4); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_NONE); ac++; frame1 = XmCreateFrame (form, "colorFrame", av, ac); Widget form1; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; form1 = XmCreateForm (frame1, "colorBox", av, ac); Widget label1; ac = 0; XtSetArg (av [ac], XmNchildType, XmFRAME_TITLE_CHILD); ac++; label1 = XmCreateLabelGadget (frame1, "colorBoxLabel", av, ac); Widget text_color_label; Widget bg_color_label; Widget text_color_button; Widget bg_color_button; Widget use_default_colors_button; ac = 0; i = 0; kids[i++] = text_color_label = XmCreateLabelGadget(form1, "textColorLabel", av, ac); kids[i++] = bg_color_label = XmCreateLabelGadget(form1, "bgColorLabel", av, ac); ac = 0; XtSetArg (av[ac], XmNwidth, DEF_COLOR_BUTTON_WIDTH); ac++; XtSetArg (av[ac], XmNheight, DEF_COLOR_BUTTON_HEIGHT); ac++; kids[i++] = text_color_button = XmCreateDrawnButton(form1, "textColorButton", av, ac); ac = 0; XtSetArg (av[ac], XmNwidth, DEF_COLOR_BUTTON_WIDTH); ac++; XtSetArg (av[ac], XmNheight, DEF_COLOR_BUTTON_HEIGHT); ac++; kids[i++] = bg_color_button = XmCreateDrawnButton(form1, "bgColorButton", av, ac); ac = 0; kids[i++] = use_default_colors_button = XmCreatePushButtonGadget(form1, "useDefColors", av, ac); fep->text_color_button = text_color_button; fep->bg_color_button = bg_color_button; fep->use_default_colors_button = use_default_colors_button; int labels_height; labels_height = XfeVaGetTallestWidget(text_color_label, text_color_button, NULL); int labels_width; labels_width = XfeVaGetWidestWidget(text_color_label, bg_color_label, NULL); XtVaSetValues(text_color_label, XmNheight, labels_height, RIGHT_JUSTIFY_VA_ARGS(text_color_label,labels_width), XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, NULL); XtVaSetValues(bg_color_label, XmNheight, labels_height, RIGHT_JUSTIFY_VA_ARGS(bg_color_label,labels_width), XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, text_color_label, XmNbottomAttachment, XmATTACH_NONE, NULL); XtVaSetValues(text_color_button, XmNheight, labels_height, XmNshadowThickness, 2, XmNuserData, 0, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, text_color_label, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomWidget, text_color_label, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, text_color_label, XmNleftOffset, 4, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues(bg_color_button, XmNheight, labels_height, XmNshadowThickness, 2, XmNuserData, 0, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, bg_color_label, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomWidget, bg_color_label, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, text_color_button, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues(use_default_colors_button, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, bg_color_label, XmNtopOffset, 4, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_NONE, XmNrightAttachment, XmATTACH_FORM, 0); XtAddCallback(text_color_button, XmNactivateCallback, cb_activateColor, this); XtAddCallback(bg_color_button, XmNactivateCallback, cb_activateColor, this); XtAddCallback(use_default_colors_button, XmNactivateCallback, cb_defaultColor, this); XtManageChildren (kids, i); XtManageChild (label1); XtManageChild (form1); XtManageChild (frame1); // Links Widget frame2; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; XtSetArg (av [ac], XmNleftWidget, frame1); ac++; XtSetArg (av [ac], XmNleftOffset, 8); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++; XtSetArg (av [ac], XmNbottomWidget, frame1); ac++; frame2 = XmCreateFrame (form, "linksFrame", av, ac); Widget form2; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; form2 = XmCreateForm (frame2, "linksBox", av, ac); Widget label2; ac = 0; XtSetArg (av [ac], XmNchildType, XmFRAME_TITLE_CHILD); ac++; label2 = XmCreateLabelGadget (frame2, "linksBoxLabel", av, ac); Widget links_color_label; Widget vlinks_color_label; Widget links_color_button; Widget vlinks_color_button; Widget underline_links_toggle; ac = 0; i = 0; kids[i++] = links_color_label = XmCreateLabelGadget(form2, "linksLabel", av, ac); kids[i++] = vlinks_color_label = XmCreateLabelGadget(form2, "vlinksLabel", av, ac); ac = 0; XtSetArg (av[ac], XmNwidth, DEF_COLOR_BUTTON_WIDTH); ac++; XtSetArg (av[ac], XmNheight, DEF_COLOR_BUTTON_HEIGHT); ac++; kids[i++] = links_color_button = XmCreateDrawnButton(form2, "linksColorButton", av, ac); ac = 0; XtSetArg (av[ac], XmNwidth, DEF_COLOR_BUTTON_WIDTH); ac++; XtSetArg (av[ac], XmNheight, DEF_COLOR_BUTTON_HEIGHT); ac++; kids[i++] = vlinks_color_button = XmCreateDrawnButton(form2, "vlinksColorButton", av, ac); ac = 0; kids[i++] = underline_links_toggle = XmCreateToggleButtonGadget(form2, "underline", av, ac); fep->links_color_button = links_color_button; fep->vlinks_color_button = vlinks_color_button; fep->underline_links_toggle = underline_links_toggle; labels_height = XfeVaGetTallestWidget(links_color_label, links_color_button, NULL); labels_width = XfeVaGetWidestWidget(links_color_label, vlinks_color_label, NULL); XtVaSetValues(links_color_label, XmNheight, labels_height, RIGHT_JUSTIFY_VA_ARGS(links_color_label,labels_width), XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, NULL); XtVaSetValues(vlinks_color_label, XmNheight, labels_height, RIGHT_JUSTIFY_VA_ARGS(vlinks_color_label,labels_width), XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, links_color_label, XmNbottomAttachment, XmATTACH_NONE, NULL); XtVaSetValues(links_color_button, XmNheight, labels_height, XmNshadowThickness, 2, XmNuserData, 0, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, links_color_label, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomWidget, links_color_label, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, links_color_label, XmNleftOffset, 4, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues(vlinks_color_button, XmNheight, labels_height, XmNshadowThickness, 2, XmNuserData, 0, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, vlinks_color_label, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomWidget, vlinks_color_label, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, links_color_button, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues(underline_links_toggle, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, vlinks_color_label, XmNtopOffset, 4, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, 0); XtAddCallback(links_color_button, XmNactivateCallback, cb_activateColor, this); XtAddCallback(vlinks_color_button, XmNactivateCallback, cb_activateColor, this); XtManageChildren (kids, i); XtManageChild (label2); XtManageChild (form2); XtManageChild (frame2); // Use my colors Widget frame3; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_WIDGET); ac++; XtSetArg (av [ac], XmNtopWidget, frame1); ac++; XtSetArg (av [ac], XmNtopOffset, 8); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_NONE); ac++; frame3 = XmCreateFrame (form, "frame3", av, ac); Widget form3; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; form3 = XmCreateForm (frame3, "box3", av, ac); Widget use_color_label; Widget use_my_color_toggle; ac = 0; i = 0; kids[i++] = use_color_label = XmCreateLabelGadget(form3, "useColor", av, ac); kids[i++] = use_my_color_toggle = XmCreateToggleButtonGadget(form3, "useMyColor", av, ac); fep->use_my_color_toggle = use_my_color_toggle; XtVaSetValues(use_color_label, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, NULL); XtVaSetValues(use_my_color_toggle, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, use_color_label, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 8, XmNrightAttachment, XmATTACH_NONE, NULL); XtManageChildren(kids, i); XtManageChild(form3); XtManageChild(frame3); setCreated(TRUE); } // Read prefs from PREF backend. void XFE_PrefsPageGeneralColors::read() { XP_ASSERT(m_prefsDataGeneralColors); PrefsDataGeneralColors *fep = m_prefsDataGeneralColors; XFE_GlobalPrefs *prefs = &fe_globalPrefs; LO_Color *color; char *orig_color; char buf[32]; // Colors - foreground XtVaGetValues(fep->text_color_button, XmNuserData, &orig_color, NULL); if (orig_color) XtFree(orig_color); color = &prefs->text_color; XP_SAFE_SPRINTF(buf, sizeof(buf), "#%02x%02x%02x", color->red, color->green, color->blue); XtVaSetValues(fep->text_color_button, XmNsensitive, !PREF_PrefIsLocked("browser.foreground_color"), XmNuserData, XtNewString(buf), 0); fe_SwatchSetColor(fep->text_color_button, &prefs->text_color); // Colors - background XtVaGetValues(fep->bg_color_button, XmNuserData, &orig_color, NULL); if (orig_color) XtFree(orig_color); color = &prefs->background_color; XP_SAFE_SPRINTF(buf, sizeof(buf), "#%02x%02x%02x", color->red, color->green, color->blue); XtVaSetValues(fep->bg_color_button, XmNsensitive, !PREF_PrefIsLocked("browser.background_color"), XmNuserData, XtNewString(buf), 0); fe_SwatchSetColor(fep->bg_color_button, &prefs->background_color); // Use default colors XtVaSetValues(fep->use_default_colors_button, XmNsensitive, !PREF_PrefIsLocked("browser.foreground_color") && !PREF_PrefIsLocked("browser.background_color"), 0); // Links - unvisited links XtVaGetValues(fep->links_color_button, XmNuserData, &orig_color, NULL); if (orig_color) XtFree(orig_color); color = &prefs->links_color; XP_SAFE_SPRINTF(buf, sizeof(buf), "#%02x%02x%02x", color->red, color->green, color->blue); XtVaSetValues(fep->links_color_button, XmNsensitive, !PREF_PrefIsLocked("browser.anchor_color"), XmNuserData, XtNewString(buf), 0); fe_SwatchSetColor(fep->links_color_button, &prefs->links_color); // Links - visited links XtVaGetValues(fep->vlinks_color_button, XmNuserData, &orig_color, NULL); if (orig_color) XtFree(orig_color); color = &prefs->vlinks_color; XP_SAFE_SPRINTF(buf, sizeof(buf), "#%02x%02x%02x", color->red, color->green, color->blue); XtVaSetValues(fep->vlinks_color_button, XmNsensitive, !PREF_PrefIsLocked("browser.visited_color"), XmNuserData, XtNewString(buf), 0); fe_SwatchSetColor(fep->vlinks_color_button, &prefs->vlinks_color); // Underline links XP_Bool underline_links; PREF_GetBoolPref("browser.underline_anchors",&underline_links); XtVaSetValues(fep->underline_links_toggle, XmNset, underline_links, XmNsensitive, !PREF_PrefIsLocked("browser.underline_anchors"), 0); // Use doc colors XtVaSetValues(fep->use_my_color_toggle, XmNset, !prefs->use_doc_colors, XmNsensitive, !PREF_PrefIsLocked("browser.use_document_colors"), 0); setInitialized(TRUE); } // Member: install // Description: // Inputs: // Side effects: void XFE_PrefsPageGeneralColors::install() { fe_installGeneralColors(); if (m_colors_changed) { XFE_MozillaApp::theApp()->notifyInterested(XFE_MozillaApp::defaultColorsChanged); m_colors_changed = FALSE; } else if (m_underlinelinks_changed) { XFE_MozillaApp::theApp()->notifyInterested(XFE_MozillaApp::linksAttributeChanged); m_underlinelinks_changed = FALSE; } } // Write prefs UI to PREF backend. void XFE_PrefsPageGeneralColors::write() { PrefsDataGeneralColors *fep = m_prefsDataGeneralColors; Boolean b; LO_Color orig_color; LO_Color new_color; char *selected_color; // Colors - foreground orig_color = fe_globalPrefs.text_color; XtVaGetValues(fep->text_color_button, XmNuserData, &selected_color, NULL); LO_ParseRGB(selected_color, &new_color.red, &new_color.green, &new_color.blue); if ((new_color.red != orig_color.red) || (new_color.green != orig_color.green) || (new_color.blue != orig_color.blue)) m_colors_changed = TRUE; fe_globalPrefs.text_color = new_color; // Colors - background orig_color = fe_globalPrefs.background_color; XtVaGetValues(fep->bg_color_button, XmNuserData, &selected_color, NULL); LO_ParseRGB(selected_color, &new_color.red, &new_color.green, &new_color.blue); if ((new_color.red != orig_color.red) || (new_color.green != orig_color.green) || (new_color.blue != orig_color.blue)) m_colors_changed = TRUE; fe_globalPrefs.background_color = new_color; // Links - unvisited links orig_color = fe_globalPrefs.links_color; XtVaGetValues(fep->links_color_button, XmNuserData, &selected_color, NULL); LO_ParseRGB(selected_color, &new_color.red, &new_color.green, &new_color.blue); if ((new_color.red != orig_color.red) || (new_color.green != orig_color.green) || (new_color.blue != orig_color.blue)) m_colors_changed = TRUE; fe_globalPrefs.links_color = new_color; // Links - visited links orig_color = fe_globalPrefs.vlinks_color; XtVaGetValues(fep->vlinks_color_button, XmNuserData, &selected_color, NULL); LO_ParseRGB(selected_color, &new_color.red, &new_color.green, &new_color.blue); if ((new_color.red != orig_color.red) || (new_color.green != orig_color.green) || (new_color.blue != orig_color.blue)) m_colors_changed = TRUE; fe_globalPrefs.vlinks_color = new_color; // Underline links XP_Bool old_underline_links; PREF_GetBoolPref("browser.underline_anchors",&old_underline_links); XP_Bool new_underline_links; XtVaGetValues(fep->underline_links_toggle, XmNset, &new_underline_links, 0); if (old_underline_links != new_underline_links) { PREF_SetBoolPref("browser.underline_anchors", new_underline_links); m_underlinelinks_changed = TRUE; } // Use doc colors XtVaGetValues(fep->use_my_color_toggle, XmNset, &b, 0); fe_globalPrefs.use_doc_colors = !b; // Install preferences install(); } // Member: getData // Description: // Inputs: // Side effects: PrefsDataGeneralColors *XFE_PrefsPageGeneralColors::getData() { return m_prefsDataGeneralColors; } void XFE_PrefsPageGeneralColors::cb_activateColor(Widget w, XtPointer closure, XtPointer /* call_data */) { XFE_PrefsPageGeneralColors *thePage = (XFE_PrefsPageGeneralColors *)closure; XFE_PrefsDialog *theDialog = thePage->getPrefsDialog(); char selected_color_name[128]; Pixel selected_pixel; char *orig_color_name; XtVaGetValues(w, XmNuserData, &orig_color_name, NULL); if (orig_color_name != NULL) XP_STRCPY(selected_color_name, orig_color_name); else selected_color_name[0] = '\0'; if (fe_colorDialog(theDialog->getBaseWidget(), theDialog->getContext(), selected_color_name, &selected_pixel)) { if (strlen(selected_color_name) > 0) { if (orig_color_name && (! XP_STRCMP(orig_color_name, selected_color_name))) return; if (orig_color_name) XtFree(orig_color_name); XtVaSetValues(w, XmNbackground, selected_pixel, XmNuserData, XtNewString(selected_color_name), NULL); } } } void XFE_PrefsPageGeneralColors::cb_defaultColor(Widget /* w */, XtPointer closure, XtPointer /* call_data */) { XFE_PrefsPageGeneralColors *thePage = (XFE_PrefsPageGeneralColors *)closure; PrefsDataGeneralColors *fep = thePage->getData(); char buf[32]; LO_Color color; char *orig_color; XtVaGetValues(fep->text_color_button, XmNuserData, &orig_color, NULL); if (orig_color) XtFree(orig_color); PREF_GetDefaultColorPref("browser.foreground_color", &color.red, &color.green, &color.blue); XP_SAFE_SPRINTF(buf, sizeof(buf), "#%02x%02x%02x", color.red, color.green, color.blue); XtVaSetValues(fep->text_color_button, XmNuserData, XtNewString(buf), 0); fe_SwatchSetColor(fep->text_color_button, &color); XtVaGetValues(fep->bg_color_button, XmNuserData, &orig_color, NULL); if (orig_color) XtFree(orig_color); PREF_GetDefaultColorPref("browser.background_color", &color.red, &color.green, &color.blue); XP_SAFE_SPRINTF(buf, sizeof(buf), "#%02x%02x%02x", color.red, color.green, color.blue); XtVaSetValues(fep->bg_color_button, XmNuserData, XtNewString(buf), 0); fe_SwatchSetColor(fep->bg_color_button, &color); } // ************************************************************************ // ************************* General/Advanced ************************* // ************************************************************************ // Member: XFE_PrefsPageGeneralAdvanced // Description: Constructor // Inputs: // Side effects: XFE_PrefsPageGeneralAdvanced::XFE_PrefsPageGeneralAdvanced(XFE_PrefsDialog *dialog) : XFE_PrefsPage(dialog), m_prefsDataGeneralAdvanced(0) { m_toolbar_needs_updating = FALSE; } // Member: ~XFE_PrefsPageGeneralAdvanced // Description: Destructor // Inputs: // Side effects: XFE_PrefsPageGeneralAdvanced::~XFE_PrefsPageGeneralAdvanced() { delete m_prefsDataGeneralAdvanced; } // Member: create // Description: Creates page for GeneralAdvanced // Inputs: // Side effects: void XFE_PrefsPageGeneralAdvanced::create() { Widget kids[100]; Arg av[50]; int ac; int i; PrefsDataGeneralAdvanced *fep = NULL; fep = new PrefsDataGeneralAdvanced; memset(fep, 0, sizeof(PrefsDataGeneralAdvanced)); m_prefsDataGeneralAdvanced = fep; fep->context = getContext(); fep->prompt_dialog = getPrefsDialog()->getDialogChrome(); Widget form; ac = 0; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; form = XmCreateForm (m_wPageForm, "advanced", av, ac); XtManageChild (form); m_wPage = fep->page = form; Widget frame1; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_NONE); ac++; frame1 = XmCreateFrame (form, "advancedFrame", av, ac); Widget form1; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; form1 = XmCreateForm (frame1, "advancedBox", av, ac); // top portion Widget enable_js_top_attachment_widget = NULL; ac = 0; i = 0; kids[i++] = fep->show_image_toggle = XmCreateToggleButtonGadget(form1, "showImage", av, ac); enable_js_top_attachment_widget = fep->show_image_toggle; #ifdef JAVA kids[i++] = fep->enable_java_toggle = XmCreateToggleButtonGadget(form1, "enableJava", av, ac); enable_js_top_attachment_widget = fep->enable_java_toggle; #endif /* JAVA */ kids[i++] = fep->enable_js_toggle = XmCreateToggleButtonGadget(form1, "enableJs", av, ac); kids[i++] = fep->enable_style_sheet_toggle = XmCreateToggleButtonGadget(form1, "enableStyleSheet", av, ac); kids[i++] = fep->auto_install_toggle = XmCreateToggleButtonGadget(form1, "autoInstall", av, ac); kids[i++] = fep->email_anonftp_toggle = XmCreateToggleButtonGadget(form1, "emailAnonFtp", av, ac); #ifdef XFE_PREF_ADVANCED_PASSIVE_FTP kids[i++] = fep->passive_ftp_toggle = XmCreateToggleButtonGadget(form1, "passiveFtp", av, ac); #endif XtVaSetValues(fep->show_image_toggle, XmNindicatorType, XmN_OF_MANY, XmNalignment, XmALIGNMENT_BEGINNING, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, 0); #ifdef JAVA XtVaSetValues(fep->enable_java_toggle, XmNindicatorType, XmN_OF_MANY, XmNalignment, XmALIGNMENT_BEGINNING, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, fep->show_image_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, fep->show_image_toggle, XmNrightAttachment, XmATTACH_NONE, 0); #endif /* JAVA */ XtVaSetValues(fep->enable_js_toggle, XmNindicatorType, XmN_OF_MANY, XmNalignment, XmALIGNMENT_BEGINNING, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, enable_js_top_attachment_widget, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, fep->show_image_toggle, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues(fep->enable_style_sheet_toggle, XmNindicatorType, XmN_OF_MANY, XmNalignment, XmALIGNMENT_BEGINNING, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, fep->enable_js_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, fep->show_image_toggle, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues(fep->auto_install_toggle, XmNindicatorType, XmN_OF_MANY, XmNalignment, XmALIGNMENT_BEGINNING, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, fep->enable_style_sheet_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, fep->show_image_toggle, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues(fep->email_anonftp_toggle, XmNindicatorType, XmN_OF_MANY, XmNalignment, XmALIGNMENT_BEGINNING, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, fep->auto_install_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, fep->show_image_toggle, XmNrightAttachment, XmATTACH_NONE, 0); #ifdef XFE_PREF_ADVANCED_PASSIVE_FTP XtVaSetValues(fep->passive_ftp_toggle, XmNindicatorType, XmN_OF_MANY, XmNalignment, XmALIGNMENT_BEGINNING, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, fep->email_anonftp_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, fep->show_image_toggle, XmNrightAttachment, XmATTACH_NONE, 0); #endif XtManageChildren (kids, i); XtManageChild (form1); XtManageChild (frame1); setCreated(TRUE); } // Read prefs from PREF backend. void XFE_PrefsPageGeneralAdvanced::read() { XP_ASSERT(m_prefsDataGeneralAdvanced); PrefsDataGeneralAdvanced *fep = m_prefsDataGeneralAdvanced; XFE_GlobalPrefs *prefs = &fe_globalPrefs; XtVaSetValues(fep->show_image_toggle, XmNset, prefs->autoload_images_p, XmNsensitive, !PREF_PrefIsLocked("general.always_load_images"), 0); XtVaSetValues(fep->enable_style_sheet_toggle, XmNset, prefs->enable_style_sheet, XmNsensitive, !PREF_PrefIsLocked("browser.enable_style_sheets"), 0); #ifdef JAVA XtVaSetValues(fep->enable_java_toggle, XmNset, prefs->enable_java, XmNsensitive, !PREF_PrefIsLocked("security.enable_java"), 0); #endif /* JAVA */ XtVaSetValues(fep->enable_js_toggle, XmNset, prefs->enable_javascript, XmNsensitive, !PREF_PrefIsLocked("javascript.enabled"), 0); XtVaSetValues(fep->auto_install_toggle, XmNset, prefs->auto_install, XmNsensitive, !PREF_PrefIsLocked("autoupdate.enabled"), 0); XtVaSetValues(fep->email_anonftp_toggle, XmNset, prefs->email_anonftp, XmNsensitive, !PREF_PrefIsLocked("security.email_as_ftp_password"), 0); #ifdef XFE_PREF_ADVANCED_PASSIVE_FTP XtVaSetValues(fep->passive_ftp_toggle, XmNset, prefs->passive_ftp, XmNsensitive, !PREF_PrefIsLocked("network.ftp.passive"), 0); #endif setInitialized(TRUE); } void XFE_PrefsPageGeneralAdvanced::install() { fe_installGeneralAdvanced(); if (m_toolbar_needs_updating) { // Notify whoever is interested in updating toolbar appearance XFE_MozillaApp::theApp()->notifyInterested(XFE_MozillaApp::updateToolbarAppearance); m_toolbar_needs_updating = FALSE; } } // Write prefs UI to PREF backend. void XFE_PrefsPageGeneralAdvanced::write() { PrefsDataGeneralAdvanced *fep = m_prefsDataGeneralAdvanced; Boolean b; int old_autoload_images = fe_globalPrefs.autoload_images_p; XP_ASSERT(fep); XtVaGetValues(fep->show_image_toggle, XmNset, &b, 0); fe_globalPrefs.autoload_images_p = b; XtVaGetValues(fep->enable_style_sheet_toggle, XmNset, &b, 0); fe_globalPrefs.enable_style_sheet = b; #ifdef JAVA XtVaGetValues(fep->enable_java_toggle, XmNset, &b, 0); fe_globalPrefs.enable_java = b; #endif /* JAVA */ XtVaGetValues(fep->enable_js_toggle, XmNset, &b, 0); fe_globalPrefs.enable_javascript = b; XtVaGetValues(fep->auto_install_toggle, XmNset, &b, 0); fe_globalPrefs.auto_install = b; XtVaGetValues(fep->email_anonftp_toggle, XmNset, &b, 0); fe_globalPrefs.email_anonftp = b; #ifdef XFE_PREF_ADVANCED_PASSIVE_FTP XtVaGetValues(fep->passive_ftp_toggle, XmNset, &b, 0); NET_UsePASV(fe_globalPrefs.passive_ftp = b); #endif if (old_autoload_images != fe_globalPrefs.autoload_images_p) { m_toolbar_needs_updating = TRUE; } // Install preferences install(); } PrefsDataGeneralAdvanced *XFE_PrefsPageGeneralAdvanced::getData() { return m_prefsDataGeneralAdvanced; } // ******************************************************************** // ************************ General/Privacy ************************** // ******************************************************************** #define PREF_NETWORK_SIGNON_REMEMBERSIGNONS "network.signon.rememberSignons" #define PREF_PRIVACY_WARN_NO_POLICY "privacy.warn_no_policy" #define PREF_NETWORK_COOKIE_COOKIEBEHAVIOR "network.cookie.cookieBehavior" #define PREF_NETWORK_COOKIE_WARNABOUTCOOKIES "network.cookie.warnAboutCookies" XFE_PrefsPageGeneralPrivacy::XFE_PrefsPageGeneralPrivacy(XFE_PrefsDialog *dialog) : XFE_PrefsPage(dialog), m_prefsDataGeneralPrivacy(0) { m_toolbar_needs_updating = FALSE; } XFE_PrefsPageGeneralPrivacy::~XFE_PrefsPageGeneralPrivacy() { delete m_prefsDataGeneralPrivacy; } void XFE_PrefsPageGeneralPrivacy::create() { PrefsDataGeneralPrivacy *fep = NULL; Widget form; int i; int ac; Arg av[30]; Widget kids[30]; // Zap our data structure. fep = new PrefsDataGeneralPrivacy; memset(fep, 0, sizeof(PrefsDataGeneralPrivacy)); m_prefsDataGeneralPrivacy = fep; fep->context = getContext(); fep->prompt_dialog = getPrefsDialog()->getDialogChrome(); // Form ac = 0; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; form = XmCreateForm (m_wPageForm, "privacy", av, ac); XtManageChild(form); m_wPage = fep->page = form; // Privacy ac = 0; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_NONE); ac++; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; Widget privacyFrame = XmCreateFrame (form, "privacyFrame", av, ac); ac = 0; XtSetArg (av [ac], XmNchildType, XmFRAME_TITLE_CHILD); ac++; Widget privacyLabel = XmCreateLabelGadget (privacyFrame, "privacyLabel", av, ac); ac = 0; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; Widget privacyForm = XmCreateForm (privacyFrame, "privacyForm", av, ac); // kids i = 0; kids[i++] = fep->save_logins_and_passwords = XmCreateToggleButtonGadget(privacyForm, "saveLoginsAndPasswords", NULL, 0); kids[i++] = fep->warn_no_privacy = XmCreateToggleButtonGadget(privacyForm, "warnNoPrivacy", NULL, 0); XtVaSetValues(fep->save_logins_and_passwords, XmNindicatorType, XmN_OF_MANY, XmNalignment, XmALIGNMENT_BEGINNING, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues(fep->warn_no_privacy, XmNindicatorType, XmN_OF_MANY, XmNalignment, XmALIGNMENT_BEGINNING, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, fep->save_logins_and_passwords, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, fep->save_logins_and_passwords, XmNrightAttachment, XmATTACH_NONE, 0); XtManageChildren (kids, i); XtManageChild (privacyLabel); XtManageChild (privacyForm); XtManageChild (privacyFrame); // Cookies ac = 0; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_WIDGET); ac++; XtSetArg (av [ac], XmNtopWidget, privacyFrame); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_NONE); ac++; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; Widget cookieFrame = XmCreateFrame (form, "cookieFrame", av, ac); ac = 0; XtSetArg (av [ac], XmNchildType, XmFRAME_TITLE_CHILD); ac++; Widget cookieLabel = XmCreateLabelGadget (cookieFrame, "cookieLabel", av, ac); ac = 0; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; Widget cookieForm = XmCreateForm (cookieFrame, "cookieForm", av, ac); // kids i = 0; kids[i++] = fep->always_accept_cookie_toggle = XmCreateToggleButtonGadget(cookieForm, "alwaysAcceptCookie", NULL, 0); kids[i++] = fep->no_foreign_cookie_toggle = XmCreateToggleButtonGadget(cookieForm, "noForeignCookie", NULL, 0); kids[i++] = fep->never_accept_cookie_toggle = XmCreateToggleButtonGadget(cookieForm, "neverAcceptCookie", NULL, 0); kids[i++] = fep->warn_cookie_toggle = XmCreateToggleButtonGadget(cookieForm, "warnCookie", NULL, 0); XtVaSetValues(fep->always_accept_cookie_toggle, XmNindicatorType, XmONE_OF_MANY, XmNalignment, XmALIGNMENT_BEGINNING, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues(fep->no_foreign_cookie_toggle, XmNindicatorType, XmONE_OF_MANY, XmNalignment, XmALIGNMENT_BEGINNING, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, fep->always_accept_cookie_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, fep->always_accept_cookie_toggle, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues(fep->never_accept_cookie_toggle, XmNindicatorType, XmONE_OF_MANY, XmNalignment, XmALIGNMENT_BEGINNING, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, fep->no_foreign_cookie_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, fep->always_accept_cookie_toggle, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues(fep->warn_cookie_toggle, XmNindicatorType, XmN_OF_MANY, XmNalignment, XmALIGNMENT_BEGINNING, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, fep->never_accept_cookie_toggle, XmNtopOffset, 8, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, fep->always_accept_cookie_toggle, XmNrightAttachment, XmATTACH_NONE, 0); XtManageChildren (kids, i); XtManageChild (cookieLabel); XtManageChild (cookieForm); XtManageChild (cookieFrame); // Add cookie callbacks XtAddCallback(fep->always_accept_cookie_toggle, XmNvalueChangedCallback, cb_toggleCookieState, fep); XtAddCallback(fep->no_foreign_cookie_toggle, XmNvalueChangedCallback, cb_toggleCookieState, fep); XtAddCallback(fep->never_accept_cookie_toggle, XmNvalueChangedCallback, cb_toggleCookieState, fep); setCreated(TRUE); } // Read prefs from PREF backend. void XFE_PrefsPageGeneralPrivacy::read() { XP_ASSERT(m_prefsDataGeneralPrivacy); PrefsDataGeneralPrivacy *fep = m_prefsDataGeneralPrivacy; Boolean sensitive; XP_Bool initialBoolValue; int initialIntValue; // Privacy sensitive = !PREF_PrefIsLocked(PREF_NETWORK_SIGNON_REMEMBERSIGNONS); PREF_GetBoolPref(PREF_NETWORK_SIGNON_REMEMBERSIGNONS, &initialBoolValue); XtVaSetValues(fep->save_logins_and_passwords, XmNset, initialBoolValue, XmNsensitive, sensitive, NULL); sensitive = !PREF_PrefIsLocked(PREF_PRIVACY_WARN_NO_POLICY); PREF_GetBoolPref(PREF_PRIVACY_WARN_NO_POLICY, &initialBoolValue); XtVaSetValues(fep->warn_no_privacy, XmNset, initialBoolValue, XmNsensitive, sensitive, NULL); // Cookies sensitive = !PREF_PrefIsLocked(PREF_NETWORK_COOKIE_COOKIEBEHAVIOR); PREF_GetIntPref(PREF_NETWORK_COOKIE_COOKIEBEHAVIOR, &initialIntValue); XtVaSetValues(fep->always_accept_cookie_toggle, XmNset, initialIntValue == NET_Accept, XmNsensitive, sensitive, 0); XtVaSetValues(fep->no_foreign_cookie_toggle, XmNset, initialIntValue == NET_DontAcceptForeign, XmNsensitive, sensitive, 0); XtVaSetValues(fep->never_accept_cookie_toggle, XmNset, initialIntValue == NET_DontUse, XmNsensitive, sensitive, 0); sensitive = !PREF_PrefIsLocked(PREF_NETWORK_COOKIE_WARNABOUTCOOKIES); PREF_GetBoolPref(PREF_NETWORK_COOKIE_WARNABOUTCOOKIES, &initialBoolValue); XtVaSetValues(fep->warn_cookie_toggle, XmNset, initialBoolValue, XmNsensitive, sensitive, 0); setInitialized(TRUE); } // Do we need this? God this code is a mess. void XFE_PrefsPageGeneralPrivacy::install() { if (m_toolbar_needs_updating) { // Notify whoever is interested in updating toolbar appearance XFE_MozillaApp::theApp()-> notifyInterested(XFE_MozillaApp::updateToolbarAppearance); m_toolbar_needs_updating = FALSE; } } // Write prefs UI to PREF backend. void XFE_PrefsPageGeneralPrivacy::write() { PrefsDataGeneralPrivacy *fep = m_prefsDataGeneralPrivacy; Boolean b; XP_ASSERT(fep); // Privacy XtVaGetValues(fep->save_logins_and_passwords, XmNset, &b, 0); PREF_SetBoolPref(PREF_NETWORK_SIGNON_REMEMBERSIGNONS, (XP_Bool)b); XtVaGetValues(fep->warn_no_privacy, XmNset, &b, 0); PREF_SetBoolPref(PREF_PRIVACY_WARN_NO_POLICY, (XP_Bool)b); // Cookies XtVaGetValues(fep->always_accept_cookie_toggle, XmNset, &b, 0); if (b) { PREF_SetIntPref(PREF_NETWORK_COOKIE_COOKIEBEHAVIOR, NET_Accept); } XtVaGetValues(fep->no_foreign_cookie_toggle, XmNset, &b, 0); if (b) { PREF_SetIntPref(PREF_NETWORK_COOKIE_COOKIEBEHAVIOR, NET_DontAcceptForeign); } XtVaGetValues(fep->never_accept_cookie_toggle, XmNset, &b, 0); if (b) { PREF_SetIntPref(PREF_NETWORK_COOKIE_COOKIEBEHAVIOR, NET_DontUse); } XtVaGetValues(fep->warn_cookie_toggle, XmNset, &b, 0); PREF_SetBoolPref(PREF_NETWORK_COOKIE_WARNABOUTCOOKIES, (XP_Bool)b); install(); } PrefsDataGeneralPrivacy *XFE_PrefsPageGeneralPrivacy::getData() { return m_prefsDataGeneralPrivacy; } void XFE_PrefsPageGeneralPrivacy::cb_toggleCookieState(Widget w, XtPointer closure, XtPointer callData) { XmToggleButtonCallbackStruct *cb = (XmToggleButtonCallbackStruct *)callData; PrefsDataGeneralPrivacy *fep = (PrefsDataGeneralPrivacy *)closure; if (! cb->set) { XtVaSetValues(w, XmNset, True, 0); } else if (w == fep->always_accept_cookie_toggle) { XtVaSetValues(fep->no_foreign_cookie_toggle, XmNset, False, 0); XtVaSetValues(fep->never_accept_cookie_toggle, XmNset, False, 0); } else if (w == fep->no_foreign_cookie_toggle) { XtVaSetValues(fep->always_accept_cookie_toggle, XmNset, False, 0); XtVaSetValues(fep->never_accept_cookie_toggle, XmNset, False, 0); } else if (w == fep->never_accept_cookie_toggle) { XtVaSetValues(fep->always_accept_cookie_toggle, XmNset, False, 0); XtVaSetValues(fep->no_foreign_cookie_toggle, XmNset, False, 0); } else abort(); } // ************************************************************************ // ************************** General/Appl *************************** // ************************************************************************ // Member: XFE_PrefsPageGeneralAppl // Description: Constructor // Inputs: // Side effects: XFE_PrefsPageGeneralAppl::XFE_PrefsPageGeneralAppl(XFE_PrefsDialog *dialog) : XFE_PrefsPage(dialog), m_prefsDataGeneralAppl(0) { } // Member: ~XFE_PrefsPageGeneralAppl // Description: Destructor // Inputs: // Side effects: XFE_PrefsPageGeneralAppl::~XFE_PrefsPageGeneralAppl() { delete m_prefsDataGeneralAppl; } /* * mimetype_is_locked */ static int mimetype_is_locked(char* pref_name) { char buf[1024]; strcpy(buf, pref_name); strcat(buf, ".mimetype"); return PREF_PrefIsLocked(buf); } /* * selection_cb * Invoked when a row in the application panel is selected. * Greys out the 'Edit' and 'Delete' buttons if that mimetype is * locked by preferences. */ static void selection_cb(Widget /*w*/, XtPointer closure, XtPointer callData) { XmLGridCallbackStruct* cb = (XmLGridCallbackStruct*) callData; PrefsDataGeneralAppl* fep = (PrefsDataGeneralAppl*) closure; NET_cdataStruct* cd = NULL; int row; if ( cb == NULL ) return; row = cb->row - xfe_prefsAppl_get_static_app_count(); if ( row < 0 ) return; cd = xfe_prefsDialogAppl_get_mime_data_at_pos(row); if ( cd && cd->pref_name && mimetype_is_locked(cd->pref_name) ) { XtSetSensitive(fep->edit_button, FALSE); XtSetSensitive(fep->delete_button, FALSE); } else { XtSetSensitive(fep->edit_button, TRUE); XtSetSensitive(fep->delete_button, TRUE); } } // Member: create // Description: Creates page for GeneralAppl // Inputs: // Side effects: void XFE_PrefsPageGeneralAppl::create() { Widget kids[100]; Arg av[50]; int ac; int i; PrefsDataGeneralAppl *fep = NULL; fep = new PrefsDataGeneralAppl; memset(fep, 0, sizeof(PrefsDataGeneralAppl)); m_prefsDataGeneralAppl = fep; fep->context = getContext(); fep->prompt_dialog = getPrefsDialog()->getDialogChrome(); Widget form; ac = 0; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; form = XmCreateForm (m_wPageForm, "appl", av, ac); XtManageChild (form); m_wPage = fep->page = form; Widget frame1; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_NONE); ac++; frame1 = XmCreateFrame (form, "applFrame", av, ac); Widget form1; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; form1 = XmCreateForm (frame1, "applBox", av, ac); // Application list Widget helpers_list; ac = 0; i = 0; XtSetArg(av[ac], XmNselectionPolicy, XmSELECT_BROWSE_ROW); ac++; XtSetArg(av[ac], XmNhorizontalSizePolicy, XmCONSTANT); ac++; XtSetArg(av[ac], XmNallowColumnResize, True); ac++; XtSetArg(av[ac], XmNheight, 250); ac++; kids[i++] = helpers_list = XmLCreateGrid(form1, "helperApp", av, ac); /* DEM */ XtAddCallback(helpers_list, XmNselectCallback, selection_cb, fep); fep->helpers_list = helpers_list; XtVaSetValues(helpers_list, XmNcolumnSizePolicy, XmVARIABLE, NULL); XtVaSetValues(helpers_list, XmNlayoutFrozen, True, NULL); XmLGridAddColumns(helpers_list, XmCONTENT, -1, 2); // First Column XtVaSetValues(helpers_list, XmNrowType, XmHEADING, XmNcolumn, 0, XmNcellDefaults, True, XmNcolumnWidth, DEFAULT_COLUMN_WIDTH, XmNcellType, XmSTRING_CELL, XmNcellEditable, True, XmNcellAlignment, XmALIGNMENT_LEFT, NULL); // Second Column XtVaSetValues(helpers_list, XmNrowType, XmHEADING, XmNcolumn, 1, XmNcellDefaults, True, XmNcellType, XmSTRING_CELL, XmNcellEditable, True, XmNcolumnWidth, MAX_COLUMN_WIDTH, XmNcellAlignment, XmALIGNMENT_LEFT, NULL); XmLGridAddRows(helpers_list, XmHEADING, -1, 1); XmLGridSetStrings(helpers_list, XP_GetString(XFE_HELPERS_LIST_HEADER)); // Get the font from *XmLGrid*fontList at this point. - XXX dp XtVaSetValues(helpers_list, XmNcellDefaults, True, XmNcellType, XmSTRING_CELL, XmNcellEditable, False, XmNcellLeftBorderType, XmBORDER_NONE, XmNcellRightBorderType, XmBORDER_NONE, XmNcellTopBorderType, XmBORDER_NONE, XmNcellBottomBorderType, XmBORDER_NONE, XmNcellAlignment, XmALIGNMENT_LEFT, NULL); XtVaSetValues(helpers_list, XmNlayoutFrozen, False, NULL); // New, Edit, Delete buttons ac = 0; Widget new_button; Widget edit_button; Widget delete_button; Widget folder_label; Widget folder_text; Widget browse_button; kids[i++] = new_button = XmCreatePushButtonGadget(form1, "newButton", av, ac); kids[i++] = edit_button = XmCreatePushButtonGadget(form1, "editButton", av, ac); kids[i++] = delete_button = XmCreatePushButtonGadget(form1, "deleteButton", av, ac); // Downloads folder kids[i++] = folder_label = XmCreateLabelGadget(form1, "folderLabel", av, ac); ac = 0; XtSetArg(av[ac], XmNcolumns, 25); ac++; kids[i++] = folder_text = fe_CreateTextField(form1, "folderText", av, ac); ac = 0; kids[i++] = browse_button = XmCreatePushButtonGadget(form1, "browseButton", av, ac); fep->folder_text = folder_text; fep->browse_button = browse_button; // Attachments Dimension width = XfeWidth(folder_label) + XfeWidth(folder_text) + XfeWidth(browse_button); XtVaSetValues(helpers_list, XmNwidth, width, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, XmNtopAttachment, XmATTACH_FORM, NULL); int labels_width; int edit_left_offset; labels_width = XfeVaGetWidestWidget(new_button, edit_button, delete_button, NULL); edit_left_offset = -(labels_width/2); XtVaSetValues(edit_button, XmNwidth, labels_width, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 50, XmNleftOffset, edit_left_offset, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, helpers_list, XmNtopOffset, 8, NULL); XtVaSetValues(new_button, XmNwidth, labels_width, XmNleftAttachment, XmATTACH_NONE, XmNrightAttachment, XmATTACH_WIDGET, XmNrightWidget, edit_button, XmNrightOffset, 8, XmNbottomAttachment, XmATTACH_NONE, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, edit_button, NULL); XtVaSetValues(delete_button, XmNwidth, labels_width, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, edit_button, XmNleftOffset, 8, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, edit_button, NULL); int labels_height; labels_height = XfeVaGetTallestWidget(folder_label, folder_text, browse_button, NULL); XtVaSetValues(folder_label, XmNheight, labels_height, XmNleftAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, new_button, XmNtopOffset, 8, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); XtVaSetValues(folder_text, XmNheight, labels_height, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, folder_label, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, folder_label, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); XtVaSetValues(browse_button, XmNheight, labels_height, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, folder_text, XmNleftOffset, 4, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, folder_label, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); // Add callbacks XtAddCallback(new_button, XmNactivateCallback, cb_new, this); XtAddCallback(edit_button, XmNactivateCallback, cb_edit, this); XtAddCallback(delete_button, XmNactivateCallback, cb_delete, this); XtAddCallback(browse_button, XmNactivateCallback, cb_browse, this); XtManageChildren(kids, i); XtManageChild(form1); XtManageChild(frame1); // Set up Column Width XmFontList fontList; short avgwidth; short avgheight; XtVaGetValues(helpers_list, XmNfontList, &fontList, XmNwidth, &width, NULL); XmLFontListGetDimensions(fontList, &avgwidth, &avgheight, TRUE); setCreated(TRUE); } // Read prefs from PREF backend. void XFE_PrefsPageGeneralAppl::read() { XFE_GlobalPrefs *prefs = &fe_globalPrefs; XP_ASSERT(m_prefsDataGeneralAppl); PrefsDataGeneralAppl *fep = m_prefsDataGeneralAppl; Boolean sensitive; // Before making the helpers page see if we want to reload the // mailcap and mimetype files if they changed on disk. XP_Bool needs_reload = FALSE; /* Mimetypes file */ if (fe_globalData.privateMimetypeFileModifiedTime != 0 && fe_isFileExist(fe_globalPrefs.private_mime_types_file) && fe_isFileChanged(fe_globalPrefs.private_mime_types_file, fe_globalData.privateMimetypeFileModifiedTime, NULL)) { char *msg = PR_smprintf(XP_GetString(XFE_PRIVATE_RELOADED_MIMETYPE), fe_globalPrefs.private_mime_types_file); if (msg) { fe_Alert_2(getPrefsDialog()->getDialogChrome(), msg); XP_FREE(msg); } needs_reload = TRUE; } // The mailcap File if (fe_globalData.privateMailcapFileModifiedTime != 0 && fe_isFileExist(fe_globalPrefs.private_mailcap_file) && fe_isFileChanged(fe_globalPrefs.private_mailcap_file, fe_globalData.privateMailcapFileModifiedTime, NULL)) { char *msg = PR_smprintf(XP_GetString(XFE_PRIVATE_RELOADED_MAILCAP), fe_globalPrefs.private_mailcap_file); if (msg) { fe_Alert_2(getPrefsDialog()->getDialogChrome(), msg); XP_FREE(msg); } needs_reload = TRUE; } if (needs_reload) { NET_CleanupMailCapList(NULL); NET_CleanupFileFormat(NULL); fe_RegisterConverters(); } // Add static applications xfe_prefsDialogAppl_build_static_list(fep); // Parse the .mime.types and .mailcap files. xfe_prefsDialogAppl_build_mime_list(fep); // browser download directory fe_SetTextField(fep->folder_text, prefs->tmp_dir); sensitive = !PREF_PrefIsLocked("browser.download_directory"); XtSetSensitive(fep->folder_text, sensitive); XtSetSensitive(fep->browse_button, sensitive); setInitialized(TRUE); } // Member: unmap // Description: // Inputs: // Side effects: void XFE_PrefsPageGeneralAppl::unmap() { PrefsDataGeneralAppl *fep = m_prefsDataGeneralAppl; XP_ASSERT(fep); if (fep->helpers_changed) { /* Throw away the current information about mime types */ NET_CleanupFileFormat(NULL); fe_globalData.privateMimetypeFileModifiedTime = 0; NET_CleanupMailCapList(NULL); fe_globalData.privateMailcapFileModifiedTime = 0; /* Re-load the default settings */ fe_RegisterConverters(); } XFE_PrefsPage::unmap(); } // Member: install // Description: // Inputs: // Side effects: void XFE_PrefsPageGeneralAppl::install() { fe_installBrowserAppl(); #ifdef NEW_DECODERS PrefsDataGeneralAppl *fep = m_prefsDataGeneralAppl; XP_ASSERT(fep); if (fep->helpers_changed) { XP_Bool reload = FALSE; /* Save the current preferences out */ if (fe_globalData.privateMimetypeFileModifiedTime != 0 && fe_isFileExist(fe_globalPrefs.private_mime_types_file) && fe_isFileChanged(fe_globalPrefs.private_mime_types_file, fe_globalData.privateMimetypeFileModifiedTime, 0)) { /* Ask users about overwriting or reloading */ char *msg = PR_smprintf(XP_GetString(XFE_PRIVATE_MIMETYPE_RELOAD), fe_globalPrefs.private_mime_types_file); if (msg) { reload = XFE_Confirm (fep->context, msg); XP_FREE(msg); } } if (reload) NET_CleanupFileFormat(NULL); else NET_CleanupFileFormat(fe_globalPrefs.private_mime_types_file); reload = FALSE; if (fe_globalData.privateMailcapFileModifiedTime != 0 && fe_isFileExist(fe_globalPrefs.private_mailcap_file) && fe_isFileChanged(fe_globalPrefs.private_mailcap_file, fe_globalData.privateMailcapFileModifiedTime, NULL)) { /* Ask users about overwriting or reloading */ char *msg = PR_smprintf(XP_GetString(XFE_PRIVATE_MAILCAP_RELOAD), fe_globalPrefs.private_mailcap_file); if (msg) { reload = XFE_Confirm(fep->context, msg); XP_FREE(msg); } } if (reload) NET_CleanupMailCapList(NULL); else NET_CleanupMailCapList(fe_globalPrefs.private_mailcap_file); /* Load the preferences file again */ fe_RegisterConverters (); } #endif /* NEW_DECODERS */ } // Member: markGeneralApplModified // Description: // Inputs: // Side effects: void XFE_PrefsPageGeneralAppl::setModified(Boolean flag) { XP_ASSERT(m_prefsDataGeneralAppl); PrefsDataGeneralAppl *fep = m_prefsDataGeneralAppl; fep->helpers_changed = flag; } // Write prefs UI to PREF backend. void XFE_PrefsPageGeneralAppl::write() { XP_ASSERT(m_prefsDataGeneralAppl); PrefsDataGeneralAppl *fep = m_prefsDataGeneralAppl; XP_FREEIF(fe_globalPrefs.tmp_dir); char *s = fe_GetTextField(fep->folder_text); fe_globalPrefs.tmp_dir = s ? s : XP_STRDUP(""); // Install preferences install(); } // Member: getData // Description: // Inputs: // Side effects: PrefsDataGeneralAppl *XFE_PrefsPageGeneralAppl::getData() { return m_prefsDataGeneralAppl; } // Member: cb_new // Description: // Inputs: // Side effects: void XFE_PrefsPageGeneralAppl::cb_new(Widget /* w */, XtPointer closure, XtPointer /* callData */) { XFE_PrefsPageGeneralAppl *thePage = (XFE_PrefsPageGeneralAppl *)closure; XFE_PrefsDialog *theDialog = thePage->getPrefsDialog(); Widget mainw = theDialog->getBaseWidget(); // while (!XtIsWMShell(mainw) && (XtParent(mainw)!=0)) // mainw = XtParent(mainw); // Instantiate an applications new dialog XFE_PrefsApplEditDialog *theNewDialog = 0; if ((theNewDialog = new XFE_PrefsApplEditDialog(theDialog, mainw, "prefsApplEdit", thePage)) == 0) { fe_perror(thePage->getContext(), XP_GetString(XFE_OUT_OF_MEMORY_URL)); return; } // Initialize and pop up the dialog theNewDialog->initPage(TRUE, 0); theNewDialog->show(); } // Member: cb_edit // Description: // Inputs: // Side effects: void XFE_PrefsPageGeneralAppl::cb_edit(Widget w, XtPointer closure, XtPointer /* callData */) { XFE_PrefsPageGeneralAppl *thePage = (XFE_PrefsPageGeneralAppl *)closure; XFE_PrefsDialog *theDialog = thePage->getPrefsDialog(); PrefsDataGeneralAppl *fep = thePage->getData(); Widget mainw = theDialog->getBaseWidget(); // Instantiate an applications new dialog XFE_PrefsApplEditDialog *theEditDialog = 0; PrefsDataGeneralAppl *prefsDataGeneralAppl; XtVaGetValues(w, XmNuserData, &prefsDataGeneralAppl, NULL); if ((theEditDialog = new XFE_PrefsApplEditDialog(theDialog, mainw, "prefsApplEdit", thePage)) == 0) { fe_perror(thePage->getContext(), XP_GetString(XFE_OUT_OF_MEMORY_URL)); return; } // Initialize and pop up the dialog int selectedCount; int pos[1]; /* we are browse select, so only 1 row is selected */ selectedCount = XmLGridGetSelectedRowCount(fep->helpers_list); if ( selectedCount != 1 ) return; XmLGridGetSelectedRows(fep->helpers_list, pos, selectedCount); theEditDialog->initPage(FALSE, pos[0]); theEditDialog->show(); } // Member: cb_delete // Description: // Inputs: // Side effects: void XFE_PrefsPageGeneralAppl::cb_delete(Widget /* w */, XtPointer closure, XtPointer /* callData */) { XFE_PrefsPageGeneralAppl *thePage = (XFE_PrefsPageGeneralAppl *)closure; PrefsDataGeneralAppl *fep = thePage->getData(); char *old_str = 0; char *src_str = 0; NET_cdataStruct *cd = NULL; NET_mdataStruct *old_md= NULL; int selectedCount; int pos[1]; /* we are browse select, so only 1 row is selected */ selectedCount = XmLGridGetSelectedRowCount(fep->helpers_list); if ( selectedCount != 1 ) return; XmLGridGetSelectedRows(fep->helpers_list, pos, selectedCount); int position = pos[0]; if (position < fep->static_apps_count) { /* cannot remove static applications */ FE_Alert(thePage->getContext(), XP_GetString(XFE_HELPERS_CANNOT_DEL_STATIC_APPS)); return; } /* adjust position */ position = position - fep->static_apps_count; /* pos in the list always start from 0 */ cd = xfe_prefsDialogAppl_get_mime_data_at_pos(position); if ( fep ) { if (XFE_Confirm (fep->context, fe_globalData.helper_app_delete_message)) { thePage->setModified(TRUE); old_md = xfe_prefsDialogAppl_get_mailcap_from_type(cd->ci.type); if ( old_md ) { /* If there is a mailcap entry, then update to reflect delete */ old_str = old_md->src_string; old_md->src_string = 0; } if ( !old_str || !strlen(old_str)) { src_str = xfe_prefsDialogAppl_construct_new_mailcap_string(old_md, cd->ci.type, NULL, NET_COMMAND_DELETED); } else { src_str = xfe_prefsDialogAppl_deleteCommand(old_str); XP_FREE(old_str); old_str = src_str; src_str = xfe_prefsDialogAppl_updateKey(src_str, NET_MOZILLA_FLAGS, NET_COMMAND_DELETED, 1 ); XP_FREE(old_str); } if ( old_md ) { if (old_md->src_string ) XP_FREE(old_md->src_string); old_md->src_string = 0; if ( src_str && *src_str ) old_md->src_string = src_str; if (old_md->xmode) XP_FREE(old_md->xmode); old_md->xmode = strdup(NET_COMMAND_DELETED); old_md->is_modified = 1; } else { xfe_prefsDialogAppl_add_new_mailcap_data(cd->ci.type, src_str, NULL, NET_COMMAND_DELETED, 1); XP_FREE(src_str); } /* delete the row at pos[0], because position is now adjusted * with static applications in mind... */ XmLGridDeleteRows(fep->helpers_list, XmCONTENT, pos[0], 1); if (cd->is_new) { NET_cdataRemove(cd); if ( old_md ) NET_mdataRemove(old_md); } } } } // Member: cb_browse // Description: // Inputs: // Side effects: void XFE_PrefsPageGeneralAppl::cb_browse(Widget /* w */, XtPointer closure, XtPointer /* callData */) { XFE_PrefsPageGeneralAppl *thePage = (XFE_PrefsPageGeneralAppl *)closure; XFE_PrefsDialog *theDialog = thePage->getPrefsDialog(); PrefsDataGeneralAppl *fep = thePage->getData(); fe_browse_file_of_text(theDialog->getContext(), fep->folder_text, True); } // ************************************************************************ // ************************* General/Cache ************************* // ************************************************************************ // Member: XFE_PrefsPageGeneralCache // Description: Constructor // Inputs: // Side effects: XFE_PrefsPageGeneralCache::XFE_PrefsPageGeneralCache(XFE_PrefsDialog *dialog) : XFE_PrefsPage(dialog), m_prefsDataGeneralCache(0) { } // Member: ~XFE_PrefsPageGeneralCache // Description: Destructor // Inputs: // Side effects: XFE_PrefsPageGeneralCache::~XFE_PrefsPageGeneralCache() { delete m_prefsDataGeneralCache; } // Member: create // Description: Creates page for GeneralCache // Inputs: // Side effects: void XFE_PrefsPageGeneralCache::create() { Widget kids[100]; Arg av[50]; int ac; int i; PrefsDataGeneralCache *fep = NULL; fep = new PrefsDataGeneralCache; memset(fep, 0, sizeof(PrefsDataGeneralCache)); m_prefsDataGeneralCache = fep; fep->context = getContext(); fep->prompt_dialog = getPrefsDialog()->getDialogChrome(); Widget form; ac = 0; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; form = XmCreateForm (m_wPageForm, "cache", av, ac); XtManageChild (form); m_wPage = fep->page = form; Widget frame1; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_NONE); ac++; frame1 = XmCreateFrame (form, "cacheFrame", av, ac); Widget form1; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; form1 = XmCreateForm (frame1, "cacheBox", av, ac); Widget cacheLabel; cacheLabel = XtVaCreateManagedWidget("cacheLabel", xmLabelGadgetClass, form1, XmNalignment, XmALIGNMENT_BEGINNING, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); Widget cache_dir_label; Widget cache_dir_text; Widget browse_button; Widget mem_label; Widget mem_text; Widget mem_k; Widget disk_label; Widget disk_text; Widget disk_k; Widget clear_disk_button; Widget clear_mem_button; ac = 0; i = 0; kids [i++] = cache_dir_label = XmCreateLabelGadget (form1, "cacheDirLabel", av, ac); kids [i++] = cache_dir_text = fe_CreateTextField (form1, "cacheDirText", av, ac); kids [i++] = mem_label = XmCreateLabelGadget (form1, "memoryLabel", av, ac); kids [i++] = mem_text = fe_CreateTextField (form1, "memoryText", av, ac); kids [i++] = mem_k = XmCreateLabelGadget (form1, "memoryK", av, ac); kids [i++] = disk_label = XmCreateLabelGadget (form1, "diskLabel", av, ac); kids [i++] = disk_text = fe_CreateTextField (form1, "diskText", av, ac); kids [i++] = disk_k = XmCreateLabelGadget (form1, "diskK", av, ac); kids[i++] = browse_button = XmCreatePushButtonGadget(form1, "browse", av, ac); kids[i++] = clear_mem_button = XmCreatePushButtonGadget(form1, "clearMem", av, ac); kids[i++] = clear_disk_button = XmCreatePushButtonGadget(form1, "clearDisk", av, ac); fep->cache_dir_text = cache_dir_text; fep->browse_button = browse_button; fep->mem_text = mem_text; fep->disk_text = disk_text; int labels_width; labels_width = XfeVaGetWidestWidget(cache_dir_label, mem_label, disk_label, NULL); int labels_height; labels_height = XfeVaGetTallestWidget(cache_dir_label, cache_dir_text, browse_button, NULL); int button_width; button_width = XfeVaGetWidestWidget(clear_mem_button, clear_disk_button, NULL); XtVaSetValues (disk_label, XmNheight, labels_height, RIGHT_JUSTIFY_VA_ARGS(disk_label,labels_width), XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, cacheLabel, XmNbottomAttachment, XmATTACH_NONE, 0); XtVaSetValues (disk_text, XmNcolumns, 6, XmNheight, labels_height, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, disk_label, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, cache_dir_text, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (disk_k, XmNheight, labels_height, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, disk_text, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, disk_text, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (clear_disk_button, XmNheight, labels_height, XmNwidth, button_width, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, disk_k, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_NONE, XmNrightAttachment, XmATTACH_OPPOSITE_WIDGET, XmNrightWidget, browse_button, 0); XtVaSetValues (mem_label, XmNheight, labels_height, RIGHT_JUSTIFY_VA_ARGS(mem_label,labels_width), XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, disk_label, XmNbottomAttachment, XmATTACH_NONE, 0); XtVaSetValues (mem_text, XmNcolumns, 6, XmNheight, labels_height, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, mem_label, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, cache_dir_text, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (mem_k, XmNheight, labels_height, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, mem_text, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, mem_text, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (clear_mem_button, XmNheight, labels_height, XmNwidth, button_width, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, mem_k, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_NONE, XmNrightAttachment, XmATTACH_OPPOSITE_WIDGET, XmNrightWidget, browse_button, 0); XtVaSetValues (cache_dir_label, XmNheight, labels_height, RIGHT_JUSTIFY_VA_ARGS(cache_dir_label, labels_width), XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, mem_label, XmNbottomAttachment, XmATTACH_NONE, 0); XtVaSetValues (cache_dir_text, XmNcolumns, 25, XmNheight, labels_height, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, cache_dir_label, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, labels_width, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (browse_button, XmNheight, labels_height, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, cache_dir_label, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, cache_dir_text, XmNrightAttachment, XmATTACH_NONE, 0); XtManageChildren (kids, i); // Verify Widget verifyLabel; verifyLabel = XtVaCreateManagedWidget("verifyLabel", xmLabelGadgetClass, form1, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, cache_dir_label, XmNtopOffset, 8, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); Widget verifyRc; verifyRc = XtVaCreateManagedWidget("verifyRc", xmRowColumnWidgetClass, form1, XmNradioBehavior, TRUE, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, verifyLabel, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 16, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); i = 0; ac = 0; XtSetArg (av [ac], XmNindicatorType, XmONE_OF_MANY); ac++; kids[i++] = fep->every_toggle = XmCreateToggleButtonGadget(verifyRc, "every", av, ac); ac = 0; XtSetArg (av [ac], XmNindicatorType, XmONE_OF_MANY); ac++; kids[i++] = fep->once_toggle = XmCreateToggleButtonGadget(verifyRc, "once", av, ac); ac = 0; XtSetArg (av [ac], XmNindicatorType, XmONE_OF_MANY); ac++; kids[i++] = fep->never_toggle = XmCreateToggleButtonGadget(verifyRc, "never", av, ac); XtManageChildren (kids, i); i = 0; kids[i++] = verifyRc; XtManageChildren (kids, i); XtAddCallback(browse_button, XmNactivateCallback, cb_browse, this); XtAddCallback(clear_disk_button, XmNactivateCallback, cb_clearDisk, this); XtAddCallback(clear_mem_button, XmNactivateCallback, cb_clearMem, this); XtManageChild(form1); XtManageChild(frame1); setCreated(TRUE); } // Read prefs from PREF backend. void XFE_PrefsPageGeneralCache::read() { XP_ASSERT(m_prefsDataGeneralCache); PrefsDataGeneralCache *fep = m_prefsDataGeneralCache; XFE_GlobalPrefs *prefs = &fe_globalPrefs; Boolean sensitive; // Cache directory, Memory cache, disk cache fe_SetTextField(fep->cache_dir_text, prefs->cache_dir); sensitive = !PREF_PrefIsLocked("browser.cache.directory"); XtSetSensitive(fep->cache_dir_text, sensitive); XtSetSensitive(fep->browse_button, sensitive); char buf [255]; PR_snprintf(buf, sizeof(buf), "%d", prefs->memory_cache_size); XtVaSetValues(fep->mem_text, XmNvalue, buf, 0); sensitive = !PREF_PrefIsLocked("browser.cache.memory_cache_size"); XtSetSensitive(fep->mem_text, sensitive); PR_snprintf(buf, sizeof(buf), "%d", prefs->disk_cache_size); XtVaSetValues(fep->disk_text, XmNvalue, buf, 0); sensitive = !PREF_PrefIsLocked("browser.cache.disk_cache_size"); XtSetSensitive(fep->disk_text, sensitive); // Verify cache XtVaSetValues(fep->once_toggle, XmNset, prefs->verify_documents == 0, 0); XtVaSetValues(fep->every_toggle, XmNset, prefs->verify_documents == 1, 0); XtVaSetValues(fep->never_toggle, XmNset, prefs->verify_documents == 2, 0); // If pref is locked, grey it out. sensitive = !PREF_PrefIsLocked("browser.cache.check_doc_frequency"); XtSetSensitive(fep->once_toggle, sensitive); XtSetSensitive(fep->every_toggle, sensitive); XtSetSensitive(fep->never_toggle, sensitive); setInitialized(TRUE); } // Member: install // Description: // Inputs: // Side effects: void XFE_PrefsPageGeneralCache::install() { fe_installGeneralCache(); } // Write prefs UI to PREF backend. void XFE_PrefsPageGeneralCache::write() { PrefsDataGeneralCache *fep = m_prefsDataGeneralCache; Boolean b; XP_ASSERT(fep); char *text; char dummy; int size = 0; char *s = 0; XP_FREEIF(fe_globalPrefs.cache_dir); s = fe_GetTextField(fep->cache_dir_text); fe_globalPrefs.cache_dir = s ? s : XP_STRDUP(""); // Memory cache text = 0; XtVaGetValues(fep->mem_text, XmNvalue, &text, 0); if (1 == sscanf (text, " %d %c", &size, &dummy) && size >= 0) fe_globalPrefs.memory_cache_size = size; if (text) XtFree(text); // Disk cache text = 0; XtVaGetValues(fep->disk_text, XmNvalue, &text, 0); if (1 == sscanf (text, " %d %c", &size, &dummy) && size >= 0) fe_globalPrefs.disk_cache_size = size; if (text) XtFree(text); // Verify document in cache XtVaGetValues(fep->once_toggle, XmNset, &b, 0); if (b) fe_globalPrefs.verify_documents = 0; XtVaGetValues(fep->every_toggle, XmNset, &b, 0); if (b) fe_globalPrefs.verify_documents = 1; XtVaGetValues(fep->never_toggle, XmNset, &b, 0); if (b) fe_globalPrefs.verify_documents = 2; // Install preferences install(); } // Member: getData // Description: // Inputs: // Side effects: PrefsDataGeneralCache *XFE_PrefsPageGeneralCache::getData() { return m_prefsDataGeneralCache; } // Member: cb_browse // Description: // Inputs: // Side effects: void XFE_PrefsPageGeneralCache::cb_browse(Widget /* w */, XtPointer closure, XtPointer /* callData */) { XFE_PrefsPageGeneralCache *thePage = (XFE_PrefsPageGeneralCache *)closure; XFE_PrefsDialog *theDialog = thePage->getPrefsDialog(); PrefsDataGeneralCache *fep = thePage->getData(); fe_browse_file_of_text(theDialog->getContext(), fep->cache_dir_text, True); } // Member: cb_browse // Description: // Inputs: // Side effects: void XFE_PrefsPageGeneralCache::cb_clearDisk(Widget /* w */, XtPointer closure, XtPointer /* callData */) { XFE_PrefsPageGeneralCache *thePage = (XFE_PrefsPageGeneralCache *)closure; XFE_PrefsDialog *theDialog = thePage->getPrefsDialog(); MWContext *context = theDialog->getContext(); int32 size; if (XFE_Confirm (context, fe_globalData.clear_disk_cache_message)) { PREF_GetIntPref("browser.cache.disk_cache_size", &size); PREF_SetIntPref("browser.cache.disk_cache_size", 0); PREF_SetIntPref("browser.cache.disk_cache_size", size); } } // Member: cb_clearMem // Description: // Inputs: // Side effects: void XFE_PrefsPageGeneralCache::cb_clearMem(Widget /* w */, XtPointer closure, XtPointer /* callData */) { XFE_PrefsPageGeneralCache *thePage = (XFE_PrefsPageGeneralCache *)closure; XFE_PrefsDialog *theDialog = thePage->getPrefsDialog(); MWContext *context = theDialog->getContext(); int32 size; if (XFE_Confirm (context, fe_globalData.clear_mem_cache_message)) { PREF_GetIntPref("browser.cache.memory_cache_size", &size); PREF_SetIntPref("browser.cache.memory_cache_size", 0); PREF_SetIntPref("browser.cache.memory_cache_size", size); } } // ************************************************************************ // ************************* General/Proxies ************************* // ************************************************************************ // Member: XFE_PrefsPageGeneralProxies // Description: Constructor // Inputs: // Side effects: XFE_PrefsPageGeneralProxies::XFE_PrefsPageGeneralProxies(XFE_PrefsDialog *dialog) : XFE_PrefsPage(dialog), m_prefsDataGeneralProxies(0) { } // Member: ~XFE_PrefsPageGeneralProxies // Description: Destructor // Inputs: // Side effects: XFE_PrefsPageGeneralProxies::~XFE_PrefsPageGeneralProxies() { delete m_prefsDataGeneralProxies; } // Member: create // Description: Creates page for GeneralProxies // Inputs: // Side effects: void XFE_PrefsPageGeneralProxies::create() { Widget kids[100]; Arg av[50]; int ac; int i; PrefsDataGeneralProxies *fep = NULL; fep = new PrefsDataGeneralProxies; memset(fep, 0, sizeof(PrefsDataGeneralProxies)); m_prefsDataGeneralProxies = fep; fep->context = getContext(); fep->prompt_dialog = getPrefsDialog()->getDialogChrome(); Widget form; ac = 0; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; form = XmCreateForm (m_wPageForm, "proxies", av, ac); XtManageChild (form); m_wPage = fep->page = form; Widget frame1; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_NONE); ac++; frame1 = XmCreateFrame (form, "proxiesFrame", av, ac); Widget form1; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; form1 = XmCreateForm (frame1, "proxiesBox", av, ac); Widget proxiesLabel; proxiesLabel = XtVaCreateManagedWidget("proxiesLabel", xmLabelGadgetClass, form1, XmNalignment, XmALIGNMENT_BEGINNING, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); ac = 0; i = 0; kids[i++] = fep->direct_toggle = XmCreateToggleButtonGadget(form1, "direct", av, ac); kids[i++] = fep->manual_toggle = XmCreateToggleButtonGadget(form1, "manual", av, ac); kids[i++] = fep->auto_toggle = XmCreateToggleButtonGadget(form1, "auto", av, ac); Widget config_label; kids[i++] = config_label = XmCreateLabelGadget(form1, "config", av, ac); kids[i++] = fep->config_url_text = fe_CreateTextField (form1, "configUrl", av, ac); kids[i++] = fep->view_button = XmCreatePushButtonGadget(form1, "view", av, ac); kids[i++] = fep->reload_button = XmCreatePushButtonGadget(form1, "reload", av, ac); XtVaSetValues(fep->direct_toggle, XmNindicatorType, XmONE_OF_MANY, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, proxiesLabel, XmNtopOffset, 4, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 16, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); XtVaSetValues(fep->manual_toggle, XmNindicatorType, XmONE_OF_MANY, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, fep->direct_toggle, XmNtopOffset, 4, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, fep->direct_toggle, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); XtVaSetValues(fep->auto_toggle, XmNindicatorType, XmONE_OF_MANY, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, fep->manual_toggle, XmNtopOffset, 4, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, fep->direct_toggle, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); Dimension indicator_size; Dimension spacing; XtVaGetValues(fep->auto_toggle, XmNindicatorSize, &indicator_size, XmNspacing, &spacing, NULL); int labels_height; labels_height = XfeVaGetTallestWidget(fep->config_url_text, config_label, NULL); XtVaSetValues(config_label, XmNheight, labels_height, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, fep->auto_toggle, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, fep->direct_toggle, XmNleftOffset, indicator_size+spacing, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); XtVaSetValues(fep->config_url_text, XmNcolumns, 25, XmNheight, labels_height, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, config_label, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, config_label, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); XtVaSetValues(fep->view_button, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, fep->manual_toggle, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, fep->manual_toggle, XmNleftOffset, 8, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); XtVaSetValues(fep->reload_button, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, fep->config_url_text, XmNleftAttachment, XmATTACH_NONE, XmNrightAttachment, XmATTACH_OPPOSITE_WIDGET, XmNrightWidget, fep->config_url_text, XmNbottomAttachment, XmATTACH_NONE, NULL); XtAddCallback(fep->direct_toggle, XmNvalueChangedCallback, cb_setProxies, fep); XtAddCallback(fep->manual_toggle, XmNvalueChangedCallback, cb_setProxies, fep); XtAddCallback(fep->auto_toggle, XmNvalueChangedCallback, cb_setProxies, fep); XtAddCallback(fep->view_button, XmNactivateCallback, cb_viewProxies, this); XtAddCallback(fep->reload_button, XmNactivateCallback, cb_reloadProxies, this); XtManageChildren (kids, i); XtManageChild(form1); XtManageChild(frame1); setCreated(TRUE); } // Read prefs from PREF backend. void XFE_PrefsPageGeneralProxies::read() { XP_ASSERT(m_prefsDataGeneralProxies); PrefsDataGeneralProxies *fep = m_prefsDataGeneralProxies; XFE_GlobalPrefs *prefs = &fe_globalPrefs; int state = prefs->proxy_mode; Boolean sensitive; sensitive = !PREF_PrefIsLocked("network.proxy.type"); XtVaSetValues(fep->direct_toggle, XmNset, ((state == PROXY_STYLE_UNSET) || (state == PROXY_STYLE_NONE)), XmNsensitive, sensitive, 0); XtVaSetValues(fep->manual_toggle, XmNset, (state == PROXY_STYLE_MANUAL), XmNsensitive, sensitive, 0); XtVaSetValues(fep->view_button, XmNsensitive, (state == PROXY_STYLE_MANUAL), 0); XtVaSetValues(fep->auto_toggle, XmNset, (state == PROXY_STYLE_AUTOMATIC), XmNsensitive, sensitive, 0); fe_SetTextField(fep->config_url_text, prefs->proxy_url); sensitive = !PREF_PrefIsLocked("network.proxy.autoconfig_url"); XtVaSetValues(fep->config_url_text, XmNsensitive, (state==PROXY_STYLE_AUTOMATIC) && sensitive, 0); XtVaSetValues(fep->reload_button, XmNsensitive, (state==PROXY_STYLE_AUTOMATIC), 0); setInitialized(TRUE); } // Member: install // Description: // Inputs: // Side effects: void XFE_PrefsPageGeneralProxies::install() { fe_installGeneralProxies(); } // Write prefs UI to PREF backend. void XFE_PrefsPageGeneralProxies::write() { PrefsDataGeneralProxies *fep = m_prefsDataGeneralProxies; XP_ASSERT(fep); XP_FREEIF(fe_globalPrefs.proxy_url); char *s1 = fe_GetTextField(fep->config_url_text); fe_globalPrefs.proxy_url = s1 ? s1 : XP_STRDUP(""); if (*s1) { NET_SetProxyServer(PROXY_AUTOCONF_URL, (const char *)s1); } Boolean b; XtVaGetValues(fep->direct_toggle, XmNset, &b, 0); if (b) { NET_SelectProxyStyle(PROXY_STYLE_NONE); fe_globalPrefs.proxy_mode = PROXY_STYLE_NONE; } XtVaGetValues(fep->manual_toggle, XmNset, &b, 0); if (b) { NET_SelectProxyStyle(PROXY_STYLE_MANUAL); fe_globalPrefs.proxy_mode = PROXY_STYLE_MANUAL; } XtVaGetValues(fep->auto_toggle, XmNset, &b, 0); if (b) { NET_SelectProxyStyle(PROXY_STYLE_AUTOMATIC); fe_globalPrefs.proxy_mode = PROXY_STYLE_AUTOMATIC; } // Install preferences install(); } // Member: getData // Description: // Inputs: // Side effects: PrefsDataGeneralProxies *XFE_PrefsPageGeneralProxies::getData() { return m_prefsDataGeneralProxies; } // Member: cb_setProxies // Description: // Inputs: // Side effects: void XFE_PrefsPageGeneralProxies::cb_setProxies(Widget w, XtPointer closure, XtPointer callData) { PrefsDataGeneralProxies *fep = (PrefsDataGeneralProxies *)closure; XmToggleButtonCallbackStruct *cb = (XmToggleButtonCallbackStruct *)callData; if (! cb->set) { XtVaSetValues(w, XmNset, True, 0); } else if (w == fep->direct_toggle){ XtVaSetValues(fep->manual_toggle, XmNset, False, 0); XtVaSetValues(fep->auto_toggle, XmNset, False, 0); XtVaSetValues(fep->config_url_text, XmNsensitive, False, 0); XtVaSetValues(fep->view_button, XmNsensitive, False, 0); XtVaSetValues(fep->reload_button, XmNsensitive, False, 0); } else if (w == fep->manual_toggle){ XtVaSetValues(fep->direct_toggle, XmNset, False, 0); XtVaSetValues(fep->auto_toggle, XmNset, False, 0); XtVaSetValues(fep->view_button, XmNsensitive, True, 0); XtVaSetValues(fep->config_url_text, XmNsensitive, False, 0); XtVaSetValues(fep->reload_button, XmNsensitive, False, 0); } else if (w == fep->auto_toggle){ XtVaSetValues(fep->direct_toggle, XmNset, False, 0); XtVaSetValues(fep->manual_toggle, XmNset, False, 0); XtVaSetValues(fep->view_button, XmNsensitive, False, 0); XtVaSetValues(fep->config_url_text, XmNsensitive, !PREF_PrefIsLocked("network.proxy.autoconfig_url"), 0); XtVaSetValues(fep->reload_button, XmNsensitive, True, 0); } else abort(); } // Member: cb_viewProxies // Description: // Inputs: // Side effects: void XFE_PrefsPageGeneralProxies::cb_viewProxies(Widget /* w */, XtPointer closure, XtPointer /* callData */) { XFE_PrefsPageGeneralProxies *thePage = (XFE_PrefsPageGeneralProxies *)closure; XFE_PrefsDialog *theDialog = thePage->getPrefsDialog(); Widget mainw = theDialog->getBaseWidget(); // while (!XtIsWMShell(mainw) && (XtParent(mainw)!=0)) // mainw = XtParent(mainw); // Instantiate a view proxies dialog XFE_PrefsProxiesViewDialog *theViewDialog = 0; if ((theViewDialog = new XFE_PrefsProxiesViewDialog(theDialog, mainw, "prefsProxiesView")) == 0) { fe_perror(thePage->getContext(), XP_GetString(XFE_OUT_OF_MEMORY_URL)); return; } // Initialize and pop up the view dialog theViewDialog->initPage(); theViewDialog->show(); } // Member: cb_reloadProxies // Description: // Inputs: // Side effects: void XFE_PrefsPageGeneralProxies::cb_reloadProxies(Widget /* w */, XtPointer closure, XtPointer /* callData */) { XFE_PrefsPageGeneralProxies *thePage = (XFE_PrefsPageGeneralProxies *)closure; XFE_PrefsDialog *theDialog = thePage->getPrefsDialog(); PrefsDataGeneralProxies *fep = thePage->getData(); char *s1 = 0; s1 = fe_GetTextField(fep->config_url_text); if (s1 && *s1) { NET_SetProxyServer(PROXY_AUTOCONF_URL, s1); // fe_globalPrefs.proxy_url = XP_STRDUP(s1); } if (s1) XtFree(s1); NET_ReloadProxyConfig(theDialog->getContext()); } // ************************************************************************ // ************************ Advanced/DiskSpace ************************* // ************************************************************************ // Member: XFE_PrefsPageDiskSpace // Description: Constructor // Inputs: // Side effects: XFE_PrefsPageDiskSpace::XFE_PrefsPageDiskSpace(XFE_PrefsDialog *dialog) : XFE_PrefsPage(dialog), m_prefsDataDiskSpace(0) { } // Member: ~XFE_PrefsPageDiskSpace // Description: Destructor // Inputs: // Side effects: XFE_PrefsPageDiskSpace::~XFE_PrefsPageDiskSpace() { delete m_prefsDataDiskSpace; } // Member: create // Description: Creates page for DiskSpace // Inputs: // Side effects: void XFE_PrefsPageDiskSpace::create() { Widget kids[100]; Arg av[50]; int ac; int i; PrefsDataDiskSpace *fep = NULL; fep = new PrefsDataDiskSpace; memset(fep, 0, sizeof(PrefsDataDiskSpace)); m_prefsDataDiskSpace = fep; fep->context = getContext(); fep->prompt_dialog = getPrefsDialog()->getDialogChrome(); Widget form; ac = 0; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; form = XmCreateForm (m_wPageForm, "diskSpace", av, ac); XtManageChild (form); m_wPage = fep->page = form; // All messages Widget frame1; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_NONE); ac++; frame1 = XmCreateFrame (form, "allMsgsFrame", av, ac); Widget form1; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; form1 = XmCreateForm (frame1, "allMsgsBox", av, ac); Widget label1; Widget max_msg_size_toggle; Widget max_msg_size_text; Widget k_label; Widget ask_threshold_toggle; Widget threshold_text; Widget k_label2; ac = 0; XtSetArg (av [ac], XmNchildType, XmFRAME_TITLE_CHILD); ac++; label1 = XmCreateLabelGadget (frame1, "allMsgsBoxLabel", av, ac); ac = 0; i = 0; kids[i++] = max_msg_size_toggle = XmCreateToggleButtonGadget (form1, "maxMsgSize", av, ac); kids[i++] = max_msg_size_text = fe_CreateTextField (form1, "msgSize", av, ac); kids[i++] = k_label = XmCreateLabelGadget(form1, "k", av, ac); kids[i++] = ask_threshold_toggle = XmCreateToggleButtonGadget (form1, "askThreshold", av, ac); kids[i++] = threshold_text = fe_CreateTextField (form1, "threshold", av, ac); kids[i++] = k_label2 = XmCreateLabelGadget(form1, "k2", av, ac); fep->max_msg_size_toggle = max_msg_size_toggle; fep->max_msg_size_text = max_msg_size_text; fep->ask_threshold_toggle = ask_threshold_toggle; fep->threshold_text = threshold_text; int labels_height; labels_height = XfeVaGetTallestWidget(max_msg_size_toggle, max_msg_size_text, k_label, NULL); XtVaSetValues (max_msg_size_toggle, XmNindicatorType, XmN_OF_MANY, XmNheight, labels_height, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (max_msg_size_text, XmNcolumns, 6, XmNheight, labels_height, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, max_msg_size_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, max_msg_size_toggle, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (k_label, XmNheight, labels_height, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, max_msg_size_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, max_msg_size_text, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (ask_threshold_toggle, XmNindicatorType, XmN_OF_MANY, XmNheight, labels_height, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, max_msg_size_toggle, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, max_msg_size_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (threshold_text, XmNcolumns, 6, XmNheight, labels_height, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, ask_threshold_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, ask_threshold_toggle, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (k_label2, XmNheight, labels_height, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, ask_threshold_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, threshold_text, XmNrightAttachment, XmATTACH_NONE, 0); XtManageChildren (kids, i); XtManageChild (label1); XtManageChild (form1); XtManageChild(frame1); // News Messages Only Widget frame2; ac = 0; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_WIDGET); ac++; XtSetArg (av [ac], XmNtopWidget, frame1); ac++; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_NONE); ac++; frame2 = XmCreateFrame (form, "newsMsgsFrame", av, ac); Widget form2; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; form2 = XmCreateForm (frame2, "newsMsgsBox", av, ac); Widget label2; Widget news_msgs_label; Widget keep_news_by_age_toggle; Widget keep_all_news_toggle; Widget keep_news_by_count_toggle; Widget keep_news_days_text; Widget keep_news_count_text; Widget keep_unread_news_toggle; Widget days_label; Widget msgs_label; ac = 0; XtSetArg (av [ac], XmNchildType, XmFRAME_TITLE_CHILD); ac++; label2 = XmCreateLabelGadget (frame2, "newsMsgsBoxLabel", av, ac); ac = 0; i = 0; kids[i++] = news_msgs_label = XmCreateLabelGadget (form2, "newsMsgsLabel", av, ac); kids[i++] = keep_news_by_age_toggle = XmCreateToggleButtonGadget(form2, "keepNewsByAge", av, ac); kids[i++] = keep_all_news_toggle = XmCreateToggleButtonGadget(form2, "keepAllNews", av, ac); kids[i++] = keep_news_by_count_toggle = XmCreateToggleButtonGadget(form2, "keepNewsByCount", av, ac); kids[i++] = keep_unread_news_toggle = XmCreateToggleButtonGadget(form2, "keepUnreadNews", av, ac); kids[i++] = keep_news_days_text = fe_CreateTextField (form2, "numDays", av, ac); kids[i++] = keep_news_count_text = fe_CreateTextField (form2, "numMsgs", av, ac); kids[i++] = days_label = XmCreateLabelGadget (form2, "daysLabel", av, ac); kids[i++] = msgs_label = XmCreateLabelGadget (form2, "msgsLabel", av, ac); fep->keep_all_news_toggle = keep_all_news_toggle; fep->keep_news_by_age_toggle = keep_news_by_age_toggle; fep->keep_news_by_count_toggle = keep_news_by_count_toggle; fep->keep_news_days_text = keep_news_days_text; fep->keep_news_count_text = keep_news_count_text; fep->keep_unread_news_toggle = keep_unread_news_toggle; labels_height = XfeVaGetTallestWidget(keep_news_by_age_toggle, keep_news_days_text, days_label, NULL); XtVaSetValues (news_msgs_label, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (keep_news_by_age_toggle, XmNindicatorType, XmONE_OF_MANY, XmNheight, labels_height, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, news_msgs_label, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 16, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (keep_all_news_toggle, XmNindicatorType, XmONE_OF_MANY, XmNheight, labels_height, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, keep_news_by_age_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, keep_news_by_age_toggle, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (keep_news_by_count_toggle, XmNindicatorType, XmONE_OF_MANY, XmNheight, labels_height, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, keep_all_news_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, keep_news_by_age_toggle, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (keep_unread_news_toggle, XmNindicatorType, XmN_OF_MANY, XmNheight, labels_height, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, keep_news_by_count_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, keep_news_by_age_toggle, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (keep_news_days_text, XmNcolumns, 6, XmNheight, labels_height, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, keep_news_by_age_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, keep_news_by_age_toggle, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (days_label, XmNheight, labels_height, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, keep_news_by_age_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, keep_news_days_text, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (keep_news_count_text, XmNcolumns, 6, XmNheight, labels_height, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, keep_news_by_count_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, keep_news_by_count_toggle, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (msgs_label, XmNheight, labels_height, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, keep_news_count_text, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, keep_news_count_text, XmNrightAttachment, XmATTACH_NONE, 0); XtManageChildren (kids, i); XtManageChild (label2); XtManageChild (form2); XtManageChild(frame2); XtAddCallback(keep_news_by_age_toggle, XmNvalueChangedCallback, cb_toggleKeepNews, fep); XtAddCallback(keep_all_news_toggle, XmNvalueChangedCallback, cb_toggleKeepNews, fep); XtAddCallback(keep_news_by_count_toggle, XmNvalueChangedCallback, cb_toggleKeepNews, fep); setCreated(TRUE); } // Read prefs from PREF backend. void XFE_PrefsPageDiskSpace::read() { XP_ASSERT(m_prefsDataDiskSpace); /* malmer */ PrefsDataDiskSpace *fep = m_prefsDataDiskSpace; XFE_GlobalPrefs *prefs = &fe_globalPrefs; char buf[1024]; // Do not download any message larger than... XtVaSetValues(fep->max_msg_size_toggle, XmNset, prefs->pop3_msg_size_limit_p, XmNsensitive, !PREF_PrefIsLocked("mail.limit_message_size"), 0); PR_snprintf(buf, sizeof(buf), "%d", abs(prefs->pop3_msg_size_limit)); XtVaSetValues(fep->max_msg_size_text, XmNvalue, buf, #if 0 // This can be used when the toggle callback is added. XmNsensitive, prefs->pop3_msg_size_limit_p && !PREF_PrefIsLocked("mail.max_size"), #else XmNsensitive, !PREF_PrefIsLocked("mail.max_size"), #endif 0); XtVaSetValues(fep->ask_threshold_toggle, XmNset, prefs->msg_prompt_purge_threshold, XmNsensitive, !PREF_PrefIsLocked("mail.prompt_purge_threshhold"), 0); PR_snprintf(buf, sizeof(buf), "%d", prefs->msg_purge_threshold); XtVaSetValues(fep->threshold_text, XmNvalue, buf, #if 0 // This can be used when the toggle callback is added. XmNsensitive, prefs->msg_prompt_purge_threshold && !PREF_PrefIsLocked("mail.purge_threshhold"), #else XmNsensitive, !PREF_PrefIsLocked("mail.purge_threshhold"), #endif 0); // Clean up messages XtVaSetValues(fep->keep_all_news_toggle, XmNset, (prefs->news_keep_method == KEEP_ALL_NEWS), XmNsensitive, !PREF_PrefIsLocked("news.keep.method"), 0); XtVaSetValues(fep->keep_news_by_age_toggle, XmNset, (prefs->news_keep_method == KEEP_NEWS_BY_AGE), XmNsensitive, !PREF_PrefIsLocked("news.keep.method"), 0); XtVaSetValues(fep->keep_news_by_count_toggle, XmNset, (prefs->news_keep_method == KEEP_NEWS_BY_COUNT), XmNsensitive, !PREF_PrefIsLocked("news.keep.method"), 0); PR_snprintf(buf, sizeof(buf), "%d", prefs->news_keep_days); XtVaSetValues(fep->keep_news_days_text, XmNvalue, buf, #if 0 // This can be used when the toggle callback is added. XmNsensitive, prefs->news_keep_method == KEEP_NEWS_BY_AGE && !PREF_PrefIsLocked("news.keep.days"), #else XmNsensitive, !PREF_PrefIsLocked("news.keep.days"), #endif 0); PR_snprintf(buf, sizeof(buf), "%d", prefs->news_keep_count); XtVaSetValues(fep->keep_news_count_text, XmNvalue, buf, #if 0 // This can be used when the toggle callback is added. XmNsensitive, prefs->news_keep_method == KEEP_NEWS_BY_COUNT && !PREF_PrefIsLocked("news.keep.count"), #else XmNsensitive, !PREF_PrefIsLocked("news.keep.count"), #endif 0); // Keep unread messages XtVaSetValues(fep->keep_unread_news_toggle, XmNset, prefs->news_keep_only_unread, XmNsensitive, !PREF_PrefIsLocked("news.keep.only_unread"), 0); setInitialized(TRUE); } // Member: install // Description: // Inputs: // Side effects: void XFE_PrefsPageDiskSpace::install() { fe_installDiskSpace(); } // Write prefs UI to PREF backend. void XFE_PrefsPageDiskSpace::write() { PrefsDataDiskSpace *fep = m_prefsDataDiskSpace; XP_ASSERT(fep); Boolean b; char c; char *s = 0; int n; // All messages XtVaGetValues(fep->max_msg_size_toggle, XmNset, &b, 0); fe_globalPrefs.pop3_msg_size_limit_p = b; XtVaGetValues(fep->max_msg_size_text, XmNvalue, &s, 0); fe_globalPrefs.pop3_msg_size_limit = 0; if (1 == sscanf (s, " %d %c", &n, &c)) fe_globalPrefs.pop3_msg_size_limit = n; if (s) XtFree(s); XtVaGetValues(fep->ask_threshold_toggle, XmNset, &b, 0); fe_globalPrefs.msg_prompt_purge_threshold = b; XtVaGetValues(fep->threshold_text, XmNvalue, &s, 0); fe_globalPrefs.msg_purge_threshold = 0; if (1 == sscanf (s, " %d %c", &n, &c)) fe_globalPrefs.msg_purge_threshold = n; if (s) XtFree(s); // News messages XtVaGetValues(fep->keep_all_news_toggle, XmNset, &b, 0); if (b) fe_globalPrefs.news_keep_method = KEEP_ALL_NEWS; XtVaGetValues(fep->keep_news_by_age_toggle, XmNset, &b, 0); if (b) fe_globalPrefs.news_keep_method = KEEP_NEWS_BY_AGE; XtVaGetValues(fep->keep_news_by_count_toggle, XmNset, &b, 0); if (b) fe_globalPrefs.news_keep_method = KEEP_NEWS_BY_COUNT; XtVaGetValues(fep->keep_news_days_text, XmNvalue, &s, 0); fe_globalPrefs.news_keep_days = 0; if (1 == sscanf (s, " %d %c", &n, &c)) fe_globalPrefs.news_keep_days = n; if (s) XtFree(s); XtVaGetValues(fep->keep_news_count_text, XmNvalue, &s, 0); fe_globalPrefs.news_keep_count = 0; if (1 == sscanf (s, " %d %c", &n, &c)) fe_globalPrefs.news_keep_count = n; if (s) XtFree(s); XtVaGetValues(fep->keep_unread_news_toggle, XmNset, &b, 0); fe_globalPrefs.news_keep_only_unread = b; // Install preferences install(); } // Member: getData // Description: // Inputs: // Side effects: PrefsDataDiskSpace *XFE_PrefsPageDiskSpace::getData() { return m_prefsDataDiskSpace; } #if 0 // Member: cb_more // Description: // Inputs: // Side effects: void XFE_PrefsPageDiskSpace::cb_more(Widget /* w */, XtPointer closure, XtPointer /* callData */) { XFE_PrefsPageDiskSpace *thePage = (XFE_PrefsPageDiskSpace *)closure; XFE_PrefsDialog *theDialog = thePage->getPrefsDialog(); Widget mainw = theDialog->getBaseWidget(); // while (!XtIsWMShell(mainw) && (XtParent(mainw)!=0)) // mainw = XtParent(mainw); // Instantiate a mail server more dialog XFE_PrefsDiskMoreDialog *theMoreDialog = 0; if ((theMoreDialog = new XFE_PrefsDiskMoreDialog(theDialog, mainw, "prefsDiskMore")) == 0) { fe_perror(thePage->getContext(), XP_GetString(XFE_OUT_OF_MEMORY_URL)); return; } // Initialize and pop up the more dialog theMoreDialog->initPage(); theMoreDialog->show(); } #endif void XFE_PrefsPageDiskSpace::cb_toggleKeepNews(Widget widget, XtPointer closure, XtPointer call_data) { PrefsDataDiskSpace *fep = (PrefsDataDiskSpace *)closure; XmToggleButtonCallbackStruct *cb = (XmToggleButtonCallbackStruct *)call_data; if (! cb->set) { XtVaSetValues(widget, XmNset, True, 0); } else if (widget == fep->keep_news_by_age_toggle) { XtVaSetValues(fep->keep_all_news_toggle, XmNset, False, 0); XtVaSetValues(fep->keep_news_by_count_toggle, XmNset, False, 0); } else if (widget == fep->keep_all_news_toggle) { XtVaSetValues(fep->keep_news_by_age_toggle, XmNset, False, 0); XtVaSetValues(fep->keep_news_by_count_toggle, XmNset, False, 0); } else if (widget == fep->keep_news_by_count_toggle) { XtVaSetValues(fep->keep_news_by_age_toggle, XmNset, False, 0); XtVaSetValues(fep->keep_all_news_toggle, XmNset, False, 0); } else abort(); } #ifdef PREFS_UNSUPPORTED // ************************************************************************ // ************************ Advanced/Help Files ************************* // ************************************************************************ // Member: XFE_PrefsPageHelpFiles // Description: Constructor // Inputs: // Side effects: XFE_PrefsPageHelpFiles::XFE_PrefsPageHelpFiles(XFE_PrefsDialog *dialog) : XFE_PrefsPage(dialog), m_prefsDataHelpFiles(0) { } // Member: ~XFE_PrefsPageHelpFiles // Description: Destructor // Inputs: // Side effects: XFE_PrefsPageHelpFiles::~XFE_PrefsPageHelpFiles() { delete m_prefsDataHelpFiles; } // Member: create // Description: Creates page for HelpFiles // Inputs: // Side effects: void XFE_PrefsPageHelpFiles::create() { Widget kids[100]; Arg av[50]; int ac; int i; PrefsDataHelpFiles *fep = NULL; fep = new PrefsDataHelpFiles; memset(fep, 0, sizeof(PrefsDataHelpFiles)); m_prefsDataHelpFiles = fep; fep->context = getContext(); fep->prompt_dialog = getPrefsDialog()->getDialogChrome(); Widget form; ac = 0; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; form = XmCreateForm (m_wPageForm, "helpFiles", av, ac); XtManageChild (form); m_wPage = fep->page = form; Widget frame1; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_NONE); ac++; frame1 = XmCreateFrame (form, "helpFrame", av, ac); Widget form1; ac = 0; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; form1 = XmCreateForm (frame1, "helpBox", av, ac); Widget help_label; Widget netscape_toggle; Widget install_toggle; Widget custom_toggle; Widget custom_url_text; Widget browse_button; ac = 0; i = 0; kids[i++] = help_label = XmCreateLabelGadget(form1, "helpLabel", av, ac); kids[i++] = netscape_toggle = XmCreateToggleButtonGadget(form1, "netscapeToggle", av, ac); kids[i++] = install_toggle = XmCreateToggleButtonGadget(form1, "installToggle", av, ac); kids[i++] = custom_toggle = XmCreateToggleButtonGadget(form1, "customToggle", av, ac); kids[i++] = custom_url_text = fe_CreateTextField (form1, "customUrl", av, ac); kids[i++] = browse_button = XmCreatePushButtonGadget(form1, "browse", av, ac); fep->netscape_toggle = netscape_toggle; fep->install_toggle = install_toggle; fep->custom_toggle = custom_toggle; fep->custom_url_text = custom_url_text; fep->browse_button = browse_button; int labels_height; labels_height = XfeVaGetTallestWidget(custom_toggle, custom_url_text, NULL); XtVaSetValues (help_label, XmNheight, labels_height, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (netscape_toggle, XmNindicatorType, XmONE_OF_MANY, XmNheight, labels_height, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, help_label, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 16, XmNbottomAttachment, XmATTACH_NONE, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (install_toggle, XmNindicatorType, XmONE_OF_MANY, XmNheight, labels_height, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, netscape_toggle, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, netscape_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (custom_toggle, XmNindicatorType, XmONE_OF_MANY, XmNheight, labels_height, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, install_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, install_toggle, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (custom_url_text, XmNcolumns, 35, XmNheight, labels_height, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, custom_toggle, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, custom_toggle, XmNrightAttachment, XmATTACH_NONE, 0); XtVaSetValues (browse_button, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, custom_url_text, XmNtopOffset, 8, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_NONE, XmNrightAttachment, XmATTACH_OPPOSITE_WIDGET, XmNrightWidget, custom_url_text, 0); XtManageChildren (kids, i); XtManageChild (form1); XtManageChild(frame1); XtAddCallback(netscape_toggle, XmNvalueChangedCallback, cb_toggleHelpSite, fep); XtAddCallback(install_toggle, XmNvalueChangedCallback, cb_toggleHelpSite, fep); XtAddCallback(custom_toggle, XmNvalueChangedCallback, cb_toggleHelpSite, fep); XtAddCallback(browse_button, XmNactivateCallback, cb_browse, this); setCreated(TRUE); } // Member: init // Description: Initializes page for HelpFiles // Inputs: // Side effects: void XFE_PrefsPageHelpFiles::init() { XP_ASSERT(m_prefsDataHelpFiles); PrefsDataHelpFiles *fep = m_prefsDataHelpFiles; XFE_GlobalPrefs *prefs = &fe_globalPrefs; Boolean sensitive; sensitive = !PREF_PrefIsLocked("general.help_source.site"); XtVaSetValues(fep->netscape_toggle, XmNset, (prefs->help_source_site == HELPFILE_SITE_NETSCAPE), XmNsensitive, sensitive, 0); XtVaSetValues(fep->install_toggle, XmNset, (prefs->help_source_site == HELPFILE_SITE_INSTALLED), XmNsensitive, sensitive, 0); XtVaSetValues(fep->custom_toggle, XmNset, (prefs->help_source_site == HELPFILE_SITE_CUSTOM), XmNsensitive, sensitive, 0); sensitive = prefs->help_source_site == HELPFILE_SITE_CUSTOM && !PREF_PrefIsLocked("general.help_source.url"); XtVaSetValues(fep->custom_url_text, XmNsensitive, sensitive, 0); fe_SetTextField(fep->custom_url_text, prefs->help_source_url); XtSetSensitive(fep->browse_button, sensitive); setInitialized(TRUE); } // Member: install // Description: // Inputs: // Side effects: void XFE_PrefsPageHelpFiles::install() { } // Member: save // Description: // Inputs: // Side effects: void XFE_PrefsPageHelpFiles::save() { PrefsDataHelpFiles *fep = m_prefsDataHelpFiles; XP_ASSERT(fep); Boolean b; XtVaGetValues(fep->netscape_toggle, XmNset, &b, 0); if (b) fe_globalPrefs.help_source_site = HELPFILE_SITE_NETSCAPE; XtVaGetValues(fep->install_toggle, XmNset, &b, 0); if (b) fe_globalPrefs.help_source_site = HELPFILE_SITE_INSTALLED; XtVaGetValues(fep->custom_toggle, XmNset, &b, 0); if (b) fe_globalPrefs.help_source_site = HELPFILE_SITE_CUSTOM; XP_FREEIF(fe_globalPrefs.help_source_url); char *s = fe_GetTextField(fep->custom_url_text); fe_globalPrefs.help_source_url = s ? s : XP_STRDUP(""); // Install preferences install(); } // Member: getData // Description: // Inputs: // Side effects: PrefsDataHelpFiles *XFE_PrefsPageHelpFiles::getData() { return m_prefsDataHelpFiles; } // Member: cb_toggleHelpSite // Description: // Inputs: // Side effects: void XFE_PrefsPageHelpFiles::cb_toggleHelpSite(Widget w, XtPointer closure, XtPointer callData) { XmToggleButtonCallbackStruct *cb = (XmToggleButtonCallbackStruct *)callData; PrefsDataHelpFiles *fep = (PrefsDataHelpFiles *)closure; Boolean sensitive; if (! cb->set) { XtVaSetValues(w, XmNset, True, 0); } else if (w == fep->netscape_toggle) { XtVaSetValues(fep->install_toggle, XmNset, False, 0); XtVaSetValues(fep->custom_toggle, XmNset, False, 0); } else if (w == fep->install_toggle) { XtVaSetValues(fep->netscape_toggle, XmNset, False, 0); XtVaSetValues(fep->custom_toggle, XmNset, False, 0); } else if (w == fep->custom_toggle) { XtVaSetValues(fep->netscape_toggle, XmNset, False, 0); XtVaSetValues(fep->install_toggle, XmNset, False, 0); } else abort(); sensitive = ( w == fep->custom_toggle && !PREF_PrefIsLocked("general.help_source.url") ); XtSetSensitive(fep->custom_url_text, sensitive); XtSetSensitive(fep->browse_button, sensitive); } // Member: cb_more // Description: // Inputs: // Side effects: void XFE_PrefsPageHelpFiles::cb_browse(Widget /* w */, XtPointer closure, XtPointer /* callData */) { XFE_PrefsPageHelpFiles *thePage = (XFE_PrefsPageHelpFiles *)closure; XFE_PrefsDialog *theDialog = thePage->getPrefsDialog(); PrefsDataHelpFiles *fep = thePage->getData(); fe_browse_file_of_text_in_url(theDialog->getContext(), fep->custom_url_text, True); } #endif /* PREFS_UNSUPPORTED */