-fpermissive to allow GCC to compile old C++
[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 librararies 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     _propui_array = new DtVirtArray<PropUiItem *>(10);
134     _propui_array_iterator = 0;
135     _parent = parent;
136     if (NULL != foldername)
137       _foldername = strdup(foldername);
138     else
139       _foldername = strdup(DTMAS_INBOX);
140
141     _retrieval_tbs = new DtVirtArray<Widget>(10);
142     _custom_options = new DtVirtArray<Widget>(10);
143     _server_options = new DtVirtArray<Widget>(10);
144
145     //
146     //  Create FORM to hold the printing options
147     //
148     _form = XtVaCreateWidget(
149                                 "MailRetrievalOptions",
150                                 xmFormWidgetClass,
151                                 _parent,
152                                 XmNbottomAttachment, XmATTACH_FORM,
153                                 XmNrightAttachment, XmATTACH_FORM,
154                                 XmNleftAttachment, XmATTACH_FORM,
155                                 XmNtopAttachment, XmATTACH_FORM,
156                                 XmNresizePolicy, XmRESIZE_ANY,
157                                 XmNfractionBase, 3,
158                                 NULL);
159     if (_form == (Widget) NULL)
160     {
161         delete [] propkey;
162         return;
163     }
164     _w = _form;
165     installDestroyHandler();
166
167     //
168     //  Create GUI for the INBOX Name Option
169     //
170     _inboxpath_tf = XtVaCreateManagedWidget(
171                                 "InboxNameText",
172                                 xmTextFieldWidgetClass, _form,
173                                 XmNtopAttachment, XmATTACH_FORM,
174                                 XmNtopOffset, 10,
175                                 XmNleftAttachment, XmATTACH_POSITION,
176                                 XmNleftPosition, 1,
177                                 XmNrightAttachment, XmATTACH_NONE,
178                                 XmNcolumns, 30,
179                                 XmNvalue, "",
180                                 NULL);
181     xms = XmStringCreateLocalized(GETMSG(DT_catd, 27, 18,"INBOX folder path:"));
182     _inboxpath_label = XtVaCreateManagedWidget(
183                                 "InboxNameLabel",
184                                 xmLabelWidgetClass, _form,
185                                 XmNlabelString, xms,
186                                 XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
187                                 XmNtopOffset, 0,
188                                 XmNtopWidget, _inboxpath_tf,
189                                 XmNleftAttachment, XmATTACH_NONE,
190                                 XmNrightAttachment, XmATTACH_WIDGET,
191                                 XmNrightOffset, 3,
192                                 XmNrightWidget, _inboxpath_tf,
193                                 NULL);
194     XmStringFree(xms);
195
196     //
197     //  Create PropUiItem for the ServerName Option
198     //
199     DtMailObjectSpace   space;
200     DtMailEnv           error;
201     char                *dflt_inboxpath = NULL;
202     d_session->queryImpl(
203                         error,
204                         d_session->getDefaultImpl(error),
205                         DtMailCapabilityInboxName,
206                         &space, &dflt_inboxpath);
207
208     //MrGENPROPKEY(propkey, "", DTMAS_PROPKEY_INBOXPATH);
209     strcpy(propkey, DTMAS_PROPKEY_INBOXPATH);
210     PropSource::setDefaultValue(propkey, dflt_inboxpath);
211     pui = (PropUiItem *) new InboxTextFieldUiItem(
212                                         _inboxpath_tf,
213                                         _FROM_MAILRC,
214                                         propkey,
215                                         MailRetrievalOptions::isValidInboxPath);
216     _propui_array->append(pui);
217     free(dflt_inboxpath);
218
219     //
220     //  Create GUI for the CheckForNewMail Option
221     //
222     _checkfornewmail_sb = XtVaCreateManagedWidget(
223                                 "CheckForNewMailSB",
224                                 xmSimpleSpinBoxWidgetClass, _form,
225                                 XmNtopAttachment, XmATTACH_WIDGET,
226                                 XmNtopWidget, _inboxpath_tf,
227                                 XmNtopOffset, 10,
228                                 XmNleftAttachment, XmATTACH_POSITION,
229                                 XmNleftPosition, 1,
230                                 XmNrightAttachment, XmATTACH_NONE,
231                                 XmNdecimalPoints, 0,
232                                 XmNincrementValue, 1,
233                                 XmNposition, 500,
234                                 XmNmaximumValue, 999999,
235                                 XmNminimumValue, 0,
236                                 XmNarrowLayout, XmARROWS_END,
237                                 XmNspinBoxChildType, XmNUMERIC,
238                                 XmNcolumns, 6,
239                                 NULL);
240
241     xms = XmStringCreateLocalized(
242                 GETMSG(Dtb_project_catd, 2, 13, "Check for new mail every:"));
243     _checkfornewmail_label = XtVaCreateManagedWidget(
244                                 "CheckForNewMailLabel",
245                                 xmLabelWidgetClass, _form,
246                                 XmNlabelType, XmSTRING,
247                                 XmNlabelString, xms,
248                                 XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
249                                 XmNtopOffset, 0,
250                                 XmNtopWidget, _checkfornewmail_sb,
251                                 XmNleftAttachment, XmATTACH_NONE,
252                                 XmNrightAttachment, XmATTACH_WIDGET,
253                                 XmNrightOffset, 3,
254                                 XmNrightWidget, _checkfornewmail_sb,
255                                 NULL);
256     XmStringFree(xms);
257
258     //
259     //  Create PropUiItem for the CheckForNewMail Option
260     //
261     strcpy(propkey, "retrieveinterval");
262     PropSource::setDefaultValue(propkey, "300");
263     pui = (PropUiItem*) new CheckForMailUiItem(
264                                         _checkfornewmail_sb,
265                                         _FROM_MAILRC,
266                                         propkey);
267     _propui_array->append(pui);
268
269     //
270     //  Create separator
271     //
272     w = XtVaCreateManagedWidget(
273                                 "MailRetrievalSeparator",
274                                 xmSeparatorGadgetClass, _form,
275                                 XmNrightAttachment, XmATTACH_FORM,
276                                 XmNleftAttachment, XmATTACH_FORM,
277                                 XmNtopAttachment, XmATTACH_WIDGET,
278                                 XmNtopWidget, _checkfornewmail_sb,
279                                 XmNtopOffset, 10,
280                                 NULL);
281
282     xms = XmStringCreateLocalized(
283                 GETMSG(DT_catd, 27, 6, "Automatic (system) delivery"));
284     _system_tb = XtVaCreateManagedWidget(
285                                 "SystemTB",
286                                 xmToggleButtonGadgetClass, _form,
287                                 XmNrightAttachment, XmATTACH_FORM,
288                                 XmNleftAttachment, XmATTACH_FORM,
289                                 XmNleftOffset, 18,
290                                 XmNtopAttachment, XmATTACH_WIDGET,
291                                 XmNtopWidget, w,
292                                 XmNtopOffset, 10,
293                                 XmNalignment, XmALIGNMENT_BEGINNING,
294                                 XmNlabelString, xms,
295                                 XmNset, True,
296                                 NULL);
297     XmStringFree(xms);
298
299     XtAddCallback(
300                 _system_tb,
301                 XmNvalueChangedCallback,
302                 MailRetrievalOptions::retrievalTBSValueChangedCB,
303                 (XtPointer) this);
304
305     //
306     //  Create PropUiItem for the System Option
307     //
308     MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_GETMAILVIASYSTEM);
309     PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_GETMAILVIASYSTEM);
310     pui = (PropUiItem *) new CheckBoxUiItem(_system_tb, _FROM_MAILRC, propkey);
311     _propui_array->append(pui);
312
313     //
314     //  Create FRAME to hold the server printing options
315     //
316     _server_frame = XtVaCreateManagedWidget(
317                                 "ServerFrame", xmFrameWidgetClass, _form,
318                                 XmNchildHorizontalAlignment,
319                                                         XmALIGNMENT_BEGINNING,
320                                 XmNchildVerticalAlignment, XmALIGNMENT_CENTER,
321                                 XmNtopAttachment, XmATTACH_WIDGET,
322                                 XmNtopWidget, _system_tb,
323                                 XmNleftAttachment, XmATTACH_FORM,
324                                 XmNleftOffset, 10,
325                                 XmNrightAttachment, XmATTACH_FORM,
326                                 XmNrightOffset, 10,
327                                 XmNbottomAttachment, XmATTACH_NONE,
328                                 NULL);
329
330     xms = XmStringCreateLocalized(
331                 GETMSG(DT_catd, 27, 7, "Mail server retrieval"));
332     _server_tb = XtVaCreateManagedWidget(
333                                 "UseServerTB",
334                                 xmToggleButtonGadgetClass, _server_frame,
335                                 XmNchildType, XmFRAME_TITLE_CHILD,
336                                 XmNchildHorizontalAlignment,
337                                                         XmALIGNMENT_BEGINNING,
338                                 XmNchildVerticalAlignment, XmALIGNMENT_CENTER,
339                                 XmNlabelString, xms,
340                                 XmNset, False,
341                                 NULL);
342     XmStringFree(xms);
343
344     XtAddCallback(
345                 _server_tb,
346                 XmNvalueChangedCallback,
347                 MailRetrievalOptions::retrievalTBSValueChangedCB,
348                 (XtPointer) this);
349
350     //
351     //  Create PropUiItem for the Server Option
352     //
353     MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_GETMAILVIASERVER);
354     PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_GETMAILVIASERVER);
355     pui = (PropUiItem *) new CheckBoxUiItem(_server_tb, _FROM_MAILRC, propkey);
356     _propui_array->append(pui);
357
358     _serverframe_form = XtVaCreateManagedWidget(
359                                 "ServerFrameForm",
360                                 xmFormWidgetClass,
361                                 _server_frame,
362                                 //XmNallowOverlap, False,
363                                 XmNfractionBase, 3,
364                                 XmNresizePolicy, XmRESIZE_ANY,
365                                 NULL);
366
367     //
368     //  Create GUI for the MailServerProtocol Option
369     //
370     nitems = MR_ARRAY_SIZE(serverprotocol_values);
371     strings = (char**) XtMalloc(nitems*sizeof(char*));
372     data = (void**) XtMalloc(nitems*sizeof(void*));
373     for (int i=0; i<nitems; i++)
374     {
375         data[i] = (void*) serverprotocol_values[i].prop_value_string;
376         strings[i] = GETMSG(
377                         DT_catd, 
378                         serverprotocol_values[i].set_id, 
379                         serverprotocol_values[i].msg_id,
380                         serverprotocol_values[i].dflt_gui_string);
381     }
382
383     _serverprotocol_iom =
384       new IndexedOptionMenu(_serverframe_form, nitems, (char**) strings, data);
385     XtVaSetValues(
386                 _serverprotocol_iom->baseWidget(),
387                 XmNtopAttachment, XmATTACH_FORM,
388                 XmNleftAttachment, XmATTACH_POSITION,
389                 XmNleftPosition, 1,
390                 XmNrightAttachment, XmATTACH_NONE,
391                 NULL);
392     _serverprotocol_iom->manage();
393     _serverprotocol_iom->setSpec((void*) DTMAS_PROPDFLT_PROTOCOL);
394     XtFree((char*) strings);
395     XtFree((char*) data);
396
397     xms = XmStringCreateLocalized(
398                 GETMSG(DT_catd, 27, 8, "Server Protocol:"));
399     _serverprotocol_label = XtVaCreateManagedWidget(
400                         "ServerProtocolLabel",
401                         xmLabelWidgetClass, _serverframe_form,
402                         XmNlabelString, xms,
403                         XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
404                         XmNtopOffset, 0,
405                         XmNtopWidget, _serverprotocol_iom->baseWidget(),
406                         XmNleftAttachment, XmATTACH_NONE,
407                         XmNrightAttachment, XmATTACH_WIDGET,
408                         XmNrightOffset, 3,
409                         XmNrightWidget, _serverprotocol_iom->baseWidget(),
410                         NULL);
411     XmStringFree(xms);
412
413     //
414     //  Create PropUiItem for the Printed Headers option
415     //
416     MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_PROTOCOL);
417     PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_PROTOCOL);
418     pui = (PropUiItem *) new
419           IndexedOptionMenuUiItem(_serverprotocol_iom, _FROM_MAILRC, propkey);
420     _propui_array->append(pui);
421
422     //
423     //  Create GUI for the ServerName Option
424     //
425     _servername_tf = XtVaCreateManagedWidget(
426                         "ServerNameText",
427                         xmTextFieldWidgetClass, _serverframe_form,
428                         XmNtopAttachment, XmATTACH_WIDGET,
429                         XmNtopWidget, _serverprotocol_iom->baseWidget(),
430                         XmNleftAttachment, XmATTACH_POSITION,
431                         XmNleftPosition, 1,
432                         XmNrightAttachment, XmATTACH_NONE,
433                         XmNcolumns, 30,
434                         XmNvalue, "",
435                         NULL);
436     xms = XmStringCreateLocalized(GETMSG(DT_catd, 27, 9, "Server Name:"));
437     _servername_label = XtVaCreateManagedWidget(
438                         "ServerNameLabel",
439                         xmLabelWidgetClass, _serverframe_form,
440                         XmNlabelString, xms,
441                         XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
442                         XmNtopOffset, 0,
443                         XmNtopWidget, _servername_tf,
444                         XmNleftAttachment, XmATTACH_NONE,
445                         XmNrightAttachment, XmATTACH_WIDGET,
446                         XmNrightOffset, 3,
447                         XmNrightWidget, _servername_tf,
448                         NULL);
449     XmStringFree(xms);
450
451     //
452     //  Create PropUiItem for the ServerName Option
453     //
454     MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_SERVERNAME);
455     PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_SERVERNAME);
456     pui = (PropUiItem *) new
457           TextFieldUiItem(_servername_tf, _FROM_MAILRC, propkey);
458     _propui_array->append(pui);
459
460     //
461     //  Create GUI for the UserName Option
462     //
463     _username_tf = XtVaCreateManagedWidget(
464                         "UserNameText",
465                         xmTextFieldWidgetClass, _serverframe_form,
466                         XmNtopAttachment, XmATTACH_WIDGET,
467                         XmNtopWidget, _servername_tf,
468                         XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
469                         XmNleftWidget, _servername_tf,
470                         XmNrightAttachment, XmATTACH_NONE,
471                         XmNcolumns, 30,
472                         XmNvalue, "",
473                         NULL);
474     xms = XmStringCreateLocalized(GETMSG(DT_catd, 27, 10, "User Name:"));
475     _username_label = XtVaCreateManagedWidget(
476                         "UserNameLabel",
477                         xmLabelWidgetClass, _serverframe_form,
478                         XmNlabelString, xms,
479                         XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
480                         XmNtopWidget, _username_tf,
481                         XmNleftAttachment, XmATTACH_NONE,
482                         XmNrightAttachment, XmATTACH_WIDGET,
483                         XmNrightWidget, _username_tf,
484                         NULL);
485     XmStringFree(xms);
486  
487     //
488     //  Create PropUiItem for the UserName Option
489     //
490     struct passwd pwd;
491     GetPasswordEntry(pwd);
492
493     MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_USERNAME);
494     PropSource::setDefaultValue(propkey, pwd.pw_name);
495     pui = (PropUiItem *) new
496           TextFieldUiItem(_username_tf, _FROM_MAILRC, propkey);
497     _propui_array->append(pui);
498
499     //
500     //  Create GUI for the Password Option
501     //
502     _password_tf = XtVaCreateManagedWidget(
503                         "PasswordText",
504                         xmTextFieldWidgetClass, _serverframe_form,
505                         XmNtopAttachment, XmATTACH_WIDGET,
506                         XmNtopWidget, _username_tf,
507                         XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
508                         XmNleftWidget, _username_tf,
509                         XmNrightAttachment, XmATTACH_NONE,
510                         XmNcolumns, 30,
511                         XmNvalue, "",
512                         NULL);
513     xms = XmStringCreateLocalized(GETMSG(DT_catd, 27, 11, "Password:"));
514     _password_label = XtVaCreateManagedWidget(
515                         "PasswordLabel",
516                         xmLabelWidgetClass, _serverframe_form,
517                         XmNlabelString, xms,
518                         XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
519                         XmNtopWidget, _password_tf,
520                         XmNleftAttachment, XmATTACH_NONE,
521                         XmNrightAttachment, XmATTACH_WIDGET,
522                         XmNrightWidget, _password_tf,
523                         NULL);
524     XmStringFree(xms);
525  
526
527     //
528     // Create a PropUiItem for the Password Option
529     //
530     MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_PASSWORD);
531     PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_PASSWORD);
532     _password_pui = new
533               EncryptedTextFieldUiItem(_password_tf, _FROM_MAILRC, propkey);
534     _propui_array->append((PropUiItem*) _password_pui);
535
536     //
537     //  Create GUI for the Remember Password Option
538     //
539     xms = XmStringCreateLocalized(
540                 GETMSG(DT_catd, 27, 12, "Remember password"));
541     _rememberpassword_tb = XtVaCreateManagedWidget(
542                         "RememberPasswordTB",
543                         xmToggleButtonWidgetClass, _serverframe_form,
544                         XmNtopAttachment, XmATTACH_WIDGET,
545                         XmNtopWidget, _password_tf,
546                         XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
547                         XmNleftWidget, _password_tf,
548                         XmNrightAttachment, XmATTACH_NONE,
549                         XmNalignment, XmALIGNMENT_END,
550                         XmNlabelString, xms,
551                         XmNset, False,
552                         NULL);
553     XmStringFree(xms);
554
555     XtAddCallback(
556                 _rememberpassword_tb,
557                 XmNvalueChangedCallback,
558                 MailRetrievalOptions::rememberPasswordChangedCB,
559                 (XtPointer) this);
560
561     //
562     //  Create PropUiItem for the RememberPassword Option
563     //
564     MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_REMEMBERPASSWORD);
565     PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_REMEMBERPASSWORD);
566     pui = (PropUiItem *) new
567           CheckBoxUiItem(_rememberpassword_tb, _FROM_MAILRC, propkey);
568     _propui_array->append(pui);
569
570     //
571     //  Create GUI for the Delete From Server Option
572     //
573     xms = XmStringCreateLocalized(
574                 GETMSG(DT_catd, 27, 13,
575                        "Delete from server after retrieval"));
576     _removeafterdelivery_tb = XtVaCreateManagedWidget(
577                         "RemoveAfterDeliveryTB",
578                         xmToggleButtonWidgetClass, _serverframe_form,
579                         XmNtopAttachment, XmATTACH_WIDGET,
580                         XmNtopWidget, _rememberpassword_tb,
581                         XmNleftAttachment, XmATTACH_POSITION,
582                         XmNleftPosition, 1,
583                         XmNrightAttachment, XmATTACH_NONE,
584                         XmNalignment, XmALIGNMENT_BEGINNING,
585                         XmNlabelString, xms,
586                         XmNset, True,
587                         NULL);
588     XmStringFree(xms);
589
590     //
591     //  Create PropUiItem for the RemoveAfterDelivery Option
592     //
593     MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_REMOVEAFTERDELIVERY);
594     PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_REMOVEAFTERDELIVERY);
595     pui = (PropUiItem *) new
596           CheckBoxUiItem(_removeafterdelivery_tb, _FROM_MAILRC, propkey);
597     _propui_array->append(pui);
598
599     //
600     //  Create GUI for the RetrieveOld Option
601     //
602     xms = XmStringCreateLocalized(
603                 GETMSG(DT_catd, 27, 14,
604                        "Retrieve old messages"));
605     _retrieveold_tb = XtVaCreateManagedWidget(
606                         "RetrieveOldTB",
607                         xmToggleButtonWidgetClass, _serverframe_form,
608                         XmNtopAttachment, XmATTACH_WIDGET,
609                         XmNtopWidget, _removeafterdelivery_tb,
610                         XmNleftAttachment, XmATTACH_POSITION,
611                         XmNleftPosition, 1,
612                         XmNrightAttachment, XmATTACH_NONE,
613                         XmNalignment, XmALIGNMENT_BEGINNING,
614                         XmNlabelString, xms,
615                         XmNset, True,
616                         NULL);
617     XmStringFree(xms);
618
619     //
620     //  Create PropUiItem for the RetrieveOld Option
621     //
622     MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_RETRIEVEOLD);
623     PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_RETRIEVEOLD);
624     pui = (PropUiItem *) new
625           CheckBoxUiItem(_retrieveold_tb, _FROM_MAILRC, propkey);
626     _propui_array->append(pui);
627
628     //
629     //  Create FRAME to hold the user command printing options
630     //
631     _custom_frame = XtVaCreateManagedWidget(
632                                 "CustomFrame", xmFrameWidgetClass, _form,
633                                 XmNchildHorizontalAlignment,
634                                                         XmALIGNMENT_BEGINNING,
635                                 XmNchildVerticalAlignment, XmALIGNMENT_CENTER,
636                                 XmNtopAttachment, XmATTACH_WIDGET,
637                                 XmNtopWidget, _server_frame,
638                                 XmNleftAttachment, XmATTACH_FORM,
639                                 XmNleftOffset, 10,
640                                 XmNrightAttachment, XmATTACH_FORM,
641                                 XmNrightOffset, 10,
642                                 XmNbottomAttachment, XmATTACH_FORM,
643                                 XmNbottomOffset, 10,
644                                 NULL);
645
646     xms = XmStringCreateLocalized(
647                 GETMSG(DT_catd, 27, 15, "Custom retrieval"));
648     _custom_tb = XtVaCreateManagedWidget(
649                                 "CustomTB",
650                                 xmToggleButtonGadgetClass, _custom_frame,
651                                 XmNchildType, XmFRAME_TITLE_CHILD,
652                                 XmNchildHorizontalAlignment,
653                                                         XmALIGNMENT_BEGINNING,
654                                 XmNchildVerticalAlignment, XmALIGNMENT_CENTER,
655                                 XmNlabelString, xms,
656                                 XmNset, False,
657                                 NULL);
658     XmStringFree(xms);
659
660     XtAddCallback(
661                 _custom_tb,
662                 XmNvalueChangedCallback,
663                 MailRetrievalOptions::retrievalTBSValueChangedCB,
664                 (XtPointer) this);
665
666     //
667     //  Create PropUiItem for the Custom Command Option
668     //
669     MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_GETMAILVIACOMMAND);
670     PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_GETMAILVIACOMMAND);
671     pui = (PropUiItem *) new CheckBoxUiItem(_custom_tb, _FROM_MAILRC, propkey);
672     _propui_array->append(pui);
673
674     _customframe_form = XtVaCreateManagedWidget(
675                                 "CustomFrameForm",
676                                 xmFormWidgetClass, _custom_frame,
677                                 //XmNallowOverlap, False,
678                                 XmNfractionBase, 3,
679                                 XmNresizePolicy, XmRESIZE_ANY,
680                                 NULL);
681
682     //
683     //  Create GUI for the User Command Option
684     //
685     _customcommand_tf = XtVaCreateManagedWidget(
686                         "CustomCommandText",
687                         xmTextFieldWidgetClass, _customframe_form,
688                         XmNtopAttachment, XmATTACH_FORM,
689                         XmNleftAttachment, XmATTACH_POSITION,
690                         XmNleftPosition, 1,
691                         XmNrightAttachment, XmATTACH_NONE,
692                         XmNcolumns, 45,
693                         XmNvalue, "",
694                         NULL);
695     xms = XmStringCreateLocalized(
696                         GETMSG(DT_catd, 27, 16, "User Getmail command:"));
697     _customcommand_label = XtVaCreateManagedWidget(
698                         "CustomCommandLabel",
699                         xmLabelWidgetClass, _customframe_form,
700                         XmNlabelString, xms,
701                         XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
702                         XmNtopOffset, 0,
703                         XmNtopWidget, _customcommand_tf,
704                         XmNleftAttachment, XmATTACH_NONE,
705                         XmNrightAttachment, XmATTACH_WIDGET,
706                         XmNrightOffset, 3,
707                         XmNrightWidget, _customcommand_tf,
708                         NULL);
709     XmStringFree(xms);
710
711     //
712     //  Create PropUiItem for the ServerName Option
713     //
714     MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_GETMAILCOMMAND);
715     PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_GETMAILCOMMAND);
716     pui = (PropUiItem *) new
717           TextFieldUiItem(_customcommand_tf, _FROM_MAILRC, propkey);
718     _propui_array->append(pui);
719
720     //
721     // Save widgets for manipulation.
722     //
723     _retrieval_tbs->append(_system_tb);
724     _retrieval_tbs->append(_server_tb);
725     _retrieval_tbs->append(_custom_tb);
726
727     _server_options->append(_serverprotocol_label);
728     _server_options->append(_serverprotocol_iom->baseWidget());
729     _server_options->append(_servername_label);
730     _server_options->append(_servername_tf);
731     _server_options->append(_username_label);
732     _server_options->append(_username_tf);
733     _server_options->append(_password_label);
734     _server_options->append(_password_tf);
735     _server_options->append(_rememberpassword_tb);
736     _server_options->append(_removeafterdelivery_tb);
737     _server_options->append(_retrieveold_tb);
738
739     _custom_options->append(_customcommand_label);
740     _custom_options->append(_customcommand_tf);
741     delete [] propkey;
742 }
743
744
745 MailRetrievalOptions::~MailRetrievalOptions (void)
746 {
747     int i;
748     PropUiItem          *pui;;
749     IndexedOptionMenu   *iom;
750
751     if (_propui_array)
752     {
753         for (i=0; i<_propui_array->length(); i++)
754         {
755             pui = (*_propui_array)[i];
756             delete pui;
757         }
758         delete _propui_array;
759     }
760
761     if (_retrieval_tbs) delete _retrieval_tbs;
762     if (_server_options) delete _server_options;
763     if (_custom_options) delete _custom_options;
764     if (_serverprotocol_iom) delete _serverprotocol_iom;
765     if (_foldername) free(_foldername);
766
767     if (_w) XtDestroyWidget(_w);
768 }
769
770 char *
771 MailRetrievalOptions::isValidInboxPath(PropUiItem* pui, void* data)
772 {
773     MailSession         *ses = theRoamApp.session();
774     DtMail::Session     *d_session = ses->session();
775     DtMailEnv           error;
776     const char          *errmsg = NULL;
777     char                *inbox_path = NULL;
778     char                *s, *t, *tmp;
779     char                *expanded_path = NULL;
780     Widget              text;
781     int                 status;
782
783     text = pui->getWidget();
784     if (text) inbox_path = XmTextFieldGetString(text);
785     if (NULL == inbox_path || 0 == strlen(inbox_path))
786       return GETMSG(DT_catd, 27, 17, "Null INBOX path.");
787
788     tmp = (char*) malloc(strlen(inbox_path)+1);
789     for (s=inbox_path, t=tmp; *s; s++)
790     {
791         if (! isspace(*s))
792         {
793             *t = *s;
794             t++;
795         }
796     }
797     *t = '\0';
798     free(inbox_path);
799     inbox_path = tmp;
800
801     if (NULL == inbox_path || 0 == strlen(inbox_path))
802       return GETMSG(DT_catd, 27, 17, "Null INBOX path.");
803
804     if (isalpha(inbox_path[0]))
805     {
806         tmp = (char*) malloc(strlen(inbox_path) + 3);
807         sprintf(tmp, "./%s", inbox_path);
808         free(inbox_path);
809         inbox_path = tmp;
810     }
811
812     expanded_path = d_session->expandPath(error, inbox_path);
813     if (expanded_path) XmTextFieldSetString(text, expanded_path);
814
815     SafePathIsAccessible(error, expanded_path);
816     if (error.isSet())
817     {
818         errmsg = (const char*) error;
819         errmsg = strdup(errmsg);
820     }
821     else
822       errmsg = NULL;
823
824     if (inbox_path) free(inbox_path);
825     if (expanded_path) free(expanded_path);
826     return (char*) errmsg;
827 }
828
829 void
830 MailRetrievalOptions::initOptionInteractions(void)
831 {
832     int                 i;
833     unsigned char       isset, isset_server;
834     Widget              opt;
835
836     XtVaGetValues(_server_tb, XmNset, &isset, NULL);
837     if (XmUNSET == isset)
838     {
839         for (i=0; i<_server_options->length(); i++)
840         {
841             opt = (*_server_options)[i];
842             XtVaSetValues(opt, XmNsensitive, False, NULL);
843         }
844     }
845     else
846     {
847         for (i=0; i<_server_options->length(); i++)
848         {
849             opt = (*_server_options)[i];
850             XtVaSetValues(opt, XmNsensitive, True, NULL);
851         }
852     }
853     isset_server = isset;
854
855     XtVaGetValues(_custom_tb, XmNset, &isset, NULL);
856     if (XmUNSET == isset)
857     {
858         for (i=0; i<_custom_options->length(); i++)
859         {
860             opt = (*_custom_options)[i];
861             XtVaSetValues(opt, XmNsensitive, False, NULL);
862         }
863     }
864     else
865     {
866         for (i=0; i<_custom_options->length(); i++)
867         {
868             opt = (*_custom_options)[i];
869             XtVaSetValues(opt, XmNsensitive, True, NULL);
870         }
871     }
872
873     XtVaGetValues(_rememberpassword_tb, XmNset, &isset, NULL);
874     if (XmSET == isset)
875     {
876         _password_pui->writeAllowed(DTM_TRUE);
877         if (isset_server)
878           XtVaSetValues(_password_label, XmNsensitive, True, NULL);
879     }
880     else
881     {
882         _password_pui->writeAllowed(DTM_FALSE);
883         XtVaSetValues(_password_label, XmNsensitive, False, NULL);
884     }
885 }
886
887 PropUiItem *
888 MailRetrievalOptions::getFirstProp(void)
889 {
890     _propui_array_iterator = 0;
891     return getNextProp();
892 }
893
894 PropUiItem *
895 MailRetrievalOptions::getNextProp(void)
896 {
897     PropUiItem  *pui = (PropUiItem  *) NULL;
898
899     if (_propui_array_iterator < _propui_array->length())
900     {
901         pui = (*_propui_array)[_propui_array_iterator];
902         _propui_array_iterator++;
903     }
904     return pui;
905 }
906
907 int
908 MailRetrievalOptions::getNumProps(void)
909 {
910     return _propui_array->length();
911 }
912
913 void
914 MailRetrievalOptions::rememberPasswordChangedCB(
915                                 Widget w,
916                                 XtPointer client_data,
917                                 XtPointer call_data)
918 {
919     MailRetrievalOptions
920                 *mro = (MailRetrievalOptions*) client_data;
921     XmToggleButtonCallbackStruct
922                 *cbs = (XmToggleButtonCallbackStruct*) call_data;
923
924 #if 0
925     if (XmSET == cbs->set)
926     {
927         XtVaSetValues(mro->_password_label, XmNsensitive, True, NULL);
928         mro->_password_pui->writeAllowed(DTM_TRUE);
929     }
930     else
931     {
932         XtVaSetValues(mro->_password_label, XmNsensitive, False, NULL);
933         mro->_password_pui->writeAllowed(DTM_FALSE);
934     }
935 #else
936     mro->initOptionInteractions();
937 #endif
938 }
939
940 void
941 MailRetrievalOptions::retrievalTBSValueChangedCB(
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     int         i;
952     Widget      opt, tb;
953
954     if (XmUNSET == cbs->set)
955     {
956         XtVaSetValues(w, XmNset, XmSET, NULL);
957         return;
958     }
959
960     for (i=0; i<mro->_retrieval_tbs->length(); i++)
961     {
962         tb = (*mro->_retrieval_tbs)[i];
963         if (tb != w) XtVaSetValues(tb, XmNset, XmUNSET, NULL);
964     }
965
966 #if 0
967     if (w == mro->_system_tb)
968     {
969         for (i=0; i<mro->_server_options->length(); i++)
970         {
971             opt = (*mro->_server_options)[i];
972             XtVaSetValues(opt, XmNsensitive, False, NULL);
973         }
974         for (i=0; i<mro->_custom_options->length(); i++)
975         {
976             opt = (*mro->_custom_options)[i];
977             XtVaSetValues(opt, XmNsensitive, False, NULL);
978         }
979     }
980     else if (w == mro->_server_tb)
981     {
982         for (i=0; i<mro->_server_options->length(); i++)
983         {
984             opt = (*mro->_server_options)[i];
985             XtVaSetValues(opt, XmNsensitive, True, NULL);
986         }
987         for (i=0; i<mro->_custom_options->length(); i++)
988         {
989             opt = (*mro->_custom_options)[i];
990             XtVaSetValues(opt, XmNsensitive, False, NULL);
991         }
992     }
993     else if (w == mro->_custom_tb)
994     {
995         for (i=0; i<mro->_server_options->length(); i++)
996         {
997             opt = (*mro->_server_options)[i];
998             XtVaSetValues(opt, XmNsensitive, False, NULL);
999         }
1000         for (i=0; i<mro->_custom_options->length(); i++)
1001         {
1002             opt = (*mro->_custom_options)[i];
1003             XtVaSetValues(opt, XmNsensitive, True, NULL);
1004         }
1005     }
1006 #else
1007     mro->initOptionInteractions();
1008 #endif
1009 }
1010
1011 char *
1012 MailRetrievalOptions::getPassword(char *foldername)
1013 {
1014     DtMail::Session     *d_session = NULL;
1015     DtMail::MailRc      *m_rc = NULL;
1016     DtMailEnv           error;
1017     const char          *string = NULL;
1018     char                propkey[MAXPATHLEN];
1019
1020     d_session = theRoamApp.session()->session();
1021     m_rc = d_session->mailRc(error);
1022
1023     MrGENPROPKEY(propkey, foldername, DTMAS_PROPKEY_PASSWORD);
1024
1025     m_rc->getValue(error, propkey , &string, DTM_TRUE);
1026     if (string == NULL || error.isSet()) return NULL;
1027
1028     return (char*) string;
1029 }