/* -*- 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. */ /* NewsPromptDialog.cpp -- dialog for letting the user specify how many articles to download Created: Chris Toshok , 2-Mar-97. */ #include "NewsPromptDialog.h" #include "prefapi.h" #include "xp_mem.h" #include "prprf.h" #include #include #include #include #include "xpgetstr.h" #include "felocale.h" extern int XFE_THERE_ARE_N_ARTICLES; // needed for the post() method. extern "C" void fe_EventLoop(); XFE_NewsPromptDialog::XFE_NewsPromptDialog(Widget parent, int numMessages) : XFE_Dialog(parent, "NewsDownload", TRUE, // ok TRUE, // cancel FALSE, // help FALSE, // apply TRUE, // separator TRUE // modal ) { Widget form; XmString str; char *buf; int32 current_max; m_downloadall = False; form = XmCreateForm(m_chrome, "downloadForm", NULL, 0); buf = PR_smprintf(XP_GetString(XFE_THERE_ARE_N_ARTICLES), numMessages); str = XmStringCreate(buf, XmFONTLIST_DEFAULT_TAG); XP_FREE(buf); m_label = XtVaCreateManagedWidget("downloadCaption", xmLabelGadgetClass, form, XmNlabelString, str, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, NULL); XmStringFree(str); m_alltoggle = XtVaCreateManagedWidget("allToggle", xmToggleButtonGadgetClass, form, XmNindicatorType, XmONE_OF_MANY, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, m_label, XmNbottomAttachment, XmATTACH_NONE, NULL); m_nummessages_toggle = XtVaCreateManagedWidget("numMessagesToggle", xmToggleButtonGadgetClass, form, XmNindicatorType, XmONE_OF_MANY, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, m_alltoggle, XmNbottomAttachment, XmATTACH_NONE, NULL); m_nummessages_text = XtVaCreateManagedWidget("numMessagesText", xmTextFieldWidgetClass, form, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, m_nummessages_toggle, XmNrightAttachment, XmATTACH_NONE, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, m_nummessages_toggle, XmNbottomAttachment, XmATTACH_NONE, NULL); m_nummessages_caption = XtVaCreateManagedWidget("numMessagesCaption", xmLabelGadgetClass, form, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, m_nummessages_text, XmNrightAttachment, XmATTACH_NONE, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, m_nummessages_text, XmNbottomAttachment, XmATTACH_NONE, NULL); PREF_GetIntPref("news.max_articles", ¤t_max); buf = PR_smprintf("%d", current_max); fe_SetTextFieldAndCallBack(m_nummessages_text, buf); XP_FREE(buf); { XP_Bool markothersread; PREF_GetBoolPref("news.mark_old_read", &markothersread); m_markothersread_toggle = XtVaCreateManagedWidget("markOthersRead", xmToggleButtonGadgetClass, form, XmNset, markothersread, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 20, XmNrightAttachment, XmATTACH_NONE, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, m_nummessages_text, XmNbottomAttachment, XmATTACH_NONE, NULL); } XtAddCallback(m_alltoggle, XmNvalueChangedCallback, toggle_cb, this); XtAddCallback(m_nummessages_toggle, XmNvalueChangedCallback, toggle_cb, this); XtAddCallback(m_markothersread_toggle, XmNvalueChangedCallback, toggle_markread_cb, this); XmToggleButtonGadgetSetState(m_alltoggle, True, True); XtManageChild(form); XtAddCallback(m_chrome, XmNokCallback, ok_cb, this); XtAddCallback(m_chrome, XmNcancelCallback, cancel_cb, this); } XFE_NewsPromptDialog::~XFE_NewsPromptDialog() { // nothing needed (that I'm aware of) yet. } XP_Bool XFE_NewsPromptDialog::post() { m_doneWithLoop = False; XtVaSetValues(m_chrome, XmNdeleteResponse, XmUNMAP, NULL); show(); while(!m_doneWithLoop) { fe_EventLoop(); } return m_retVal; } XP_Bool XFE_NewsPromptDialog::getDownloadAll() { return m_downloadall; } void XFE_NewsPromptDialog::ok() { char *num_messages_str; int num_messages; num_messages_str = fe_GetTextField(m_nummessages_text); num_messages = atoi(num_messages_str); // XtFree(num_messages_str); ?? if (num_messages) { PREF_SetIntPref("news.max_articles", num_messages); } m_doneWithLoop = True; m_retVal = True; hide(); } void XFE_NewsPromptDialog::cancel() { m_doneWithLoop = True; m_retVal = False; hide(); } void XFE_NewsPromptDialog::toggle(Widget w, XtPointer cd) { XmToggleButtonCallbackStruct *cb = (XmToggleButtonCallbackStruct*)cd; if (!cb->set) { XtVaSetValues(w, XmNset, True, 0); } else if (w == m_alltoggle) { m_downloadall = True; XtVaSetValues(m_nummessages_toggle, XmNset, False, 0); XtSetSensitive(m_nummessages_text, False); XtSetSensitive(m_markothersread_toggle, False); } else { m_downloadall = False; XtVaSetValues(m_alltoggle, XmNset, False, 0); XtSetSensitive(m_nummessages_text, True); XtSetSensitive(m_markothersread_toggle, True); } } void XFE_NewsPromptDialog::toggle_markread() { PREF_SetBoolPref("news.mark_old_read", XmToggleButtonGadgetGetState(m_markothersread_toggle)); } void XFE_NewsPromptDialog::ok_cb(Widget, XtPointer clientData, XtPointer) { XFE_NewsPromptDialog *obj = (XFE_NewsPromptDialog*)clientData; obj->ok(); } void XFE_NewsPromptDialog::cancel_cb(Widget, XtPointer clientData, XtPointer) { XFE_NewsPromptDialog *obj = (XFE_NewsPromptDialog*)clientData; obj->cancel(); } void XFE_NewsPromptDialog::toggle_cb(Widget w, XtPointer clientData, XtPointer cd) { XFE_NewsPromptDialog *obj = (XFE_NewsPromptDialog*)clientData; obj->toggle(w, cd); } void XFE_NewsPromptDialog::toggle_markread_cb(Widget, XtPointer clientData, XtPointer) { XFE_NewsPromptDialog *obj = (XFE_NewsPromptDialog*)clientData; obj->toggle_markread(); }