/* -*- 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): */ /* PrefsDiskMore.cpp -- The more dialog for Offline Disk Space preference Created: Linda Wei , 16-Dec-96. */ #include "felocale.h" #include "structs.h" #include "fonts.h" #include "xpassert.h" #include "xfe.h" #include "e_kit.h" #include "PrefsDiskMore.h" #include #include #include #include #include #include #include #include #include #include extern int XFE_ERROR_SAVING_OPTIONS; extern "C" { char *XP_GetString(int i); void fe_installDiskMore(); } // ==================== Public Member Functions ==================== // Member: XFE_PrefsDiskMoreDialog // Description: Constructor // Inputs: // Side effects: Creates the More dialog for Offline Disk Space Preferences XFE_PrefsDiskMoreDialog::XFE_PrefsDiskMoreDialog(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_prefsDataDiskMore(0) { PrefsDataDiskMore *fep = NULL; fep = new PrefsDataDiskMore; memset(fep, 0, sizeof(PrefsDataDiskMore)); m_prefsDataDiskMore = fep; Widget form; Widget desc_label; Widget rm_msg_body_toggle; Widget num_days_text; Widget days_label; Widget kids[100]; Arg av[50]; int ac; int i; form = XtVaCreateWidget("form", xmFormWidgetClass, m_chrome, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); XtManageChild (form); ac = 0; i = 0; kids[i++] = desc_label = XmCreateLabelGadget(form, "descLabel", av, ac); kids[i++] = rm_msg_body_toggle = XmCreateToggleButtonGadget (form, "rmMsgBodyToggle", av, ac); kids[i++] = num_days_text = fe_CreateTextField(form, "numDaysText", av, ac); kids[i++] = days_label = XmCreateLabelGadget(form, "daysLabel", av, ac); XtVaSetValues(desc_label, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); int labels_height; labels_height = XfeVaGetTallestWidget(rm_msg_body_toggle, num_days_text, days_label, NULL); XtVaSetValues(rm_msg_body_toggle, XmNheight, labels_height, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, desc_label, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftWidget, desc_label, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); XtVaSetValues(num_days_text, XmNheight, labels_height, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, rm_msg_body_toggle, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, rm_msg_body_toggle, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); XtVaSetValues(days_label, XmNheight, labels_height, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, rm_msg_body_toggle, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, num_days_text, XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL); fep->rm_msg_body_toggle = rm_msg_body_toggle; fep->num_days_text = num_days_text; // Add callbacks XtAddCallback(m_chrome, XmNokCallback, prefsDiskMoreCb_ok, this); XtAddCallback(m_chrome, XmNcancelCallback, prefsDiskMoreCb_cancel, this); XtManageChildren(kids, i); } // Member: ~XFE_PrefsDiskMoreDialog // Description: Destructor // Inputs: // Side effects: XFE_PrefsDiskMoreDialog::~XFE_PrefsDiskMoreDialog() { // Clean up delete m_prefsDataDiskMore; } // Member: show // Description: Pop up dialog // Inputs: // Side effects: void XFE_PrefsDiskMoreDialog::show() { // TODO: Initialize the dialog // Manage the top level XFE_Dialog::show(); // Set focus to the OK button XmProcessTraversal(m_okButton, XmTRAVERSE_CURRENT); } // Member: initPage // Description: Initializes page for MailNewsDiskMore // Inputs: // Side effects: void XFE_PrefsDiskMoreDialog::initPage() { XP_ASSERT(m_prefsDataDiskMore); PrefsDataDiskMore *fep = m_prefsDataDiskMore; XFE_GlobalPrefs *prefs = &fe_globalPrefs; char buf[1024]; XtVaSetValues(fep->rm_msg_body_toggle, XmNset, prefs->news_remove_bodies_by_age, 0); PR_snprintf(buf, sizeof(buf), "%d", prefs->news_remove_bodies_days); XtVaSetValues(fep->num_days_text, XmNvalue, buf, 0); } // Member: verifyPage // Description: verify page for MailNewsDiskMore // Inputs: // Side effects: Boolean XFE_PrefsDiskMoreDialog::verifyPage() { return TRUE; } // Member: installChanges // Description: install changes for MailNewsDiskMore // Inputs: // Side effects: void XFE_PrefsDiskMoreDialog::installChanges() { fe_installDiskMore(); } // Member: getContext // Description: returns context // Inputs: // Side effects: MWContext *XFE_PrefsDiskMoreDialog::getContext() { return (m_prefsDialog->getContext()); } // Member: prefsDiskMoreCb_ok // Description: // Inputs: // Side effects: void XFE_PrefsDiskMoreDialog::prefsDiskMoreCb_ok(Widget w, XtPointer closure, XtPointer callData) { XFE_PrefsDiskMoreDialog *theDialog = (XFE_PrefsDiskMoreDialog *)closure; PrefsDataDiskMore *fep = theDialog->m_prefsDataDiskMore; XP_ASSERT(fep); if (! theDialog->verifyPage()) return; Boolean b; char c; char *s = 0; int n; XtVaGetValues(fep->rm_msg_body_toggle, XmNset, &b, 0); fe_globalPrefs.news_remove_bodies_by_age = b; XtVaGetValues(fep->num_days_text, XmNvalue, &s, 0); fe_globalPrefs.news_remove_bodies_days = 0; if (1 == sscanf (s, " %d %c", &n, &c)) fe_globalPrefs.news_remove_bodies_days = n; // Simulate a cancel prefsDiskMoreCb_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: prefsDiskMoreCb_cancel // Description: // Inputs: // Side effects: void XFE_PrefsDiskMoreDialog::prefsDiskMoreCb_cancel(Widget /* w */, XtPointer closure, XtPointer /* callData */) { XFE_PrefsDiskMoreDialog *theDialog = (XFE_PrefsDiskMoreDialog *)closure; // Delete the dialog delete theDialog; }