home *** CD-ROM | disk | FTP | other *** search
/ Tools / WinSN5.0Ver.iso / NETSCAP.50 / WIN1998.ZIP / ns / cmd / xfe / src / NewsPromptDialog.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1998-04-08  |  7.5 KB  |  292 lines

  1. /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
  2.  *
  3.  * The contents of this file are subject to the Netscape Public License
  4.  * Version 1.0 (the "NPL"); you may not use this file except in
  5.  * compliance with the NPL.  You may obtain a copy of the NPL at
  6.  * http://www.mozilla.org/NPL/
  7.  *
  8.  * Software distributed under the NPL is distributed on an "AS IS" basis,
  9.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
  10.  * for the specific language governing rights and limitations under the
  11.  * NPL.
  12.  *
  13.  * The Initial Developer of this code under the NPL is Netscape
  14.  * Communications Corporation.  Portions created by Netscape are
  15.  * Copyright (C) 1998 Netscape Communications Corporation.  All Rights
  16.  * Reserved.
  17.  */
  18. /* 
  19.    NewsPromptDialog.cpp -- dialog for letting the user specify how many articles to download
  20.    Created: Chris Toshok <toshok@netscape.com>, 2-Mar-97.
  21.  */
  22.  
  23.  
  24.  
  25. #include "NewsPromptDialog.h"
  26. #include "prefapi.h"
  27.  
  28. #include "xp_mem.h"
  29. #include "prprf.h"
  30.  
  31. #include <Xm/Form.h>
  32. #include <Xm/LabelG.h>
  33. #include <Xm/TextF.h>
  34. #include <Xm/ToggleBG.h>
  35.  
  36. #include "xpgetstr.h"
  37. #include "felocale.h"
  38. extern int XFE_THERE_ARE_N_ARTICLES;
  39.  
  40. // needed for the post() method.
  41. extern "C" void fe_EventLoop();
  42.  
  43. XFE_NewsPromptDialog::XFE_NewsPromptDialog(Widget parent,
  44.                                            int numMessages)
  45.     : XFE_Dialog(parent, 
  46.                  "NewsDownload",
  47.                  TRUE, // ok
  48.                  TRUE, // cancel
  49.                  FALSE, // help
  50.                  FALSE, // apply
  51.                  TRUE, // separator
  52.                  TRUE // modal
  53.                  )
  54. {
  55.     Widget form;
  56.     XmString str;
  57.     char *buf;
  58.     int32 current_max;
  59.  
  60.     m_downloadall = False;
  61.  
  62.     form = XmCreateForm(m_chrome, "downloadForm", NULL, 0);
  63.     
  64.     buf = PR_smprintf(XP_GetString(XFE_THERE_ARE_N_ARTICLES), numMessages);
  65.  
  66.     str = XmStringCreate(buf, XmFONTLIST_DEFAULT_TAG);
  67.  
  68.     XP_FREE(buf);
  69.  
  70.     m_label = XtVaCreateManagedWidget("downloadCaption",
  71.                                       xmLabelGadgetClass,
  72.                                       form,
  73.                                       XmNlabelString, str,
  74.                                       XmNleftAttachment, XmATTACH_FORM,
  75.                                       XmNrightAttachment, XmATTACH_FORM,
  76.                                       XmNtopAttachment, XmATTACH_FORM,
  77.                                       XmNbottomAttachment, XmATTACH_NONE,
  78.                                       NULL);
  79.  
  80.     XmStringFree(str);
  81.  
  82.     m_alltoggle = XtVaCreateManagedWidget("allToggle",
  83.                                           xmToggleButtonGadgetClass,
  84.                                           form,
  85.                                           XmNindicatorType, XmONE_OF_MANY,
  86.                                           XmNleftAttachment, XmATTACH_FORM,
  87.                                           XmNrightAttachment, XmATTACH_NONE,
  88.                                           XmNtopAttachment, XmATTACH_WIDGET,
  89.                                           XmNtopWidget, m_label,
  90.                                           XmNbottomAttachment, XmATTACH_NONE,
  91.                                           NULL);
  92.                                       
  93.     m_nummessages_toggle = XtVaCreateManagedWidget("numMessagesToggle",
  94.                                                    xmToggleButtonGadgetClass,
  95.                                                    form,
  96.                                                    XmNindicatorType, XmONE_OF_MANY,
  97.                                                    XmNleftAttachment, XmATTACH_FORM,
  98.                                                    XmNrightAttachment, XmATTACH_NONE,
  99.                                                    XmNtopAttachment, XmATTACH_WIDGET,
  100.                                                    XmNtopWidget, m_alltoggle,
  101.                                                    XmNbottomAttachment, XmATTACH_NONE,
  102.                                                    NULL);
  103.  
  104.     m_nummessages_text = XtVaCreateManagedWidget("numMessagesText",
  105.                                                  xmTextFieldWidgetClass,
  106.                                                  form,
  107.                                                  XmNleftAttachment, XmATTACH_WIDGET,
  108.                                                  XmNleftWidget, m_nummessages_toggle,
  109.                                                  XmNrightAttachment, XmATTACH_NONE,
  110.                                                  XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
  111.                                                  XmNtopWidget, m_nummessages_toggle,
  112.                                                  XmNbottomAttachment, XmATTACH_NONE,
  113.                                                  NULL);
  114.  
  115.     m_nummessages_caption = XtVaCreateManagedWidget("numMessagesCaption",
  116.                                                     xmLabelGadgetClass,
  117.                                                     form,
  118.                                                     XmNleftAttachment, XmATTACH_WIDGET,
  119.                                                     XmNleftWidget, m_nummessages_text,
  120.                                                     XmNrightAttachment, XmATTACH_NONE,
  121.                                                     XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
  122.                                                     XmNtopWidget, m_nummessages_text,
  123.                                                     XmNbottomAttachment, XmATTACH_NONE,
  124.                                                     NULL);
  125.  
  126.     PREF_GetIntPref("news.max_articles", ¤t_max);
  127.  
  128.     buf = PR_smprintf("%d", current_max);
  129.  
  130.     fe_SetTextFieldAndCallBack(m_nummessages_text, buf);
  131.  
  132.     XP_FREE(buf);
  133.  
  134.     {
  135.         XP_Bool markothersread;
  136.  
  137.         PREF_GetBoolPref("news.mark_old_read", &markothersread);
  138.  
  139.         m_markothersread_toggle = XtVaCreateManagedWidget("markOthersRead",
  140.                                                           xmToggleButtonGadgetClass,
  141.                                                           form,
  142.                                                           XmNset, markothersread,
  143.                                                           XmNleftAttachment, XmATTACH_FORM,
  144.                                                           XmNleftOffset, 20,
  145.                                                           XmNrightAttachment, XmATTACH_NONE,
  146.                                                           XmNtopAttachment, XmATTACH_WIDGET,
  147.                                                           XmNtopWidget, m_nummessages_text,
  148.                                                           XmNbottomAttachment, XmATTACH_NONE,
  149.                                                           NULL);
  150.     }
  151.  
  152.     XtAddCallback(m_alltoggle, XmNvalueChangedCallback, toggle_cb, this);
  153.     XtAddCallback(m_nummessages_toggle, XmNvalueChangedCallback, toggle_cb, this);
  154.  
  155.     XtAddCallback(m_markothersread_toggle, XmNvalueChangedCallback, toggle_markread_cb, this);
  156.  
  157.     XmToggleButtonGadgetSetState(m_alltoggle, True, True);
  158.  
  159.     XtManageChild(form);
  160.  
  161.     XtAddCallback(m_chrome, XmNokCallback, ok_cb, this);
  162.     XtAddCallback(m_chrome, XmNcancelCallback, cancel_cb, this);
  163. }
  164.  
  165. XFE_NewsPromptDialog::~XFE_NewsPromptDialog()
  166. {
  167.     // nothing needed (that I'm aware of) yet.
  168. }
  169.  
  170. XP_Bool
  171. XFE_NewsPromptDialog::post()
  172. {
  173.     m_doneWithLoop = False;
  174.   
  175.     XtVaSetValues(m_chrome,
  176.                   XmNdeleteResponse, XmUNMAP,
  177.                   NULL);
  178.  
  179.     show();
  180.  
  181.     while(!m_doneWithLoop)
  182.         {
  183.             fe_EventLoop();
  184.         }
  185.  
  186.     return m_retVal;
  187. }
  188.  
  189. XP_Bool
  190. XFE_NewsPromptDialog::getDownloadAll()
  191. {
  192.     return m_downloadall;
  193. }
  194.  
  195. void
  196. XFE_NewsPromptDialog::ok()
  197. {
  198.     char *num_messages_str;
  199.     int num_messages;
  200.  
  201.     num_messages_str = fe_GetTextField(m_nummessages_text);
  202.  
  203.     num_messages = atoi(num_messages_str);
  204.  
  205.     //    XtFree(num_messages_str);  ??
  206.  
  207.     if (num_messages)
  208.         {
  209.             PREF_SetIntPref("news.max_articles", num_messages);
  210.         }
  211.  
  212.     m_doneWithLoop = True;
  213.     m_retVal = True;
  214.  
  215.     hide();
  216. }
  217.  
  218. void
  219. XFE_NewsPromptDialog::cancel()
  220. {
  221.     m_doneWithLoop = True;
  222.     m_retVal = False;
  223.  
  224.     hide();
  225. }
  226.  
  227. void
  228. XFE_NewsPromptDialog::toggle(Widget w, XtPointer cd)
  229. {
  230.     XmToggleButtonCallbackStruct *cb = (XmToggleButtonCallbackStruct*)cd;
  231.  
  232.     if (!cb->set)
  233.         {
  234.             XtVaSetValues(w, XmNset, True, 0);
  235.         }
  236.     else if (w == m_alltoggle)
  237.         {
  238.             m_downloadall = True;
  239.             
  240.             XtVaSetValues(m_nummessages_toggle, XmNset, False, 0);
  241.             XtSetSensitive(m_nummessages_text, False);
  242.             XtSetSensitive(m_markothersread_toggle, False);
  243.         }
  244.     else
  245.         {
  246.             m_downloadall = False;
  247.  
  248.             XtVaSetValues(m_alltoggle, XmNset, False, 0);
  249.             XtSetSensitive(m_nummessages_text, True);
  250.             XtSetSensitive(m_markothersread_toggle, True);
  251.         }
  252. }
  253.  
  254. void
  255. XFE_NewsPromptDialog::toggle_markread()
  256. {
  257.     PREF_SetBoolPref("news.mark_old_read", XmToggleButtonGadgetGetState(m_markothersread_toggle));
  258. }
  259.  
  260. void
  261. XFE_NewsPromptDialog::ok_cb(Widget, XtPointer clientData, XtPointer)
  262. {
  263.     XFE_NewsPromptDialog *obj = (XFE_NewsPromptDialog*)clientData;
  264.  
  265.     obj->ok();
  266. }
  267.  
  268. void
  269. XFE_NewsPromptDialog::cancel_cb(Widget, XtPointer clientData, XtPointer)
  270. {
  271.     XFE_NewsPromptDialog *obj = (XFE_NewsPromptDialog*)clientData;
  272.  
  273.     obj->cancel();
  274. }
  275.  
  276. void
  277. XFE_NewsPromptDialog::toggle_cb(Widget w, XtPointer clientData, XtPointer cd)
  278. {
  279.     XFE_NewsPromptDialog *obj = (XFE_NewsPromptDialog*)clientData;
  280.  
  281.     obj->toggle(w, cd);
  282. }
  283.  
  284. void
  285. XFE_NewsPromptDialog::toggle_markread_cb(Widget, XtPointer clientData, XtPointer)
  286. {
  287.     XFE_NewsPromptDialog *obj = (XFE_NewsPromptDialog*)clientData;
  288.  
  289.     obj->toggle_markread();
  290. }
  291.  
  292.