/* -*- 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.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/NPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All * Rights Reserved. * * Contributor(s): */ /* PrefsMsgMore.cpp -- The more dialog for Mail messages preference Created: Linda Wei , 04-Mar-97. */ #include "felocale.h" #include "structs.h" #include "fonts.h" #include "xpassert.h" #include "xfe.h" #include "e_kit.h" #include "prefapi.h" #include "PrefsMsgMore.h" #include #include #include #include #include #include #include #include #include extern int XFE_ERROR_SAVING_OPTIONS; extern "C" { char *XP_GetString(int i); } // ==================== Public Member Functions ==================== // Member: XFE_PrefsMsgMoreDialog // Description: Constructor // Inputs: // Side effects: Creates the More dialog for Mail Messages Preferences XFE_PrefsMsgMoreDialog::XFE_PrefsMsgMoreDialog(XFE_PrefsDialog *prefsDialog, Widget parent, // dialog parent char *name, // dialog name Boolean modal) // modal dialog? : XFE_Dialog(parent, name, TRUE, // ok TRUE, // cancel FALSE, // help FALSE, // apply FALSE, // separator modal // modal ), m_prefsDialog(prefsDialog), m_prefsDataMsgMore(0) { PrefsDataMsgMore *fep = NULL; fep = new PrefsDataMsgMore; memset(fep, 0, sizeof(PrefsDataMsgMore)); m_prefsDataMsgMore = fep; Widget form; Widget names_and_nicknames_toggle; Widget nicknames_only_toggle; Widget eight_bit_toggle; Widget quoted_printable_toggle; Widget kids[100]; Arg av[50]; int ac; int i; form = XtVaCreateWidget("form", xmFormWidgetClass, m_chrome, XmNmarginWidth, 8, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); XtManageChild (form); // Addressing 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, "addressFrame", 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, "addressBox", av, ac); Widget label1; ac = 0; XtSetArg (av [ac], XmNchildType, XmFRAME_TITLE_CHILD); ac++; label1 = XmCreateLabelGadget (frame1, "addressingLabel", av, ac); ac = 0; i = 0; kids [i++] = names_and_nicknames_toggle = XmCreateToggleButtonGadget(form1, "nameAndNicknamesToggle", av, ac); kids [i++] = nicknames_only_toggle = XmCreateToggleButtonGadget(form1, "nicknamesOnlyToggle", av, ac); fep->names_and_nicknames_toggle = names_and_nicknames_toggle; fep->nicknames_only_toggle = nicknames_only_toggle; XtVaSetValues(names_and_nicknames_toggle, XmNalignment, XmALIGNMENT_BEGINNING, XmNindicatorType, XmONE_OF_MANY, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 16, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); XtVaSetValues(nicknames_only_toggle, XmNalignment, XmALIGNMENT_BEGINNING, XmNindicatorType, XmONE_OF_MANY, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, names_and_nicknames_toggle, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, names_and_nicknames_toggle, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); XtManageChildren(kids, i); XtManageChild(label1); XtManageChild(form1); XtManageChild(frame1); // Send messages that use 8-bit characters 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, "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, "frame2Box", av, ac); Widget label2; ac = 0; XtSetArg (av [ac], XmNchildType, XmFRAME_TITLE_CHILD); ac++; label2 = XmCreateLabelGadget (frame2, "composeLabel", av, ac); ac = 0; i = 0; kids [i++] = eight_bit_toggle = XmCreateToggleButtonGadget(form2, "8bitToggle", av, ac); kids[i++] = quoted_printable_toggle = XmCreateToggleButtonGadget(form2, "qpToggle", av, ac); fep->eight_bit_toggle = eight_bit_toggle; fep->quoted_printable_toggle = quoted_printable_toggle; XtVaSetValues(eight_bit_toggle, XmNalignment, XmALIGNMENT_BEGINNING, XmNindicatorType, XmONE_OF_MANY, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 16, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); XtVaSetValues(quoted_printable_toggle, XmNalignment, XmALIGNMENT_BEGINNING, XmNindicatorType, XmONE_OF_MANY, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, eight_bit_toggle, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, eight_bit_toggle, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); fep->eight_bit_toggle = eight_bit_toggle; fep->quoted_printable_toggle = quoted_printable_toggle; XtManageChildren(kids, i); XtManageChild(label2); XtManageChild(form2); XtManageChild(frame2); // Sending messages 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, frame2); 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, "frame3Box", av, ac); Widget label3; ac = 0; XtSetArg (av [ac], XmNchildType, XmFRAME_TITLE_CHILD); ac++; XtSetArg (av [ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++; label3 = XmCreateLabelGadget (frame3, "sendLabel", av, ac); Widget ask_toggle; Widget send_text_toggle; Widget send_html_toggle; Widget send_both_toggle; ac = 0; i = 0; kids [i++] = ask_toggle = XmCreateToggleButtonGadget(form3, "askToggle", av, ac); kids[i++] = send_text_toggle = XmCreateToggleButtonGadget(form3, "sendTextToggle", av, ac); kids[i++] = send_html_toggle = XmCreateToggleButtonGadget(form3, "sendHtmlToggle", av, ac); kids[i++] = send_both_toggle = XmCreateToggleButtonGadget(form3, "sendBothToggle", av, ac); fep->ask_toggle = ask_toggle; fep->send_text_toggle = send_text_toggle; fep->send_html_toggle = send_html_toggle; fep->send_both_toggle = send_both_toggle; XtVaSetValues(ask_toggle, XmNalignment, XmALIGNMENT_BEGINNING, XmNindicatorType, XmONE_OF_MANY, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 16, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); XtVaSetValues(send_text_toggle, XmNalignment, XmALIGNMENT_BEGINNING, XmNindicatorType, XmONE_OF_MANY, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, ask_toggle, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, ask_toggle, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); XtVaSetValues(send_html_toggle, XmNalignment, XmALIGNMENT_BEGINNING, XmNindicatorType, XmONE_OF_MANY, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, send_text_toggle, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, ask_toggle, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); XtVaSetValues(send_both_toggle, XmNalignment, XmALIGNMENT_BEGINNING, XmNindicatorType, XmONE_OF_MANY, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, send_html_toggle, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, ask_toggle, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); XtManageChildren(kids, i); XtManageChild(label3); XtManageChild(form3); XtManageChild(frame3); // Add callbacks XtAddCallback(m_chrome, XmNokCallback, cb_ok, this); XtAddCallback(m_chrome, XmNcancelCallback, cb_cancel, this); XtAddCallback(names_and_nicknames_toggle, XmNvalueChangedCallback, cb_toggleAddressing, fep); XtAddCallback(nicknames_only_toggle, XmNvalueChangedCallback, cb_toggleAddressing, fep); XtAddCallback(eight_bit_toggle, XmNvalueChangedCallback, cb_toggleEncoding, fep); XtAddCallback(quoted_printable_toggle, XmNvalueChangedCallback, cb_toggleEncoding, fep); XtAddCallback(ask_toggle, XmNvalueChangedCallback, cb_toggleSend, fep); XtAddCallback(send_text_toggle, XmNvalueChangedCallback, cb_toggleSend, fep); XtAddCallback(send_html_toggle, XmNvalueChangedCallback, cb_toggleSend, fep); XtAddCallback(send_both_toggle, XmNvalueChangedCallback, cb_toggleSend, fep); } // Member: ~XFE_PrefsMsgMoreDialog // Description: Destructor // Inputs: // Side effects: XFE_PrefsMsgMoreDialog::~XFE_PrefsMsgMoreDialog() { // Clean up delete m_prefsDataMsgMore; } // Member: show // Description: Pop up dialog // Inputs: // Side effects: void XFE_PrefsMsgMoreDialog::show() { // Manage the top level XFE_Dialog::show(); // Set focus to the OK button XmProcessTraversal(m_okButton, XmTRAVERSE_CURRENT); } // Member: initPage // Description: Initializes page for MailNewsMsgMore // Inputs: // Side effects: void XFE_PrefsMsgMoreDialog::initPage() { XP_ASSERT(m_prefsDataMsgMore); PrefsDataMsgMore *fep = m_prefsDataMsgMore; XFE_GlobalPrefs *prefs = &fe_globalPrefs; XP_Bool b; Boolean sensitive; sensitive = !PREF_PrefIsLocked("mailnews.nicknames_only"); b = prefs->expand_addr_nicknames_only; XtVaSetValues(fep->nicknames_only_toggle, XmNset, b, XmNsensitive, sensitive, 0); XtVaSetValues(fep->names_and_nicknames_toggle, XmNset, !b, XmNsensitive, sensitive, 0); // 8-bit or quoted printable sensitive = !PREF_PrefIsLocked("mail.strictly_mime"); XtVaSetValues(fep->eight_bit_toggle, XmNset, !prefs->qp_p, XmNsensitive, sensitive, 0); XtVaSetValues(fep->quoted_printable_toggle, XmNset, prefs->qp_p, XmNsensitive, sensitive, 0); // Sending HTML messages sensitive = !PREF_PrefIsLocked("mail.default_html_action"); XtVaSetValues(fep->ask_toggle, XmNset, (prefs->html_def_action == HTML_ACTION_ASK), XmNsensitive, sensitive, 0); XtVaSetValues(fep->send_text_toggle, XmNset, (prefs->html_def_action == HTML_ACTION_TEXT), XmNsensitive, sensitive, 0); XtVaSetValues(fep->send_html_toggle, XmNset, (prefs->html_def_action == HTML_ACTION_HTML), XmNsensitive, sensitive, 0); XtVaSetValues(fep->send_both_toggle, XmNset, (prefs->html_def_action == HTML_ACTION_BOTH), XmNsensitive, sensitive, 0); } // Member: verifyPage // Description: verify page for MailNewsMsgMore // Inputs: // Side effects: Boolean XFE_PrefsMsgMoreDialog::verifyPage() { return TRUE; } // Member: installChanges // Description: install changes for MailNewsMsgMore // Inputs: // Side effects: void XFE_PrefsMsgMoreDialog::installChanges() { } // Member: getContext // Description: returns context // Inputs: // Side effects: MWContext *XFE_PrefsMsgMoreDialog::getContext() { return (m_prefsDialog->getContext()); } // Member: prefsMsgMoreCb_ok // Description: // Inputs: // Side effects: void XFE_PrefsMsgMoreDialog::cb_ok(Widget w, XtPointer closure, XtPointer callData) { XFE_PrefsMsgMoreDialog *theDialog = (XFE_PrefsMsgMoreDialog *)closure; PrefsDataMsgMore *fep = theDialog->m_prefsDataMsgMore; Boolean b; XP_ASSERT(fep); if (! theDialog->verifyPage()) return; // addressing messages XtVaGetValues(fep->nicknames_only_toggle, XmNset, &b, 0); fe_globalPrefs.expand_addr_nicknames_only = b; // 8bit, quoted printable XtVaGetValues(fep->quoted_printable_toggle, XmNset, &b, 0); fe_globalPrefs.qp_p = b; // Default html action XtVaGetValues(fep->ask_toggle, XmNset, &b, 0); if (b) fe_globalPrefs.html_def_action = HTML_ACTION_ASK; XtVaGetValues(fep->send_text_toggle, XmNset, &b, 0); if (b) fe_globalPrefs.html_def_action = HTML_ACTION_TEXT; XtVaGetValues(fep->send_html_toggle, XmNset, &b, 0); if (b) fe_globalPrefs.html_def_action = HTML_ACTION_HTML; XtVaGetValues(fep->send_both_toggle, XmNset, &b, 0); if (b) fe_globalPrefs.html_def_action = HTML_ACTION_BOTH; // Simulate a cancel theDialog->cb_cancel(w, closure, callData); // Install preferences theDialog->installChanges(); // Save the preferences at the end, so that if we've found some setting that // crashes, it won't get saved... if (! fe_CheckVersionAndSavePrefs((char *) fe_globalData.user_prefs_file, &fe_globalPrefs)) fe_perror (theDialog->getContext(), XP_GetString( XFE_ERROR_SAVING_OPTIONS)); } // Member: prefsMsgMoreCb_cancel // Description: // Inputs: // Side effects: void XFE_PrefsMsgMoreDialog::cb_cancel(Widget /* w */, XtPointer closure, XtPointer /* callData */) { XFE_PrefsMsgMoreDialog *theDialog = (XFE_PrefsMsgMoreDialog *)closure; // Delete the dialog delete theDialog; } void XFE_PrefsMsgMoreDialog::cb_toggleEncoding(Widget w, XtPointer closure, XtPointer callData) { XmToggleButtonCallbackStruct *cb = (XmToggleButtonCallbackStruct *)callData; PrefsDataMsgMore *fep = (PrefsDataMsgMore *)closure; if (! cb->set) { XtVaSetValues(w, XmNset, True, 0); } else if (w == fep->eight_bit_toggle) { XtVaSetValues(fep->quoted_printable_toggle, XmNset, False, 0); } else if (w == fep->quoted_printable_toggle) { XtVaSetValues(fep->eight_bit_toggle, XmNset, False, 0); } else abort(); } void XFE_PrefsMsgMoreDialog::cb_toggleAddressing(Widget w, XtPointer closure, XtPointer callData) { XmToggleButtonCallbackStruct *cb = (XmToggleButtonCallbackStruct *)callData; PrefsDataMsgMore *fep = (PrefsDataMsgMore *)closure; if (! cb->set) { XtVaSetValues(w, XmNset, True, 0); } else if (w == fep->names_and_nicknames_toggle) { XtVaSetValues(fep->nicknames_only_toggle, XmNset, False, 0); } else if (w == fep->nicknames_only_toggle) { XtVaSetValues(fep->names_and_nicknames_toggle, XmNset, False, 0); } else abort(); } void XFE_PrefsMsgMoreDialog::cb_toggleSend(Widget w, XtPointer closure, XtPointer callData) { XmToggleButtonCallbackStruct *cb = (XmToggleButtonCallbackStruct *)callData; PrefsDataMsgMore *fep = (PrefsDataMsgMore *)closure; if (! cb->set) { XtVaSetValues(w, XmNset, True, 0); } else if (w == fep->ask_toggle) { XtVaSetValues(fep->send_text_toggle, XmNset, False, 0); XtVaSetValues(fep->send_html_toggle, XmNset, False, 0); XtVaSetValues(fep->send_both_toggle, XmNset, False, 0); } else if (w == fep->send_text_toggle) { XtVaSetValues(fep->ask_toggle, XmNset, False, 0); XtVaSetValues(fep->send_html_toggle, XmNset, False, 0); XtVaSetValues(fep->send_both_toggle, XmNset, False, 0); } else if (w == fep->send_html_toggle) { XtVaSetValues(fep->ask_toggle, XmNset, False, 0); XtVaSetValues(fep->send_text_toggle, XmNset, False, 0); XtVaSetValues(fep->send_both_toggle, XmNset, False, 0); } else if (w == fep->send_both_toggle) { XtVaSetValues(fep->ask_toggle, XmNset, False, 0); XtVaSetValues(fep->send_text_toggle, XmNset, False, 0); XtVaSetValues(fep->send_html_toggle, XmNset, False, 0); } else abort(); }