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