cdesktopenv/cde/programs/dtmail/dtmail/MailRetrievalOptions.C

1057 lines
30 KiB
C

/*
* CDE - Common Desktop Environment
*
* Copyright (c) 1993-2012, The Open Group. All rights reserved.
*
* These libraries and programs are free software; you can
* redistribute them and/or modify them under the terms of the GNU
* Lesser General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* These libraries and programs are distributed in the hope that
* they will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with these libraries and programs; if not, write
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA 02110-1301 USA
*/
/* $TOG: MailRetrievalOptions.C /main/8 1998/07/23 18:13:00 mgreess $ */
/*
*+SNOTICE
*
* RESTRICTED CONFIDENTIAL INFORMATION:
*
* The information in this document is subject to special
* restrictions in a confidential disclosure agreement between
* HP, IBM, Sun, USL, SCO and Univel. Do not distribute this
* document outside HP, IBM, Sun, USL, SCO, or Univel without
* Sun's specific written approval. This document and all copies
* and derivative works thereof must be returned or destroyed at
* Sun's request.
*
* Copyright 1994 Sun Microsystems, Inc. All rights reserved.
*
*+ENOTICE
*/
/*
* Common Desktop Environment
*
* (c) Copyright 1993, 1994, 1995 Hewlett-Packard Company
* (c) Copyright 1993, 1994, 1995 International Business Machines Corp.
* (c) Copyright 1993, 1994, 1995 Sun Microsystems, Inc.
* (c) Copyright 1993, 1994, 1995 Novell, Inc.
* (c) Copyright 1995 Digital Equipment Corp.
* (c) Copyright 1995 Fujitsu Limited
* (c) Copyright 1995 Hitachi, Ltd.
*
*
* RESTRICTED RIGHTS LEGEND
*
*Use, duplication, or disclosure by the U.S. Government is subject to
*restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
*Technical Data and Computer Software clause in DFARS 252.227-7013. Rights
*for non-DOD U.S. Government Departments and Agencies are as set forth in
*FAR 52.227-19(c)(1,2).
*Hewlett-Packard Company, 3000 Hanover Street, Palo Alto, CA 94304 U.S.A.
*International Business Machines Corp., Route 100, Somers, NY 10589 U.S.A.
*Sun Microsystems, Inc., 2550 Garcia Avenue, Mountain View, CA 94043 U.S.A.
*Novell, Inc., 190 River Road, Summit, NJ 07901 U.S.A.
*Digital Equipment Corp., 111 Powdermill Road, Maynard, MA 01754, U.S.A.
*Fujitsu Limited, 1015, Kamikodanaka Nakahara-Ku, Kawasaki 211, Japan
*Hitachi, Ltd., 6, Kanda Surugadai 4-Chome, Chiyoda-ku, Tokyo 101, Japan
*/
#include <stdio.h>
#include <sys/param.h>
#include <X11/Intrinsic.h>
#include <Xm/Xm.h>
#include <Xm/XmAll.h>
#include <Xm/DialogS.h>
#include <Xm/Form.h>
#include <Xm/ToggleB.h>
#include <Dt/PrintOptionsP.h>
#include <DtMail/IO.hh>
#include "CheckBoxUiItem.hh"
#include "DtMail.hh"
#include "DtMailError.hh"
#include "InboxTextFieldUiItem.hh"
#include "IndexedOptionMenuUiItem.hh"
#include "MailMsg.h"
#include "MailRetrievalOptions.h"
#include "RoamApp.h"
#include "CheckForMailUiItem.hh"
#include "SpinBoxUiItem.hh"
#include "TextFieldUiItem.hh"
#include "dtmailopts.h"
#define MR_ARRAY_SIZE(ary) (sizeof((ary))/sizeof((ary)[0]))
static MrPropVal serverprotocol_values[] =
{
{ DTMAS_PROTO_AUTO,
27, 1, "Auto"
},
{ DTMAS_PROTO_POP3,
27, 2, "POP3"
},
{ DTMAS_PROTO_APOP,
27, 3, "APOP"
},
{ DTMAS_PROTO_IMAP,
27, 4, "IMAP"
},
{ DTMAS_PROTO_POP2,
27, 5, "POP2"
},
};
#define MrGENPROPKEY(pk, fld, key) DTMAS_CONCAT_MAILRC_KEY(pk, fld, key)
MailRetrievalOptions::MailRetrievalOptions (
Widget parent,
const char *foldername
) : UIComponent( "PrintOptions" )
{
DtMail::Session *d_session = theRoamApp.session()->session();
PropUiItem *pui = (PropUiItem *) NULL;
Widget *menu_buttons, w;
int n, nitems;
char **strings;
void **data;
XmString xms;
char *propkey = new char[MAXPATHLEN];
_password_pui = NULL;
_inboxpath_label = NULL;
_inboxpath_tf = NULL;
_checkfornewmail_label = NULL;
_checkfornewmail_sb = NULL;
_system_tb = NULL;
_server_frame = NULL;
_server_tb = NULL;
_serverframe_form = NULL;
_serverprotocol_label = NULL;
_serverprotocol_iom = NULL;
_servername_label = NULL;
_servername_tf = NULL;
_username_label = NULL;
_username_tf = NULL;
_password_label = NULL;
_password_tf = NULL;
_rememberpassword_tb = NULL;
_removeafterdelivery_tb = NULL;
_retrieveold_tb = NULL;
_custom_frame = NULL;
_custom_tb = NULL;
_customframe_form = NULL;
_customcommand_label = NULL;
_customcommand_tf = NULL;
_propui_array = new DtVirtArray<PropUiItem *>(10);
_propui_array_iterator = 0;
_parent = parent;
if (NULL != foldername)
_foldername = strdup(foldername);
else
_foldername = strdup(DTMAS_INBOX);
_retrieval_tbs = new DtVirtArray<Widget>(10);
_custom_options = new DtVirtArray<Widget>(10);
_server_options = new DtVirtArray<Widget>(10);
//
// Create FORM to hold the printing options
//
_form = XtVaCreateWidget(
"MailRetrievalOptions",
xmFormWidgetClass,
_parent,
XmNbottomAttachment, XmATTACH_FORM,
XmNrightAttachment, XmATTACH_FORM,
XmNleftAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_FORM,
XmNresizePolicy, XmRESIZE_ANY,
XmNfractionBase, 3,
NULL);
if (_form == (Widget) NULL)
{
delete [] propkey;
return;
}
_w = _form;
installDestroyHandler();
//
// Create GUI for the INBOX Name Option
//
_inboxpath_tf = XtVaCreateManagedWidget(
"InboxNameText",
xmTextFieldWidgetClass, _form,
XmNtopAttachment, XmATTACH_FORM,
XmNtopOffset, 10,
XmNleftAttachment, XmATTACH_POSITION,
XmNleftPosition, 1,
XmNrightAttachment, XmATTACH_NONE,
XmNcolumns, 30,
XmNvalue, "",
NULL);
xms = XmStringCreateLocalized(CATGETS(DT_catd, 27, 18,"INBOX folder path:"));
_inboxpath_label = XtVaCreateManagedWidget(
"InboxNameLabel",
xmLabelWidgetClass, _form,
XmNlabelString, xms,
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNtopOffset, 0,
XmNtopWidget, _inboxpath_tf,
XmNleftAttachment, XmATTACH_NONE,
XmNrightAttachment, XmATTACH_WIDGET,
XmNrightOffset, 3,
XmNrightWidget, _inboxpath_tf,
NULL);
XmStringFree(xms);
//
// Create PropUiItem for the ServerName Option
//
DtMailObjectSpace space;
DtMailEnv error;
char *dflt_inboxpath = NULL;
d_session->queryImpl(
error,
d_session->getDefaultImpl(error),
DtMailCapabilityInboxName,
&space, &dflt_inboxpath);
//MrGENPROPKEY(propkey, "", DTMAS_PROPKEY_INBOXPATH);
strcpy(propkey, DTMAS_PROPKEY_INBOXPATH);
PropSource::setDefaultValue(propkey, dflt_inboxpath);
pui = (PropUiItem *) new InboxTextFieldUiItem(
_inboxpath_tf,
_FROM_MAILRC,
propkey,
MailRetrievalOptions::isValidInboxPath);
_propui_array->append(pui);
free(dflt_inboxpath);
//
// Create GUI for the CheckForNewMail Option
//
_checkfornewmail_sb = XtVaCreateManagedWidget(
"CheckForNewMailSB",
xmSimpleSpinBoxWidgetClass, _form,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, _inboxpath_tf,
XmNtopOffset, 10,
XmNleftAttachment, XmATTACH_POSITION,
XmNleftPosition, 1,
XmNrightAttachment, XmATTACH_NONE,
XmNdecimalPoints, 0,
XmNincrementValue, 1,
XmNposition, 500,
XmNmaximumValue, 999999,
XmNminimumValue, 0,
XmNarrowLayout, XmARROWS_END,
XmNspinBoxChildType, XmNUMERIC,
XmNcolumns, 6,
NULL);
xms = XmStringCreateLocalized(
CATGETS(Dtb_project_catd, 2, 13, "Check for new mail every:"));
_checkfornewmail_label = XtVaCreateManagedWidget(
"CheckForNewMailLabel",
xmLabelWidgetClass, _form,
XmNlabelType, XmSTRING,
XmNlabelString, xms,
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNtopOffset, 0,
XmNtopWidget, _checkfornewmail_sb,
XmNleftAttachment, XmATTACH_NONE,
XmNrightAttachment, XmATTACH_WIDGET,
XmNrightOffset, 3,
XmNrightWidget, _checkfornewmail_sb,
NULL);
XmStringFree(xms);
//
// Create PropUiItem for the CheckForNewMail Option
//
strcpy(propkey, "retrieveinterval");
PropSource::setDefaultValue(propkey, "300");
pui = (PropUiItem*) new CheckForMailUiItem(
_checkfornewmail_sb,
_FROM_MAILRC,
propkey);
_propui_array->append(pui);
//
// Create separator
//
w = XtVaCreateManagedWidget(
"MailRetrievalSeparator",
xmSeparatorGadgetClass, _form,
XmNrightAttachment, XmATTACH_FORM,
XmNleftAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, _checkfornewmail_sb,
XmNtopOffset, 10,
NULL);
xms = XmStringCreateLocalized(
CATGETS(DT_catd, 27, 6, "Automatic (system) delivery"));
_system_tb = XtVaCreateManagedWidget(
"SystemTB",
xmToggleButtonGadgetClass, _form,
XmNrightAttachment, XmATTACH_FORM,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, 18,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, w,
XmNtopOffset, 10,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNlabelString, xms,
XmNset, True,
NULL);
XmStringFree(xms);
XtAddCallback(
_system_tb,
XmNvalueChangedCallback,
MailRetrievalOptions::retrievalTBSValueChangedCB,
(XtPointer) this);
//
// Create PropUiItem for the System Option
//
MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_GETMAILVIASYSTEM);
PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_GETMAILVIASYSTEM);
pui = (PropUiItem *) new CheckBoxUiItem(_system_tb, _FROM_MAILRC, propkey);
_propui_array->append(pui);
//
// Create FRAME to hold the server printing options
//
_server_frame = XtVaCreateManagedWidget(
"ServerFrame", xmFrameWidgetClass, _form,
XmNchildHorizontalAlignment,
XmALIGNMENT_BEGINNING,
XmNchildVerticalAlignment, XmALIGNMENT_CENTER,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, _system_tb,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, 10,
XmNrightAttachment, XmATTACH_FORM,
XmNrightOffset, 10,
XmNbottomAttachment, XmATTACH_NONE,
NULL);
xms = XmStringCreateLocalized(
CATGETS(DT_catd, 27, 7, "Mail server retrieval"));
_server_tb = XtVaCreateManagedWidget(
"UseServerTB",
xmToggleButtonGadgetClass, _server_frame,
XmNchildType, XmFRAME_TITLE_CHILD,
XmNchildHorizontalAlignment,
XmALIGNMENT_BEGINNING,
XmNchildVerticalAlignment, XmALIGNMENT_CENTER,
XmNlabelString, xms,
XmNset, False,
NULL);
XmStringFree(xms);
XtAddCallback(
_server_tb,
XmNvalueChangedCallback,
MailRetrievalOptions::retrievalTBSValueChangedCB,
(XtPointer) this);
//
// Create PropUiItem for the Server Option
//
MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_GETMAILVIASERVER);
PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_GETMAILVIASERVER);
pui = (PropUiItem *) new CheckBoxUiItem(_server_tb, _FROM_MAILRC, propkey);
_propui_array->append(pui);
_serverframe_form = XtVaCreateManagedWidget(
"ServerFrameForm",
xmFormWidgetClass,
_server_frame,
//XmNallowOverlap, False,
XmNfractionBase, 3,
XmNresizePolicy, XmRESIZE_ANY,
NULL);
//
// Create GUI for the MailServerProtocol Option
//
nitems = MR_ARRAY_SIZE(serverprotocol_values);
strings = (char**) XtMalloc(nitems*sizeof(char*));
data = (void**) XtMalloc(nitems*sizeof(void*));
for (int i=0; i<nitems; i++)
{
data[i] = (void*) serverprotocol_values[i].prop_value_string;
strings[i] = CATGETS(
DT_catd,
serverprotocol_values[i].set_id,
serverprotocol_values[i].msg_id,
serverprotocol_values[i].dflt_gui_string);
}
_serverprotocol_iom =
new IndexedOptionMenu(_serverframe_form, nitems, (char**) strings, data);
XtVaSetValues(
_serverprotocol_iom->baseWidget(),
XmNtopAttachment, XmATTACH_FORM,
XmNleftAttachment, XmATTACH_POSITION,
XmNleftPosition, 1,
XmNrightAttachment, XmATTACH_NONE,
NULL);
_serverprotocol_iom->manage();
_serverprotocol_iom->setSpec((void*) DTMAS_PROPDFLT_PROTOCOL);
XtFree((char*) strings);
XtFree((char*) data);
xms = XmStringCreateLocalized(
CATGETS(DT_catd, 27, 8, "Server Protocol:"));
_serverprotocol_label = XtVaCreateManagedWidget(
"ServerProtocolLabel",
xmLabelWidgetClass, _serverframe_form,
XmNlabelString, xms,
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNtopOffset, 0,
XmNtopWidget, _serverprotocol_iom->baseWidget(),
XmNleftAttachment, XmATTACH_NONE,
XmNrightAttachment, XmATTACH_WIDGET,
XmNrightOffset, 3,
XmNrightWidget, _serverprotocol_iom->baseWidget(),
NULL);
XmStringFree(xms);
//
// Create PropUiItem for the Printed Headers option
//
MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_PROTOCOL);
PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_PROTOCOL);
pui = (PropUiItem *) new
IndexedOptionMenuUiItem(_serverprotocol_iom, _FROM_MAILRC, propkey);
_propui_array->append(pui);
//
// Create GUI for the ServerName Option
//
_servername_tf = XtVaCreateManagedWidget(
"ServerNameText",
xmTextFieldWidgetClass, _serverframe_form,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, _serverprotocol_iom->baseWidget(),
XmNleftAttachment, XmATTACH_POSITION,
XmNleftPosition, 1,
XmNrightAttachment, XmATTACH_NONE,
XmNcolumns, 30,
XmNvalue, "",
NULL);
xms = XmStringCreateLocalized(CATGETS(DT_catd, 27, 9, "Server Name:"));
_servername_label = XtVaCreateManagedWidget(
"ServerNameLabel",
xmLabelWidgetClass, _serverframe_form,
XmNlabelString, xms,
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNtopOffset, 0,
XmNtopWidget, _servername_tf,
XmNleftAttachment, XmATTACH_NONE,
XmNrightAttachment, XmATTACH_WIDGET,
XmNrightOffset, 3,
XmNrightWidget, _servername_tf,
NULL);
XmStringFree(xms);
//
// Create PropUiItem for the ServerName Option
//
MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_SERVERNAME);
PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_SERVERNAME);
pui = (PropUiItem *) new
TextFieldUiItem(_servername_tf, _FROM_MAILRC, propkey);
_propui_array->append(pui);
//
// Create GUI for the UserName Option
//
_username_tf = XtVaCreateManagedWidget(
"UserNameText",
xmTextFieldWidgetClass, _serverframe_form,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, _servername_tf,
XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNleftWidget, _servername_tf,
XmNrightAttachment, XmATTACH_NONE,
XmNcolumns, 30,
XmNvalue, "",
NULL);
xms = XmStringCreateLocalized(CATGETS(DT_catd, 27, 10, "User Name:"));
_username_label = XtVaCreateManagedWidget(
"UserNameLabel",
xmLabelWidgetClass, _serverframe_form,
XmNlabelString, xms,
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNtopWidget, _username_tf,
XmNleftAttachment, XmATTACH_NONE,
XmNrightAttachment, XmATTACH_WIDGET,
XmNrightWidget, _username_tf,
NULL);
XmStringFree(xms);
//
// Create PropUiItem for the UserName Option
//
struct passwd pwd;
GetPasswordEntry(pwd);
MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_USERNAME);
PropSource::setDefaultValue(propkey, pwd.pw_name);
pui = (PropUiItem *) new
TextFieldUiItem(_username_tf, _FROM_MAILRC, propkey);
_propui_array->append(pui);
//
// Create GUI for the Password Option
//
_password_tf = XtVaCreateManagedWidget(
"PasswordText",
xmTextFieldWidgetClass, _serverframe_form,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, _username_tf,
XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNleftWidget, _username_tf,
XmNrightAttachment, XmATTACH_NONE,
XmNcolumns, 30,
XmNvalue, "",
NULL);
xms = XmStringCreateLocalized(CATGETS(DT_catd, 27, 11, "Password:"));
_password_label = XtVaCreateManagedWidget(
"PasswordLabel",
xmLabelWidgetClass, _serverframe_form,
XmNlabelString, xms,
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNtopWidget, _password_tf,
XmNleftAttachment, XmATTACH_NONE,
XmNrightAttachment, XmATTACH_WIDGET,
XmNrightWidget, _password_tf,
NULL);
XmStringFree(xms);
//
// Create a PropUiItem for the Password Option
//
MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_PASSWORD);
PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_PASSWORD);
_password_pui = new
EncryptedTextFieldUiItem(_password_tf, _FROM_MAILRC, propkey);
_propui_array->append((PropUiItem*) _password_pui);
//
// Create GUI for the Remember Password Option
//
xms = XmStringCreateLocalized(
CATGETS(DT_catd, 27, 12, "Remember password"));
_rememberpassword_tb = XtVaCreateManagedWidget(
"RememberPasswordTB",
xmToggleButtonWidgetClass, _serverframe_form,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, _password_tf,
XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNleftWidget, _password_tf,
XmNrightAttachment, XmATTACH_NONE,
XmNalignment, XmALIGNMENT_END,
XmNlabelString, xms,
XmNset, False,
NULL);
XmStringFree(xms);
XtAddCallback(
_rememberpassword_tb,
XmNvalueChangedCallback,
MailRetrievalOptions::rememberPasswordChangedCB,
(XtPointer) this);
//
// Create PropUiItem for the RememberPassword Option
//
MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_REMEMBERPASSWORD);
PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_REMEMBERPASSWORD);
pui = (PropUiItem *) new
CheckBoxUiItem(_rememberpassword_tb, _FROM_MAILRC, propkey);
_propui_array->append(pui);
//
// Create GUI for the Delete From Server Option
//
xms = XmStringCreateLocalized(
CATGETS(DT_catd, 27, 13,
"Delete from server after retrieval"));
_removeafterdelivery_tb = XtVaCreateManagedWidget(
"RemoveAfterDeliveryTB",
xmToggleButtonWidgetClass, _serverframe_form,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, _rememberpassword_tb,
XmNleftAttachment, XmATTACH_POSITION,
XmNleftPosition, 1,
XmNrightAttachment, XmATTACH_NONE,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNlabelString, xms,
XmNset, True,
NULL);
XmStringFree(xms);
//
// Create PropUiItem for the RemoveAfterDelivery Option
//
MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_REMOVEAFTERDELIVERY);
PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_REMOVEAFTERDELIVERY);
pui = (PropUiItem *) new
CheckBoxUiItem(_removeafterdelivery_tb, _FROM_MAILRC, propkey);
_propui_array->append(pui);
//
// Create GUI for the RetrieveOld Option
//
xms = XmStringCreateLocalized(
CATGETS(DT_catd, 27, 14,
"Retrieve old messages"));
_retrieveold_tb = XtVaCreateManagedWidget(
"RetrieveOldTB",
xmToggleButtonWidgetClass, _serverframe_form,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, _removeafterdelivery_tb,
XmNleftAttachment, XmATTACH_POSITION,
XmNleftPosition, 1,
XmNrightAttachment, XmATTACH_NONE,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNlabelString, xms,
XmNset, True,
NULL);
XmStringFree(xms);
//
// Create PropUiItem for the RetrieveOld Option
//
MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_RETRIEVEOLD);
PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_RETRIEVEOLD);
pui = (PropUiItem *) new
CheckBoxUiItem(_retrieveold_tb, _FROM_MAILRC, propkey);
_propui_array->append(pui);
//
// Create FRAME to hold the user command printing options
//
_custom_frame = XtVaCreateManagedWidget(
"CustomFrame", xmFrameWidgetClass, _form,
XmNchildHorizontalAlignment,
XmALIGNMENT_BEGINNING,
XmNchildVerticalAlignment, XmALIGNMENT_CENTER,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, _server_frame,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, 10,
XmNrightAttachment, XmATTACH_FORM,
XmNrightOffset, 10,
XmNbottomAttachment, XmATTACH_FORM,
XmNbottomOffset, 10,
NULL);
xms = XmStringCreateLocalized(
CATGETS(DT_catd, 27, 15, "Custom retrieval"));
_custom_tb = XtVaCreateManagedWidget(
"CustomTB",
xmToggleButtonGadgetClass, _custom_frame,
XmNchildType, XmFRAME_TITLE_CHILD,
XmNchildHorizontalAlignment,
XmALIGNMENT_BEGINNING,
XmNchildVerticalAlignment, XmALIGNMENT_CENTER,
XmNlabelString, xms,
XmNset, False,
NULL);
XmStringFree(xms);
XtAddCallback(
_custom_tb,
XmNvalueChangedCallback,
MailRetrievalOptions::retrievalTBSValueChangedCB,
(XtPointer) this);
//
// Create PropUiItem for the Custom Command Option
//
MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_GETMAILVIACOMMAND);
PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_GETMAILVIACOMMAND);
pui = (PropUiItem *) new CheckBoxUiItem(_custom_tb, _FROM_MAILRC, propkey);
_propui_array->append(pui);
_customframe_form = XtVaCreateManagedWidget(
"CustomFrameForm",
xmFormWidgetClass, _custom_frame,
//XmNallowOverlap, False,
XmNfractionBase, 3,
XmNresizePolicy, XmRESIZE_ANY,
NULL);
//
// Create GUI for the User Command Option
//
_customcommand_tf = XtVaCreateManagedWidget(
"CustomCommandText",
xmTextFieldWidgetClass, _customframe_form,
XmNtopAttachment, XmATTACH_FORM,
XmNleftAttachment, XmATTACH_POSITION,
XmNleftPosition, 1,
XmNrightAttachment, XmATTACH_NONE,
XmNcolumns, 45,
XmNvalue, "",
NULL);
xms = XmStringCreateLocalized(
CATGETS(DT_catd, 27, 16, "User Getmail command:"));
_customcommand_label = XtVaCreateManagedWidget(
"CustomCommandLabel",
xmLabelWidgetClass, _customframe_form,
XmNlabelString, xms,
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNtopOffset, 0,
XmNtopWidget, _customcommand_tf,
XmNleftAttachment, XmATTACH_NONE,
XmNrightAttachment, XmATTACH_WIDGET,
XmNrightOffset, 3,
XmNrightWidget, _customcommand_tf,
NULL);
XmStringFree(xms);
//
// Create PropUiItem for the ServerName Option
//
MrGENPROPKEY(propkey, _foldername, DTMAS_PROPKEY_GETMAILCOMMAND);
PropSource::setDefaultValue(propkey, DTMAS_PROPDFLT_GETMAILCOMMAND);
pui = (PropUiItem *) new
TextFieldUiItem(_customcommand_tf, _FROM_MAILRC, propkey);
_propui_array->append(pui);
//
// Save widgets for manipulation.
//
_retrieval_tbs->append(_system_tb);
_retrieval_tbs->append(_server_tb);
_retrieval_tbs->append(_custom_tb);
_server_options->append(_serverprotocol_label);
_server_options->append(_serverprotocol_iom->baseWidget());
_server_options->append(_servername_label);
_server_options->append(_servername_tf);
_server_options->append(_username_label);
_server_options->append(_username_tf);
_server_options->append(_password_label);
_server_options->append(_password_tf);
_server_options->append(_rememberpassword_tb);
_server_options->append(_removeafterdelivery_tb);
_server_options->append(_retrieveold_tb);
_custom_options->append(_customcommand_label);
_custom_options->append(_customcommand_tf);
delete [] propkey;
}
MailRetrievalOptions::~MailRetrievalOptions (void)
{
int i;
PropUiItem *pui;;
IndexedOptionMenu *iom;
if (_propui_array)
{
for (i=0; i<_propui_array->length(); i++)
{
pui = (*_propui_array)[i];
delete pui;
}
delete _propui_array;
}
if (_retrieval_tbs) delete _retrieval_tbs;
if (_server_options) delete _server_options;
if (_custom_options) delete _custom_options;
if (_serverprotocol_iom) delete _serverprotocol_iom;
if (_foldername) free(_foldername);
if (_w) XtDestroyWidget(_w);
}
char *
MailRetrievalOptions::isValidInboxPath(PropUiItem* pui, void* data)
{
MailSession *ses = theRoamApp.session();
DtMail::Session *d_session = ses->session();
DtMailEnv error;
const char *errmsg = NULL;
char *inbox_path = NULL;
char *s, *t, *tmp;
char *expanded_path = NULL;
Widget text;
int status;
text = pui->getWidget();
if (text) inbox_path = XmTextFieldGetString(text);
if (NULL == inbox_path || 0 == strlen(inbox_path))
return CATGETS(DT_catd, 27, 17, "Null INBOX path.");
tmp = (char*) malloc(strlen(inbox_path)+1);
for (s=inbox_path, t=tmp; *s; s++)
{
if (! isspace(*s))
{
*t = *s;
t++;
}
}
*t = '\0';
free(inbox_path);
inbox_path = tmp;
if (NULL == inbox_path || 0 == strlen(inbox_path))
return CATGETS(DT_catd, 27, 17, "Null INBOX path.");
if (isalpha(inbox_path[0]))
{
tmp = (char*) malloc(strlen(inbox_path) + 3);
sprintf(tmp, "./%s", inbox_path);
free(inbox_path);
inbox_path = tmp;
}
expanded_path = d_session->expandPath(error, inbox_path);
if (expanded_path) XmTextFieldSetString(text, expanded_path);
SafePathIsAccessible(error, expanded_path);
if (error.isSet())
{
errmsg = (const char*) error;
errmsg = strdup(errmsg);
}
else
errmsg = NULL;
if (inbox_path) free(inbox_path);
free(expanded_path);
return (char*) errmsg;
}
void
MailRetrievalOptions::initOptionInteractions(void)
{
int i;
unsigned char isset, isset_server;
Widget opt;
XtVaGetValues(_server_tb, XmNset, &isset, NULL);
if (XmUNSET == isset)
{
for (i=0; i<_server_options->length(); i++)
{
opt = (*_server_options)[i];
XtVaSetValues(opt, XmNsensitive, False, NULL);
}
}
else
{
for (i=0; i<_server_options->length(); i++)
{
opt = (*_server_options)[i];
XtVaSetValues(opt, XmNsensitive, True, NULL);
}
}
isset_server = isset;
XtVaGetValues(_custom_tb, XmNset, &isset, NULL);
if (XmUNSET == isset)
{
for (i=0; i<_custom_options->length(); i++)
{
opt = (*_custom_options)[i];
XtVaSetValues(opt, XmNsensitive, False, NULL);
}
}
else
{
for (i=0; i<_custom_options->length(); i++)
{
opt = (*_custom_options)[i];
XtVaSetValues(opt, XmNsensitive, True, NULL);
}
}
XtVaGetValues(_rememberpassword_tb, XmNset, &isset, NULL);
if (XmSET == isset)
{
_password_pui->writeAllowed(DTM_TRUE);
if (isset_server)
XtVaSetValues(_password_label, XmNsensitive, True, NULL);
}
else
{
_password_pui->writeAllowed(DTM_FALSE);
XtVaSetValues(_password_label, XmNsensitive, False, NULL);
}
}
PropUiItem *
MailRetrievalOptions::getFirstProp(void)
{
_propui_array_iterator = 0;
return getNextProp();
}
PropUiItem *
MailRetrievalOptions::getNextProp(void)
{
PropUiItem *pui = (PropUiItem *) NULL;
if (_propui_array_iterator < _propui_array->length())
{
pui = (*_propui_array)[_propui_array_iterator];
_propui_array_iterator++;
}
return pui;
}
int
MailRetrievalOptions::getNumProps(void)
{
return _propui_array->length();
}
void
MailRetrievalOptions::rememberPasswordChangedCB(
Widget w,
XtPointer client_data,
XtPointer call_data)
{
MailRetrievalOptions
*mro = (MailRetrievalOptions*) client_data;
XmToggleButtonCallbackStruct
*cbs = (XmToggleButtonCallbackStruct*) call_data;
#if 0
if (XmSET == cbs->set)
{
XtVaSetValues(mro->_password_label, XmNsensitive, True, NULL);
mro->_password_pui->writeAllowed(DTM_TRUE);
}
else
{
XtVaSetValues(mro->_password_label, XmNsensitive, False, NULL);
mro->_password_pui->writeAllowed(DTM_FALSE);
}
#else
mro->initOptionInteractions();
#endif
}
void
MailRetrievalOptions::retrievalTBSValueChangedCB(
Widget w,
XtPointer client_data,
XtPointer call_data)
{
MailRetrievalOptions
*mro = (MailRetrievalOptions*) client_data;
XmToggleButtonCallbackStruct
*cbs = (XmToggleButtonCallbackStruct*) call_data;
int i;
Widget opt, tb;
if (XmUNSET == cbs->set)
{
XtVaSetValues(w, XmNset, XmSET, NULL);
return;
}
for (i=0; i<mro->_retrieval_tbs->length(); i++)
{
tb = (*mro->_retrieval_tbs)[i];
if (tb != w) XtVaSetValues(tb, XmNset, XmUNSET, NULL);
}
#if 0
if (w == mro->_system_tb)
{
for (i=0; i<mro->_server_options->length(); i++)
{
opt = (*mro->_server_options)[i];
XtVaSetValues(opt, XmNsensitive, False, NULL);
}
for (i=0; i<mro->_custom_options->length(); i++)
{
opt = (*mro->_custom_options)[i];
XtVaSetValues(opt, XmNsensitive, False, NULL);
}
}
else if (w == mro->_server_tb)
{
for (i=0; i<mro->_server_options->length(); i++)
{
opt = (*mro->_server_options)[i];
XtVaSetValues(opt, XmNsensitive, True, NULL);
}
for (i=0; i<mro->_custom_options->length(); i++)
{
opt = (*mro->_custom_options)[i];
XtVaSetValues(opt, XmNsensitive, False, NULL);
}
}
else if (w == mro->_custom_tb)
{
for (i=0; i<mro->_server_options->length(); i++)
{
opt = (*mro->_server_options)[i];
XtVaSetValues(opt, XmNsensitive, False, NULL);
}
for (i=0; i<mro->_custom_options->length(); i++)
{
opt = (*mro->_custom_options)[i];
XtVaSetValues(opt, XmNsensitive, True, NULL);
}
}
#else
mro->initOptionInteractions();
#endif
}
char *
MailRetrievalOptions::getPassword(char *foldername)
{
DtMail::Session *d_session = NULL;
DtMail::MailRc *m_rc = NULL;
DtMailEnv error;
const char *string = NULL;
char propkey[MAXPATHLEN];
d_session = theRoamApp.session()->session();
m_rc = d_session->mailRc(error);
MrGENPROPKEY(propkey, foldername, DTMAS_PROPKEY_PASSWORD);
m_rc->getValue(error, propkey , &string, DTM_TRUE);
if (string == NULL || error.isSet()) return NULL;
return (char*) string;
}