Initial import of the CDE 2.1.30 sources from the Open Group.
[oweals/cde.git] / cde / programs / dtmail / dtmail / MailRetrievalOptions.C
1 /* $TOG: MailRetrievalOptions.C /main/8 1998/07/23 18:13:00 mgreess $ */
2
3 /*
4  *+SNOTICE
5  *
6  *      RESTRICTED CONFIDENTIAL INFORMATION:
7  *      
8  *      The information in this document is subject to special
9  *      restrictions in a confidential disclosure agreement between
10  *      HP, IBM, Sun, USL, SCO and Univel.  Do not distribute this
11  *      document outside HP, IBM, Sun, USL, SCO, or Univel without
12  *      Sun's specific written approval.  This document and all copies
13  *      and derivative works thereof must be returned or destroyed at
14  *      Sun's request.
15  *
16  *      Copyright 1994 Sun Microsystems, Inc.  All rights reserved.
17  *
18  *+ENOTICE
19  */
20 /*
21  *                   Common Desktop Environment
22  *
23  *   (c) Copyright 1993, 1994, 1995 Hewlett-Packard Company
24  *   (c) Copyright 1993, 1994, 1995 International Business Machines Corp.
25  *   (c) Copyright 1993, 1994, 1995 Sun Microsystems, Inc.
26  *   (c) Copyright 1993, 1994, 1995 Novell, Inc.
27  *   (c) Copyright 1995 Digital Equipment Corp.
28  *   (c) Copyright 1995 Fujitsu Limited
29  *   (c) Copyright 1995 Hitachi, Ltd.
30  *                                                                   
31  *
32  *                     RESTRICTED RIGHTS LEGEND                              
33  *
34  *Use, duplication, or disclosure by the U.S. Government is subject to
35  *restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
36  *Technical Data and Computer Software clause in DFARS 252.227-7013.  Rights
37  *for non-DOD U.S. Government Departments and Agencies are as set forth in
38  *FAR 52.227-19(c)(1,2).
39
40  *Hewlett-Packard Company, 3000 Hanover Street, Palo Alto, CA 94304 U.S.A.
41  *International Business Machines Corp., Route 100, Somers, NY 10589 U.S.A. 
42  *Sun Microsystems, Inc., 2550 Garcia Avenue, Mountain View, CA 94043 U.S.A.
43  *Novell, Inc., 190 River Road, Summit, NJ 07901 U.S.A.
44  *Digital Equipment Corp., 111 Powdermill Road, Maynard, MA 01754, U.S.A.
45  *Fujitsu Limited, 1015, Kamikodanaka Nakahara-Ku, Kawasaki 211, Japan
46  *Hitachi, Ltd., 6, Kanda Surugadai 4-Chome, Chiyoda-ku, Tokyo 101, Japan
47  */
48
49
50 #include <stdio.h>
51 #include <sys/param.h>
52 #include <X11/Intrinsic.h>
53 #include <Xm/Xm.h>
54 #include <Xm/XmAll.h>
55 #include <Xm/DialogS.h>
56 #include <Xm/Form.h>
57 #include <Xm/ToggleB.h>
58 #include <Dt/PrintOptionsP.h>
59
60 #include <DtMail/IO.hh>
61 #include "CheckBoxUiItem.hh"
62 #include "DtMail.hh"
63 #include "DtMailError.hh"
64 #include "InboxTextFieldUiItem.hh"
65 #include "IndexedOptionMenuUiItem.hh"
66 #include "MailMsg.h"
67 #include "MailRetrievalOptions.h"
68 #include "RoamApp.h"
69 #include "CheckForMailUiItem.hh"
70 #include "SpinBoxUiItem.hh"
71 #include "TextFieldUiItem.hh"
72 #include "dtmailopts.h"
73
74 #define MR_ARRAY_SIZE(ary)      (sizeof((ary))/sizeof((ary)[0]))
75
76 static MrPropVal serverprotocol_values[] =
77 {
78     { DTMAS_PROTO_AUTO,
79       27, 1, "Auto"
80     },
81     { DTMAS_PROTO_POP3,
82       27, 2, "POP3"
83     },
84     { DTMAS_PROTO_APOP,
85       27, 3, "APOP"
86     },
87     { DTMAS_PROTO_IMAP,
88       27, 4, "IMAP"
89     },
90     { DTMAS_PROTO_POP2,
91       27, 5, "POP2"
92     },
93 };
94
95 #define MrGENPROPKEY(pk, fld, key) DTMAS_CONCAT_MAILRC_KEY(pk, fld, key)
96
97 MailRetrievalOptions::MailRetrievalOptions (
98                                 Widget          parent,
99                                 const char      *foldername
100                                 ) : UIComponent( "PrintOptions" )
101 {
102     DtMail::Session     *d_session = theRoamApp.session()->session();
103     PropUiItem          *pui = (PropUiItem  *) NULL;
104     Widget              *menu_buttons, w;
105     int                 n, nitems;
106     char                **strings;
107     void                **data;
108     XmString            xms;
109     char                *propkey = new char[MAXPATHLEN];
110
111     _propui_array = new DtVirtArray<PropUiItem *>(10);
112     _propui_array_iterator = 0;
113     _parent = parent;
114     if (NULL != foldername)
115       _foldername = strdup(foldername);
116     else
117       _foldername = strdup(DTMAS_INBOX);
118
119     _retrieval_tbs = new DtVirtArray<Widget>(10);
120     _custom_options = new DtVirtArray<Widget>(10);
121     _server_options = new DtVirtArray<Widget>(10);
122
123     //
124     //  Create FORM to hold the printing options
125     //
126     _form = XtVaCreateWidget(
127                                 "MailRetrievalOptions",
128                                 xmFormWidgetClass,
129                                 _parent,
130                                 XmNbottomAttachment, XmATTACH_FORM,
131                                 XmNrightAttachment, XmATTACH_FORM,
132                                 XmNleftAttachment, XmATTACH_FORM,
133                                 XmNtopAttachment, XmATTACH_FORM,
134                                 XmNresizePolicy, XmRESIZE_ANY,
135                                 XmNfractionBase, 3,
136                                 NULL);
137     if (_form == (Widget) NULL)
138     {
139         delete [] propkey;
140         return;
141     }
142     _w = _form;
143     installDestroyHandler();
144
145     //
146     //  Create GUI for the INBOX Name Option
147     //
148     _inboxpath_tf = XtVaCreateManagedWidget(
149                                 "InboxNameText",
150                                 xmTextFieldWidgetClass, _form,
151                                 XmNtopAttachment, XmATTACH_FORM,
152                                 XmNtopOffset, 10,
153                                 XmNleftAttachment, XmATTACH_POSITION,
154                                 XmNleftPosition, 1,
155                                 XmNrightAttachment, XmATTACH_NONE,
156                                 XmNcolumns, 30,
157                                 XmNvalue, "",
158                                 NULL);
159     xms = XmStringCreateLocalized(GETMSG(DT_catd, 27, 18,"INBOX folder path:"));
160     _inboxpath_label = XtVaCreateManagedWidget(
161                                 "InboxNameLabel",
162                                 xmLabelWidgetClass, _form,
163                                 XmNlabelString, xms,
164                                 XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
165                                 XmNtopOffset, 0,
166                                 XmNtopWidget, _inboxpath_tf,
167                                 XmNleftAttachment, XmATTACH_NONE,
168                                 XmNrightAttachment, XmATTACH_WIDGET,
169                                 XmNrightOffset, 3,
170                                 XmNrightWidget, _inboxpath_tf,
171                                 NULL);
172     XmStringFree(xms);
173
174     //
175     //  Create PropUiItem for the ServerName Option
176     //
177     DtMailObjectSpace   space;
178     DtMailEnv           error;
179     char                *dflt_inboxpath = NULL;
180     d_session->queryImpl(
181                         error,
182                         d_session->getDefaultImpl(error),
183                         DtMailCapabilityInboxName,
184                         &space, &dflt_inboxpath);
185
186     //MrGENPROPKEY(propkey, "", DTMAS_PROPKEY_INBOXPATH);
187     strcpy(propkey, DTMAS_PROPKEY_INBOXPATH);
188     PropSource::setDefaultValue(propkey, dflt_inboxpath);
189     pui = (PropUiItem *) new InboxTextFieldUiItem(
190                                         _inboxpath_tf,
191                                         _FROM_MAILRC,
192                                         propkey,
193                                         MailRetrievalOptions::isValidInboxPath);
194     _propui_array->append(pui);
195     free(dflt_inboxpath);
196
197     //
198     //  Create GUI for the CheckForNewMail Option
199     //
200     _checkfornewmail_sb = XtVaCreateManagedWidget(
201                                 "CheckForNewMailSB",
202                                 xmSimpleSpinBoxWidgetClass, _form,
203                                 XmNtopAttachment, XmATTACH_WIDGET,
204                                 XmNtopWidget, _inboxpath_tf,
205                                 XmNtopOffset, 10,
206                                 XmNleftAttachment, XmATTACH_POSITION,
207                                 XmNleftPosition, 1,
208                                 XmNrightAttachment, XmATTACH_NONE,
209                                 XmNdecimalPoints, 0,
210                                 XmNincrementValue, 1,
211                                 XmNposition, 500,
212                                 XmNmaximumValue, 999999,
213                                 XmNminimumValue, 0,
214                                 XmNarrowLayout, XmARROWS_END,
215                                 XmNspinBoxChildType, XmNUMERIC,
216                                 XmNcolumns, 6,
217                                 NULL);
218
219     xms = XmStringCreateLocalized(
220                 GETMSG(Dtb_project_catd, 2, 13, "Check for new mail every:"));
221     _checkfornewmail_label = XtVaCreateManagedWidget(
222                                 "CheckForNewMailLabel",
223                                 xmLabelWidgetClass, _form,
224                                 XmNlabelType, XmSTRING,
225                                 XmNlabelString, xms,
226                                 XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
227                                 XmNtopOffset, 0,
228                                 XmNtopWidget, _checkfornewmail_sb,
229                                 XmNleftAttachment, XmATTACH_NONE,
230                                 XmNrightAttachment, XmATTACH_WIDGET,
231                                 XmNrightOffset, 3,
232                                 XmNrightWidget, _checkfornewmail_sb,
233                                 NULL);
234     XmStringFree(xms);
235
236     //
237     //  Create PropUiItem for the CheckForNewMail Option
238     //
239     strcpy(propkey, "retrieveinterval");
240     PropSource::setDefaultValue(propkey, "300");
241     pui = (PropUiItem*) new CheckForMailUiItem(
242                                         _checkfornewmail_sb,
243                                         _FROM_MAILRC,
244                                         propkey);
245     _propui_array->append(pui);
246
247     //
248     //  Create separator
249     //
250     w = XtVaCreateManagedWidget(
251                                 "MailRetrievalSeparator",
252                                 xmSeparatorGadgetClass, _form,
253                                 XmNrightAttachment, XmATTACH_FORM,
254                                 XmNleftAttachment, XmATTACH_FORM,
255                                 XmNtopAttachment, XmATTACH_WIDGET,
256                                 XmNtopWidget, _checkfornewmail_sb,
257                                 XmNtopOffset, 10,
258                                 NULL);
259
260     xms = XmStringCreateLocalized(
261                 GETMSG(DT_catd, 27, 6, "Automatic (system) delivery"));
262     _system_tb = XtVaCreateManagedWidget(
263                                 "SystemTB",
264                                 xmToggleButtonGadgetClass, _form,
265                                 XmNrightAttachment, XmATTACH_FORM,
266                                 XmNleftAttachment, XmATTACH_FORM,
267                                 XmNleftOffset, 18,
268                                 XmNtopAttachment, XmATTACH_WIDGET,
269                                 XmNtopWidget, w,
270                                 XmNtopOffset, 10,
271                                 XmNalignment, XmALIGNMENT_BEGINNING,
272                                 XmNlabelString, xms,
273                                 XmNset, True,
274                                 NULL);
275     XmStringFree(xms);
276
277     XtAddCallback(
278                 _system_tb,
279                 XmNvalueChangedCallback,
280                 MailRetrievalOptions::retrievalTBSValueChangedCB,
281                 (XtPointer) this);
282
283     //
284     //  Create PropUiItem for the System Option
285     //
286     MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_GETMAILVIASYSTEM);
287     PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_GETMAILVIASYSTEM);
288     pui = (PropUiItem *) new CheckBoxUiItem(_system_tb, _FROM_MAILRC, propkey);
289     _propui_array->append(pui);
290
291     //
292     //  Create FRAME to hold the server printing options
293     //
294     _server_frame = XtVaCreateManagedWidget(
295                                 "ServerFrame", xmFrameWidgetClass, _form,
296                                 XmNchildHorizontalAlignment,
297                                                         XmALIGNMENT_BEGINNING,
298                                 XmNchildVerticalAlignment, XmALIGNMENT_CENTER,
299                                 XmNtopAttachment, XmATTACH_WIDGET,
300                                 XmNtopWidget, _system_tb,
301                                 XmNleftAttachment, XmATTACH_FORM,
302                                 XmNleftOffset, 10,
303                                 XmNrightAttachment, XmATTACH_FORM,
304                                 XmNrightOffset, 10,
305                                 XmNbottomAttachment, XmATTACH_NONE,
306                                 NULL);
307
308     xms = XmStringCreateLocalized(
309                 GETMSG(DT_catd, 27, 7, "Mail server retrieval"));
310     _server_tb = XtVaCreateManagedWidget(
311                                 "UseServerTB",
312                                 xmToggleButtonGadgetClass, _server_frame,
313                                 XmNchildType, XmFRAME_TITLE_CHILD,
314                                 XmNchildHorizontalAlignment,
315                                                         XmALIGNMENT_BEGINNING,
316                                 XmNchildVerticalAlignment, XmALIGNMENT_CENTER,
317                                 XmNlabelString, xms,
318                                 XmNset, False,
319                                 NULL);
320     XmStringFree(xms);
321
322     XtAddCallback(
323                 _server_tb,
324                 XmNvalueChangedCallback,
325                 MailRetrievalOptions::retrievalTBSValueChangedCB,
326                 (XtPointer) this);
327
328     //
329     //  Create PropUiItem for the Server Option
330     //
331     MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_GETMAILVIASERVER);
332     PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_GETMAILVIASERVER);
333     pui = (PropUiItem *) new CheckBoxUiItem(_server_tb, _FROM_MAILRC, propkey);
334     _propui_array->append(pui);
335
336     _serverframe_form = XtVaCreateManagedWidget(
337                                 "ServerFrameForm",
338                                 xmFormWidgetClass,
339                                 _server_frame,
340                                 //XmNallowOverlap, False,
341                                 XmNfractionBase, 3,
342                                 XmNresizePolicy, XmRESIZE_ANY,
343                                 NULL);
344
345     //
346     //  Create GUI for the MailServerProtocol Option
347     //
348     nitems = MR_ARRAY_SIZE(serverprotocol_values);
349     strings = (char**) XtMalloc(nitems*sizeof(char*));
350     data = (void**) XtMalloc(nitems*sizeof(void*));
351     for (int i=0; i<nitems; i++)
352     {
353         data[i] = (void*) serverprotocol_values[i].prop_value_string;
354         strings[i] = GETMSG(
355                         DT_catd, 
356                         serverprotocol_values[i].set_id, 
357                         serverprotocol_values[i].msg_id,
358                         serverprotocol_values[i].dflt_gui_string);
359     }
360
361     _serverprotocol_iom =
362       new IndexedOptionMenu(_serverframe_form, nitems, (char**) strings, data);
363     XtVaSetValues(
364                 _serverprotocol_iom->baseWidget(),
365                 XmNtopAttachment, XmATTACH_FORM,
366                 XmNleftAttachment, XmATTACH_POSITION,
367                 XmNleftPosition, 1,
368                 XmNrightAttachment, XmATTACH_NONE,
369                 NULL);
370     _serverprotocol_iom->manage();
371     _serverprotocol_iom->setSpec((void*) DTMAS_PROPDFLT_PROTOCOL);
372     XtFree((char*) strings);
373     XtFree((char*) data);
374
375     xms = XmStringCreateLocalized(
376                 GETMSG(DT_catd, 27, 8, "Server Protocol:"));
377     _serverprotocol_label = XtVaCreateManagedWidget(
378                         "ServerProtocolLabel",
379                         xmLabelWidgetClass, _serverframe_form,
380                         XmNlabelString, xms,
381                         XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
382                         XmNtopOffset, 0,
383                         XmNtopWidget, _serverprotocol_iom->baseWidget(),
384                         XmNleftAttachment, XmATTACH_NONE,
385                         XmNrightAttachment, XmATTACH_WIDGET,
386                         XmNrightOffset, 3,
387                         XmNrightWidget, _serverprotocol_iom->baseWidget(),
388                         NULL);
389     XmStringFree(xms);
390
391     //
392     //  Create PropUiItem for the Printed Headers option
393     //
394     MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_PROTOCOL);
395     PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_PROTOCOL);
396     pui = (PropUiItem *) new
397           IndexedOptionMenuUiItem(_serverprotocol_iom, _FROM_MAILRC, propkey);
398     _propui_array->append(pui);
399
400     //
401     //  Create GUI for the ServerName Option
402     //
403     _servername_tf = XtVaCreateManagedWidget(
404                         "ServerNameText",
405                         xmTextFieldWidgetClass, _serverframe_form,
406                         XmNtopAttachment, XmATTACH_WIDGET,
407                         XmNtopWidget, _serverprotocol_iom->baseWidget(),
408                         XmNleftAttachment, XmATTACH_POSITION,
409                         XmNleftPosition, 1,
410                         XmNrightAttachment, XmATTACH_NONE,
411                         XmNcolumns, 30,
412                         XmNvalue, "",
413                         NULL);
414     xms = XmStringCreateLocalized(GETMSG(DT_catd, 27, 9, "Server Name:"));
415     _servername_label = XtVaCreateManagedWidget(
416                         "ServerNameLabel",
417                         xmLabelWidgetClass, _serverframe_form,
418                         XmNlabelString, xms,
419                         XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
420                         XmNtopOffset, 0,
421                         XmNtopWidget, _servername_tf,
422                         XmNleftAttachment, XmATTACH_NONE,
423                         XmNrightAttachment, XmATTACH_WIDGET,
424                         XmNrightOffset, 3,
425                         XmNrightWidget, _servername_tf,
426                         NULL);
427     XmStringFree(xms);
428
429     //
430     //  Create PropUiItem for the ServerName Option
431     //
432     MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_SERVERNAME);
433     PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_SERVERNAME);
434     pui = (PropUiItem *) new
435           TextFieldUiItem(_servername_tf, _FROM_MAILRC, propkey);
436     _propui_array->append(pui);
437
438     //
439     //  Create GUI for the UserName Option
440     //
441     _username_tf = XtVaCreateManagedWidget(
442                         "UserNameText",
443                         xmTextFieldWidgetClass, _serverframe_form,
444                         XmNtopAttachment, XmATTACH_WIDGET,
445                         XmNtopWidget, _servername_tf,
446                         XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
447                         XmNleftWidget, _servername_tf,
448                         XmNrightAttachment, XmATTACH_NONE,
449                         XmNcolumns, 30,
450                         XmNvalue, "",
451                         NULL);
452     xms = XmStringCreateLocalized(GETMSG(DT_catd, 27, 10, "User Name:"));
453     _username_label = XtVaCreateManagedWidget(
454                         "UserNameLabel",
455                         xmLabelWidgetClass, _serverframe_form,
456                         XmNlabelString, xms,
457                         XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
458                         XmNtopWidget, _username_tf,
459                         XmNleftAttachment, XmATTACH_NONE,
460                         XmNrightAttachment, XmATTACH_WIDGET,
461                         XmNrightWidget, _username_tf,
462                         NULL);
463     XmStringFree(xms);
464  
465     //
466     //  Create PropUiItem for the UserName Option
467     //
468     struct passwd pwd;
469     GetPasswordEntry(pwd);
470
471     MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_USERNAME);
472     PropSource::setDefaultValue(propkey, pwd.pw_name);
473     pui = (PropUiItem *) new
474           TextFieldUiItem(_username_tf, _FROM_MAILRC, propkey);
475     _propui_array->append(pui);
476
477     //
478     //  Create GUI for the Password Option
479     //
480     _password_tf = XtVaCreateManagedWidget(
481                         "PasswordText",
482                         xmTextFieldWidgetClass, _serverframe_form,
483                         XmNtopAttachment, XmATTACH_WIDGET,
484                         XmNtopWidget, _username_tf,
485                         XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
486                         XmNleftWidget, _username_tf,
487                         XmNrightAttachment, XmATTACH_NONE,
488                         XmNcolumns, 30,
489                         XmNvalue, "",
490                         NULL);
491     xms = XmStringCreateLocalized(GETMSG(DT_catd, 27, 11, "Password:"));
492     _password_label = XtVaCreateManagedWidget(
493                         "PasswordLabel",
494                         xmLabelWidgetClass, _serverframe_form,
495                         XmNlabelString, xms,
496                         XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
497                         XmNtopWidget, _password_tf,
498                         XmNleftAttachment, XmATTACH_NONE,
499                         XmNrightAttachment, XmATTACH_WIDGET,
500                         XmNrightWidget, _password_tf,
501                         NULL);
502     XmStringFree(xms);
503  
504
505     //
506     // Create a PropUiItem for the Password Option
507     //
508     MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_PASSWORD);
509     PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_PASSWORD);
510     _password_pui = new
511               EncryptedTextFieldUiItem(_password_tf, _FROM_MAILRC, propkey);
512     _propui_array->append((PropUiItem*) _password_pui);
513
514     //
515     //  Create GUI for the Remember Password Option
516     //
517     xms = XmStringCreateLocalized(
518                 GETMSG(DT_catd, 27, 12, "Remember password"));
519     _rememberpassword_tb = XtVaCreateManagedWidget(
520                         "RememberPasswordTB",
521                         xmToggleButtonWidgetClass, _serverframe_form,
522                         XmNtopAttachment, XmATTACH_WIDGET,
523                         XmNtopWidget, _password_tf,
524                         XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
525                         XmNleftWidget, _password_tf,
526                         XmNrightAttachment, XmATTACH_NONE,
527                         XmNalignment, XmALIGNMENT_END,
528                         XmNlabelString, xms,
529                         XmNset, False,
530                         NULL);
531     XmStringFree(xms);
532
533     XtAddCallback(
534                 _rememberpassword_tb,
535                 XmNvalueChangedCallback,
536                 MailRetrievalOptions::rememberPasswordChangedCB,
537                 (XtPointer) this);
538
539     //
540     //  Create PropUiItem for the RememberPassword Option
541     //
542     MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_REMEMBERPASSWORD);
543     PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_REMEMBERPASSWORD);
544     pui = (PropUiItem *) new
545           CheckBoxUiItem(_rememberpassword_tb, _FROM_MAILRC, propkey);
546     _propui_array->append(pui);
547
548     //
549     //  Create GUI for the Delete From Server Option
550     //
551     xms = XmStringCreateLocalized(
552                 GETMSG(DT_catd, 27, 13,
553                        "Delete from server after retrieval"));
554     _removeafterdelivery_tb = XtVaCreateManagedWidget(
555                         "RemoveAfterDeliveryTB",
556                         xmToggleButtonWidgetClass, _serverframe_form,
557                         XmNtopAttachment, XmATTACH_WIDGET,
558                         XmNtopWidget, _rememberpassword_tb,
559                         XmNleftAttachment, XmATTACH_POSITION,
560                         XmNleftPosition, 1,
561                         XmNrightAttachment, XmATTACH_NONE,
562                         XmNalignment, XmALIGNMENT_BEGINNING,
563                         XmNlabelString, xms,
564                         XmNset, True,
565                         NULL);
566     XmStringFree(xms);
567
568     //
569     //  Create PropUiItem for the RemoveAfterDelivery Option
570     //
571     MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_REMOVEAFTERDELIVERY);
572     PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_REMOVEAFTERDELIVERY);
573     pui = (PropUiItem *) new
574           CheckBoxUiItem(_removeafterdelivery_tb, _FROM_MAILRC, propkey);
575     _propui_array->append(pui);
576
577     //
578     //  Create GUI for the RetrieveOld Option
579     //
580     xms = XmStringCreateLocalized(
581                 GETMSG(DT_catd, 27, 14,
582                        "Retrieve old messages"));
583     _retrieveold_tb = XtVaCreateManagedWidget(
584                         "RetrieveOldTB",
585                         xmToggleButtonWidgetClass, _serverframe_form,
586                         XmNtopAttachment, XmATTACH_WIDGET,
587                         XmNtopWidget, _removeafterdelivery_tb,
588                         XmNleftAttachment, XmATTACH_POSITION,
589                         XmNleftPosition, 1,
590                         XmNrightAttachment, XmATTACH_NONE,
591                         XmNalignment, XmALIGNMENT_BEGINNING,
592                         XmNlabelString, xms,
593                         XmNset, True,
594                         NULL);
595     XmStringFree(xms);
596
597     //
598     //  Create PropUiItem for the RetrieveOld Option
599     //
600     MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_RETRIEVEOLD);
601     PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_RETRIEVEOLD);
602     pui = (PropUiItem *) new
603           CheckBoxUiItem(_retrieveold_tb, _FROM_MAILRC, propkey);
604     _propui_array->append(pui);
605
606     //
607     //  Create FRAME to hold the user command printing options
608     //
609     _custom_frame = XtVaCreateManagedWidget(
610                                 "CustomFrame", xmFrameWidgetClass, _form,
611                                 XmNchildHorizontalAlignment,
612                                                         XmALIGNMENT_BEGINNING,
613                                 XmNchildVerticalAlignment, XmALIGNMENT_CENTER,
614                                 XmNtopAttachment, XmATTACH_WIDGET,
615                                 XmNtopWidget, _server_frame,
616                                 XmNleftAttachment, XmATTACH_FORM,
617                                 XmNleftOffset, 10,
618                                 XmNrightAttachment, XmATTACH_FORM,
619                                 XmNrightOffset, 10,
620                                 XmNbottomAttachment, XmATTACH_FORM,
621                                 XmNbottomOffset, 10,
622                                 NULL);
623
624     xms = XmStringCreateLocalized(
625                 GETMSG(DT_catd, 27, 15, "Custom retrieval"));
626     _custom_tb = XtVaCreateManagedWidget(
627                                 "CustomTB",
628                                 xmToggleButtonGadgetClass, _custom_frame,
629                                 XmNchildType, XmFRAME_TITLE_CHILD,
630                                 XmNchildHorizontalAlignment,
631                                                         XmALIGNMENT_BEGINNING,
632                                 XmNchildVerticalAlignment, XmALIGNMENT_CENTER,
633                                 XmNlabelString, xms,
634                                 XmNset, False,
635                                 NULL);
636     XmStringFree(xms);
637
638     XtAddCallback(
639                 _custom_tb,
640                 XmNvalueChangedCallback,
641                 MailRetrievalOptions::retrievalTBSValueChangedCB,
642                 (XtPointer) this);
643
644     //
645     //  Create PropUiItem for the Custom Command Option
646     //
647     MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_GETMAILVIACOMMAND);
648     PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_GETMAILVIACOMMAND);
649     pui = (PropUiItem *) new CheckBoxUiItem(_custom_tb, _FROM_MAILRC, propkey);
650     _propui_array->append(pui);
651
652     _customframe_form = XtVaCreateManagedWidget(
653                                 "CustomFrameForm",
654                                 xmFormWidgetClass, _custom_frame,
655                                 //XmNallowOverlap, False,
656                                 XmNfractionBase, 3,
657                                 XmNresizePolicy, XmRESIZE_ANY,
658                                 NULL);
659
660     //
661     //  Create GUI for the User Command Option
662     //
663     _customcommand_tf = XtVaCreateManagedWidget(
664                         "CustomCommandText",
665                         xmTextFieldWidgetClass, _customframe_form,
666                         XmNtopAttachment, XmATTACH_FORM,
667                         XmNleftAttachment, XmATTACH_POSITION,
668                         XmNleftPosition, 1,
669                         XmNrightAttachment, XmATTACH_NONE,
670                         XmNcolumns, 45,
671                         XmNvalue, "",
672                         NULL);
673     xms = XmStringCreateLocalized(
674                         GETMSG(DT_catd, 27, 16, "User Getmail command:"));
675     _customcommand_label = XtVaCreateManagedWidget(
676                         "CustomCommandLabel",
677                         xmLabelWidgetClass, _customframe_form,
678                         XmNlabelString, xms,
679                         XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
680                         XmNtopOffset, 0,
681                         XmNtopWidget, _customcommand_tf,
682                         XmNleftAttachment, XmATTACH_NONE,
683                         XmNrightAttachment, XmATTACH_WIDGET,
684                         XmNrightOffset, 3,
685                         XmNrightWidget, _customcommand_tf,
686                         NULL);
687     XmStringFree(xms);
688
689     //
690     //  Create PropUiItem for the ServerName Option
691     //
692     MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_GETMAILCOMMAND);
693     PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_GETMAILCOMMAND);
694     pui = (PropUiItem *) new
695           TextFieldUiItem(_customcommand_tf, _FROM_MAILRC, propkey);
696     _propui_array->append(pui);
697
698     //
699     // Save widgets for manipulation.
700     //
701     _retrieval_tbs->append(_system_tb);
702     _retrieval_tbs->append(_server_tb);
703     _retrieval_tbs->append(_custom_tb);
704
705     _server_options->append(_serverprotocol_label);
706     _server_options->append(_serverprotocol_iom->baseWidget());
707     _server_options->append(_servername_label);
708     _server_options->append(_servername_tf);
709     _server_options->append(_username_label);
710     _server_options->append(_username_tf);
711     _server_options->append(_password_label);
712     _server_options->append(_password_tf);
713     _server_options->append(_rememberpassword_tb);
714     _server_options->append(_removeafterdelivery_tb);
715     _server_options->append(_retrieveold_tb);
716
717     _custom_options->append(_customcommand_label);
718     _custom_options->append(_customcommand_tf);
719     delete [] propkey;
720 }
721
722
723 MailRetrievalOptions::~MailRetrievalOptions (void)
724 {
725     int i;
726     PropUiItem          *pui;;
727     IndexedOptionMenu   *iom;
728
729     if (_propui_array)
730     {
731         for (i=0; i<_propui_array->length(); i++)
732         {
733             pui = (*_propui_array)[i];
734             delete pui;
735         }
736         delete _propui_array;
737     }
738
739     if (_retrieval_tbs) delete _retrieval_tbs;
740     if (_server_options) delete _server_options;
741     if (_custom_options) delete _custom_options;
742     if (_serverprotocol_iom) delete _serverprotocol_iom;
743     if (_foldername) free(_foldername);
744
745     if (_w) XtDestroyWidget(_w);
746 }
747
748 char *
749 MailRetrievalOptions::isValidInboxPath(PropUiItem* pui, void* data)
750 {
751     MailSession         *ses = theRoamApp.session();
752     DtMail::Session     *d_session = ses->session();
753     DtMailEnv           error;
754     const char          *errmsg = NULL;
755     char                *inbox_path = NULL;
756     char                *s, *t, *tmp;
757     char                *expanded_path = NULL;
758     Widget              text;
759     int                 status;
760
761     text = pui->getWidget();
762     if (text) inbox_path = XmTextFieldGetString(text);
763     if (NULL == inbox_path || 0 == strlen(inbox_path))
764       return GETMSG(DT_catd, 27, 17, "Null INBOX path.");
765
766     tmp = (char*) malloc(strlen(inbox_path)+1);
767     for (s=inbox_path, t=tmp; *s; s++)
768     {
769         if (! isspace(*s))
770         {
771             *t = *s;
772             t++;
773         }
774     }
775     *t = '\0';
776     free(inbox_path);
777     inbox_path = tmp;
778
779     if (NULL == inbox_path || 0 == strlen(inbox_path))
780       return GETMSG(DT_catd, 27, 17, "Null INBOX path.");
781
782     if (isalpha(inbox_path[0]))
783     {
784         tmp = (char*) malloc(strlen(inbox_path) + 3);
785         sprintf(tmp, "./%s", inbox_path);
786         free(inbox_path);
787         inbox_path = tmp;
788     }
789
790     expanded_path = d_session->expandPath(error, inbox_path);
791     if (expanded_path) XmTextFieldSetString(text, expanded_path);
792
793     SafePathIsAccessible(error, expanded_path);
794     if (error.isSet())
795     {
796         errmsg = (const char*) error;
797         errmsg = strdup(errmsg);
798     }
799     else
800       errmsg = NULL;
801
802     if (inbox_path) free(inbox_path);
803     if (expanded_path) free(expanded_path);
804     return (char*) errmsg;
805 }
806
807 void
808 MailRetrievalOptions::initOptionInteractions(void)
809 {
810     int                 i;
811     unsigned char       isset, isset_server;
812     Widget              opt;
813
814     XtVaGetValues(_server_tb, XmNset, &isset, NULL);
815     if (XmUNSET == isset)
816     {
817         for (i=0; i<_server_options->length(); i++)
818         {
819             opt = (*_server_options)[i];
820             XtVaSetValues(opt, XmNsensitive, False, NULL);
821         }
822     }
823     else
824     {
825         for (i=0; i<_server_options->length(); i++)
826         {
827             opt = (*_server_options)[i];
828             XtVaSetValues(opt, XmNsensitive, True, NULL);
829         }
830     }
831     isset_server = isset;
832
833     XtVaGetValues(_custom_tb, XmNset, &isset, NULL);
834     if (XmUNSET == isset)
835     {
836         for (i=0; i<_custom_options->length(); i++)
837         {
838             opt = (*_custom_options)[i];
839             XtVaSetValues(opt, XmNsensitive, False, NULL);
840         }
841     }
842     else
843     {
844         for (i=0; i<_custom_options->length(); i++)
845         {
846             opt = (*_custom_options)[i];
847             XtVaSetValues(opt, XmNsensitive, True, NULL);
848         }
849     }
850
851     XtVaGetValues(_rememberpassword_tb, XmNset, &isset, NULL);
852     if (XmSET == isset)
853     {
854         _password_pui->writeAllowed(DTM_TRUE);
855         if (isset_server)
856           XtVaSetValues(_password_label, XmNsensitive, True, NULL);
857     }
858     else
859     {
860         _password_pui->writeAllowed(DTM_FALSE);
861         XtVaSetValues(_password_label, XmNsensitive, False, NULL);
862     }
863 }
864
865 PropUiItem *
866 MailRetrievalOptions::getFirstProp(void)
867 {
868     _propui_array_iterator = 0;
869     return getNextProp();
870 }
871
872 PropUiItem *
873 MailRetrievalOptions::getNextProp(void)
874 {
875     PropUiItem  *pui = (PropUiItem  *) NULL;
876
877     if (_propui_array_iterator < _propui_array->length())
878     {
879         pui = (*_propui_array)[_propui_array_iterator];
880         _propui_array_iterator++;
881     }
882     return pui;
883 }
884
885 int
886 MailRetrievalOptions::getNumProps(void)
887 {
888     return _propui_array->length();
889 }
890
891 void
892 MailRetrievalOptions::rememberPasswordChangedCB(
893                                 Widget w,
894                                 XtPointer client_data,
895                                 XtPointer call_data)
896 {
897     MailRetrievalOptions
898                 *mro = (MailRetrievalOptions*) client_data;
899     XmToggleButtonCallbackStruct
900                 *cbs = (XmToggleButtonCallbackStruct*) call_data;
901
902 #if 0
903     if (XmSET == cbs->set)
904     {
905         XtVaSetValues(mro->_password_label, XmNsensitive, True, NULL);
906         mro->_password_pui->writeAllowed(DTM_TRUE);
907     }
908     else
909     {
910         XtVaSetValues(mro->_password_label, XmNsensitive, False, NULL);
911         mro->_password_pui->writeAllowed(DTM_FALSE);
912     }
913 #else
914     mro->initOptionInteractions();
915 #endif
916 }
917
918 void
919 MailRetrievalOptions::retrievalTBSValueChangedCB(
920                                         Widget w,
921                                         XtPointer client_data,
922                                         XtPointer call_data)
923 {
924     MailRetrievalOptions
925                 *mro = (MailRetrievalOptions*) client_data;
926     XmToggleButtonCallbackStruct
927                 *cbs = (XmToggleButtonCallbackStruct*) call_data;
928
929     int         i;
930     Widget      opt, tb;
931
932     if (XmUNSET == cbs->set)
933     {
934         XtVaSetValues(w, XmNset, XmSET, NULL);
935         return;
936     }
937
938     for (i=0; i<mro->_retrieval_tbs->length(); i++)
939     {
940         tb = (*mro->_retrieval_tbs)[i];
941         if (tb != w) XtVaSetValues(tb, XmNset, XmUNSET, NULL);
942     }
943
944 #if 0
945     if (w == mro->_system_tb)
946     {
947         for (i=0; i<mro->_server_options->length(); i++)
948         {
949             opt = (*mro->_server_options)[i];
950             XtVaSetValues(opt, XmNsensitive, False, NULL);
951         }
952         for (i=0; i<mro->_custom_options->length(); i++)
953         {
954             opt = (*mro->_custom_options)[i];
955             XtVaSetValues(opt, XmNsensitive, False, NULL);
956         }
957     }
958     else if (w == mro->_server_tb)
959     {
960         for (i=0; i<mro->_server_options->length(); i++)
961         {
962             opt = (*mro->_server_options)[i];
963             XtVaSetValues(opt, XmNsensitive, True, NULL);
964         }
965         for (i=0; i<mro->_custom_options->length(); i++)
966         {
967             opt = (*mro->_custom_options)[i];
968             XtVaSetValues(opt, XmNsensitive, False, NULL);
969         }
970     }
971     else if (w == mro->_custom_tb)
972     {
973         for (i=0; i<mro->_server_options->length(); i++)
974         {
975             opt = (*mro->_server_options)[i];
976             XtVaSetValues(opt, XmNsensitive, False, NULL);
977         }
978         for (i=0; i<mro->_custom_options->length(); i++)
979         {
980             opt = (*mro->_custom_options)[i];
981             XtVaSetValues(opt, XmNsensitive, True, NULL);
982         }
983     }
984 #else
985     mro->initOptionInteractions();
986 #endif
987 }
988
989 char *
990 MailRetrievalOptions::getPassword(char *foldername)
991 {
992     DtMail::Session     *d_session = NULL;
993     DtMail::MailRc      *m_rc = NULL;
994     DtMailEnv           error;
995     const char          *string = NULL;
996     char                propkey[MAXPATHLEN];
997
998     d_session = theRoamApp.session()->session();
999     m_rc = d_session->mailRc(error);
1000
1001     MrGENPROPKEY(propkey, foldername, DTMAS_PROPKEY_PASSWORD);
1002
1003     m_rc->getValue(error, propkey , &string, DTM_TRUE);
1004     if (string == NULL || error.isSet()) return NULL;
1005
1006     return (char*) string;
1007 }