292 lines
7.2 KiB
C++
292 lines
7.2 KiB
C++
/* -*- 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 <toshok@netscape.com>, 2-Mar-97.
|
|
*/
|
|
|
|
|
|
|
|
#include "NewsPromptDialog.h"
|
|
#include "prefapi.h"
|
|
|
|
#include "xp_mem.h"
|
|
#include "prprf.h"
|
|
|
|
#include <Xm/Form.h>
|
|
#include <Xm/LabelG.h>
|
|
#include <Xm/TextF.h>
|
|
#include <Xm/ToggleBG.h>
|
|
|
|
#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();
|
|
}
|
|
|