gecko-dev/cmd/xfe/src/PrefsDialogMServer.cpp

1322 строки
38 KiB
C++

/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator client code.
*
* The Initial Developer of the Original Code is Netscape Communications
* Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
/* -*- Mode: C++; tab-width: 4 -*- */
/*
PrefsDialogMServer.cpp -- Multiple mail server preferences dialog
Created: Arun Sharma <asharma@netscape.com>, Thu Mar 19 14:37:46 PST 1998
*/
#include "rosetta.h"
#include "MozillaApp.h"
#include "prefapi.h"
#include "felocale.h"
#include "xpgetstr.h"
#include "PrefsDialogMServer.h"
#include <Xm/Label.h>
#include <Xm/LabelG.h>
#include <Xm/PushB.h>
#include <Xm/PushBG.h>
#include <Xm/ToggleB.h>
#include <Xm/ArrowBG.h>
#include <Xm/Form.h>
#include <Xm/Frame.h>
#include <Xm/LabelG.h>
#include <Xm/TextF.h>
#include <Xm/ToggleBG.h>
#include <Xfe/Xfe.h>
// IMAP pref stuff taken from WINFE. This code is XP really.
#define USERNAME ".userName"
#define REMEMBER_PASSWORD ".remember_password"
#define CHECK_NEW_MAIL ".check_new_mail"
#define CHECK_TIME ".check_time"
#define OVERRIDE_NAMESPACES ".override_namespaces"
#define DELETE_MODEL ".delete_model"
#define IS_SECURE ".isSecure"
#define NS_OTHER ".namespace.other_users"
#define NS_PERSONAL ".namespace.personal"
#define NS_PUBLIC ".namespace.public"
#define USE_SUB ".using_subscription"
#define EXPUNGE_QUIT ".cleanup_inbox_on_exit"
#define TRASH_QUIT ".empty_trash_on_exit"
#define IMAP_DOWNLOAD "mail.imap.new_mail_get_headers"
#define POP_SERVER "network.hosts.pop_server"
#define POP_NAME "mail.pop_name"
#define POP_REMEMBER_PASSWORD "mail.remember_password"
#define POP_CHECK_NEW_MAIL "mail.check_new_mail"
#define POP_CHECK_TIME "mail.check_time"
#define POP_LEAVE_ON_SERVER "mail.leave_on_server"
#define POP_DOWNLOAD "mail.pop3_gets_new_mail"
#define MAIL_SERVER_TYPE "mail.server_type"
extern int XFE_GENERAL_TAB;
extern int XFE_ADVANCED_TAB;
extern int XFE_IMAP_TAB;
extern int XFE_POP_TAB;
extern int XFE_MOVEMAIL_TAB;
static const char PrefTemplate[] = "mail.imap.server.";
// Make sure XP_FREE() from the caller function;
static char*
IMAP_GetPrefName(const char *host_name, const char *pref)
{
XP_ASSERT(host_name);
if (!host_name) return NULL;
int pref_size=sizeof(PrefTemplate) +
XP_STRLEN(host_name) +
XP_STRLEN(pref) + 1;
char *pref_name= (char *) XP_CALLOC(pref_size, sizeof(char));
XP_STRCPY(pref_name, PrefTemplate);
XP_STRCAT(pref_name, host_name);
XP_STRCAT(pref_name, pref);
return pref_name;
}
static XP_Bool
IMAP_PrefIsLocked(const char *host_name, const char* pref)
{
XP_Bool result;
char* pref_name = IMAP_GetPrefName(host_name, pref);
if (!pref_name) return FALSE;
result = PREF_PrefIsLocked(pref_name);
XP_FREE(pref_name);
return result;
}
static void
IMAP_SetCharPref(const char *host_name, const char* pref, const char* value)
{
char* pref_name = IMAP_GetPrefName(host_name, pref);
if (!pref_name) return;
PREF_SetCharPref(pref_name, value);
XP_FREE(pref_name);
}
static void
IMAP_SetIntPref(const char *host_name, const char* pref, int32 value)
{
char* pref_name = IMAP_GetPrefName(host_name, pref);
if (!pref_name) return;
PREF_SetIntPref(pref_name, value);
XP_FREE(pref_name);
}
static void
IMAP_SetBoolPref(const char *host_name, const char *pref, XP_Bool value)
{
char* pref_name = IMAP_GetPrefName(host_name, pref);
if (!pref_name) return;
PREF_SetBoolPref(pref_name, value);
XP_FREE(pref_name);
}
static int
IMAP_CopyCharPref(const char *host_name, const char *pref, char **buf)
{
char* pref_name = IMAP_GetPrefName(host_name, pref);
if (!pref_name) return PREF_ERROR;
if (pref_name)
{
int retval = PREF_CopyCharPref(pref_name, buf);
XP_FREE(pref_name);
return retval;
}
return PREF_ERROR;
}
static int
IMAP_GetIntPref(const char *host_name, const char* pref, int32 *intval)
{
char* pref_name = IMAP_GetPrefName(host_name,pref);
if (!pref_name) return PREF_ERROR;
int retval = PREF_GetIntPref(pref_name, intval);
XP_FREE(pref_name);
return retval;
}
static int
IMAP_GetBoolPref(const char *host_name, const char* pref, XP_Bool *boolval)
{
char* pref_name = IMAP_GetPrefName(host_name, pref);
if (!pref_name) return PREF_ERROR;
int retval = PREF_GetBoolPref(pref_name, boolval);
XP_FREE(pref_name);
return retval;
}
XFE_PrefsMServerDialog::XFE_PrefsMServerDialog(Widget parent,
char *server_name,
XP_Bool allow_multiple,
MWContext *context)
: XFE_XmLFolderDialog((XFE_View *) NULL,
parent,
"MailServerInfo",
context,
TRUE, // ok
TRUE, // cancel
FALSE, // help
FALSE, // apply
TRUE, // separator
TRUE // modal
),
m_allow_multiple(allow_multiple),
m_server_name(server_name)
{
int32 server_type;
PREF_GetIntPref(MAIL_SERVER_TYPE,&server_type);
m_server_type = (MSG_SERVER_TYPE)server_type;
create();
init();
}
void XFE_PrefsMServerDialog::create() {
XFE_XmLFolderView* folder_view = (XFE_XmLFolderView *) m_view;
// create tabs
m_general_tab =
new XFE_PrefsMServerGeneralTab(this,folder_view,m_wParent,
m_allow_multiple);
m_imap_tab = new XFE_PrefsMServerIMAPTab(this, folder_view);
m_imap_advanced_tab = new XFE_PrefsMServerAdvancedTab(this, folder_view);
m_pop_tab = new XFE_PrefsMServerPOPTab(this, folder_view);
m_movemail_tab = new XFE_PrefsMServerMovemailTab(this, folder_view);
// add tabs
folder_view->addTab(m_general_tab);
// add these tabs but don't show them
folder_view->addTab(m_imap_tab, FALSE);
folder_view->addTab(m_imap_advanced_tab, FALSE);
folder_view->addTab(m_pop_tab, FALSE);
folder_view->addTab(m_movemail_tab, FALSE);
// start with general tab
m_general_tab->show();
m_general_tab->setChangedCallback(changedType, (void *)this);
}
void XFE_PrefsMServerDialog::init() {
m_general_tab->init(m_server_name, m_server_type);
ChangedType(m_server_type);
m_imap_advanced_tab->init(m_server_name);
m_imap_tab->init(m_server_name);
m_pop_tab->init();
m_movemail_tab->init();
}
void XFE_PrefsMServerDialog::apply() {
// we need to tell the other panes what server they should use
// and only apply the relevant panes
char *server_name=m_general_tab->getServerName();
m_general_tab->apply();
switch(m_server_type) {
case MSG_Imap4:
m_imap_tab->apply(server_name);
m_imap_advanced_tab->apply(server_name);
break;
case MSG_Pop3:
m_pop_tab->apply();
break;
case MSG_MoveMail:
m_movemail_tab->apply();
break;
case MSG_Inbox:
XP_ASSERT(0);
break;
}
}
void
XFE_PrefsMServerDialog::changedType(void *closure,MSG_SERVER_TYPE server_type)
{
((XFE_PrefsMServerDialog *)closure)->ChangedType(server_type);
}
void
XFE_PrefsMServerDialog::ChangedType(MSG_SERVER_TYPE server_type)
{
m_server_type=server_type;
// show/hide appropriate tabs
if (server_type==MSG_Imap4) {
m_imap_tab->show();
m_imap_advanced_tab->show();
} else {
m_imap_tab->hide();
m_imap_advanced_tab->hide();
}
if (server_type==MSG_Pop3) {
m_pop_tab->show();
} else {
m_pop_tab->hide();
}
if (server_type==MSG_MoveMail) {
m_movemail_tab->show();
} else {
m_movemail_tab->hide();
}
}
// Create the body of the IMAP General Tab
XFE_PrefsMServerGeneralTab::XFE_PrefsMServerGeneralTab(
XFE_Component *top,
XFE_View *view,
Widget parent,
XP_Bool allow_multiple)
: XFE_XmLTabView(top, view, XFE_GENERAL_TAB),
m_server_label(0),
m_server_text(0),
m_server_type_menu(0),
m_server_type_label(0),
m_server_type_option(0),
m_server_user_label(0),
m_server_user_name(0),
m_remember_password(0),
m_check_mail(0),
m_check_time(0),
m_minute_label(0),
m_imap_button(0),
m_pop_button(0),
m_movemail_button(0),
m_changed_callback(0),
m_changed_closure(0),
m_server_name(0),
m_parent(parent)
{
create(allow_multiple);
}
void XFE_PrefsMServerGeneralTab::create(XP_Bool allow_multiple) {
Widget kids[15];
Arg av[10];
int ac = 0, i = 0;
Widget form;
form = getBaseWidget();
kids[i++] = m_server_label =
XmCreateLabelGadget(form, "ServerName", av, ac);
kids[i++] = m_server_text =
fe_CreateTextField(form, "ServerNameText", av, ac);
Visual *v = 0;
Colormap cmap = 0;
Cardinal depth = 0;
ac = 0;
XtVaGetValues (m_parent,
XtNvisual, &v,
XtNcolormap, &cmap,
XtNdepth, &depth,
0);
ac = 0;
kids[i++] = m_server_type_label =
XmCreateLabelGadget(form, "ServerType", av, ac);
ac = 0;
XtSetArg(av[ac], XmNvisual, v); ac++;
XtSetArg(av[ac], XmNdepth, depth); ac++;
XtSetArg(av[ac], XmNcolormap, cmap); ac++;
m_server_type_menu = XmCreatePulldownMenu (form, "serverTypeMenu", av, ac);
ac = 0;
XtSetArg (av [ac], XmNsubMenuId, m_server_type_menu); ac++;
kids[i++] = m_server_type_option =
fe_CreateOptionMenu (form, "serverTypeOption", av, ac);
fe_UnmanageChild_safe(XmOptionLabelGadget(m_server_type_option));
// Now add the entries
// POP
if (allow_multiple) {
m_pop_button = XmCreatePushButtonGadget(m_server_type_menu,
"popOption", av, ac);
XtAddCallback(m_pop_button, XmNactivateCallback,
optionPop_cb,(XtPointer)this);
XtManageChild(m_pop_button);
m_movemail_button = XmCreatePushButtonGadget(m_server_type_menu,
"movemailOption", av, ac);
XtAddCallback(m_movemail_button, XmNactivateCallback,
optionMovemail_cb, (XtPointer)this);
XtManageChild(m_movemail_button);
}
// IMAP
m_imap_button = XmCreatePushButtonGadget(m_server_type_menu,
"imapOption", av, ac);
XtAddCallback(m_imap_button, XmNactivateCallback,
optionImap_cb,(XtPointer)this);
XtManageChild(m_imap_button);
// IMAP is selected until init()
XtVaSetValues (m_server_type_option,
XmNmenuHistory, m_imap_button,
NULL);
ac = 0;
kids[i++] = m_server_user_label =
XmCreateLabelGadget(form, "ServerUser", av, ac);
kids[i++] = m_server_user_name =
fe_CreateTextField(form, "Username", av, ac);
kids[i++] = m_remember_password =
XmCreateToggleButtonGadget(form, "RememberPass", av, ac);
kids[i++] = m_check_mail =
XmCreateToggleButtonGadget(form, "CheckMail", av, ac);
kids[i++] = m_check_time =
fe_CreateTextField(form, "WaitTime", av, ac);
kids[i++] = m_minute_label =
XmCreateLabelGadget(form, "MinuteLabel", av, ac);
kids[i++] = m_download_toggle =
XmCreateToggleButtonGadget(form, "downloadToggle", av, ac);
int max_height1 = XfeVaGetTallestWidget(m_server_label,
m_server_text,
NULL);
int max_height2 = XfeVaGetTallestWidget(m_server_type_label,
m_server_type_option,
NULL) + 15;
int max_height3 = XfeVaGetTallestWidget(m_server_user_label,
m_server_user_name,
NULL);
int max_height5 = XfeVaGetTallestWidget(m_check_mail,
m_check_time,
m_minute_label,
NULL);
// Specify the geometry constraints
XtVaSetValues(m_server_label,
XmNheight, max_height1,
XmNalignment, XmALIGNMENT_END,
XmNleftAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_FORM,
NULL);
XtVaSetValues(m_server_text,
XmNheight, max_height1,
XmNleftAttachment, XmATTACH_WIDGET,
XmNleftWidget, m_server_label,
XmNrightAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNtopWidget, m_server_label,
NULL);
XtVaSetValues(m_server_type_label,
XmNheight, max_height2,
XmNleftAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, m_server_label,
NULL);
XtVaSetValues(m_server_type_option,
XmNheight, max_height2,
XmNleftAttachment, XmATTACH_WIDGET,
XmNleftWidget, m_server_type_label,
XmNrightAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNtopWidget, m_server_type_label,
NULL);
XtVaSetValues(m_server_user_label,
XmNheight, max_height3,
XmNalignment, XmALIGNMENT_END,
XmNleftAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, m_server_type_label,
NULL);
XtVaSetValues(m_server_user_name,
XmNheight, max_height3,
XmNrightAttachment, XmATTACH_FORM,
XmNleftAttachment, XmATTACH_WIDGET,
XmNleftWidget, m_server_user_label,
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNtopWidget, m_server_user_label,
NULL);
XtVaSetValues(m_remember_password,
XmNleftAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, m_server_user_label,
NULL);
XtVaSetValues(m_check_mail,
XmNheight, max_height5,
XmNleftAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, m_remember_password,
NULL);
XtVaSetValues(m_check_time,
XmNheight, max_height5,
XmNleftAttachment, XmATTACH_WIDGET,
XmNleftWidget, m_check_mail,
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNtopWidget, m_check_mail,
NULL);
XtVaSetValues(m_minute_label,
XmNheight, max_height5,
XmNleftAttachment, XmATTACH_WIDGET,
XmNleftWidget, m_check_time,
XmNrightWidget, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNtopWidget, m_check_time,
NULL);
XtVaSetValues(m_download_toggle,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, m_check_mail,
XmNleftAttachment, XmATTACH_FORM,
NULL);
// Manage the kids
XtManageChildren(kids, i);
}
void
XFE_PrefsMServerGeneralTab::init(char *server_name,
MSG_SERVER_TYPE server_type)
{
m_is_new=FALSE;
m_server_name=server_name;
m_original_type=server_type;
setServerType(server_type);
// this is ugly - m_is_new has to be set correctly
// in order for lockWidgets() to behave correctly
if (!server_name) {
m_is_new=TRUE;
lockWidgets();
}
char *user_name=NULL;
XP_Bool remember_password=FALSE;
XP_Bool check_mail=TRUE;
XP_Bool download=TRUE;
int32 check_time=10;
if (server_name) fe_SetTextField(m_server_text, server_name);
// map Prefs->widget values
switch(m_server_type) {
case MSG_Imap4:
if (server_name) {
IMAP_CopyCharPref(server_name, USERNAME,&user_name);
IMAP_GetBoolPref(server_name, REMEMBER_PASSWORD,&remember_password);
IMAP_GetBoolPref(server_name, CHECK_NEW_MAIL,&check_mail);
IMAP_GetIntPref(server_name, CHECK_TIME, &check_time);
}
PREF_GetBoolPref(IMAP_DOWNLOAD, &download);
break;
case MSG_Pop3:
PREF_CopyCharPref(POP_NAME,&user_name);
PREF_GetBoolPref(POP_REMEMBER_PASSWORD,&remember_password);
PREF_GetBoolPref(POP_CHECK_NEW_MAIL,&check_mail);
PREF_GetIntPref(POP_CHECK_TIME, &check_time);
PREF_GetBoolPref(POP_DOWNLOAD, &download);
XP_ASSERT(m_pop_button);
break;
case MSG_MoveMail:
user_name=XP_STRDUP("");
PREF_GetBoolPref(POP_CHECK_NEW_MAIL,&check_mail);
PREF_GetIntPref(POP_CHECK_TIME, &check_time);
PREF_GetBoolPref(POP_DOWNLOAD, &download);
break;
case MSG_Inbox:
XP_ASSERT(0);
break;
}
if (user_name) fe_SetTextField(m_server_user_name,user_name);
XmToggleButtonGadgetSetState(m_remember_password, remember_password,TRUE);
XmToggleButtonGadgetSetState(m_check_mail, check_mail,TRUE);
XmToggleButtonGadgetSetState(m_download_toggle, download, TRUE);
char *check_time_buf=PR_smprintf("%d",check_time);
fe_SetTextField(m_check_time,check_time_buf);
XP_FREE(check_time_buf);
XP_FREE(user_name);
}
void
XFE_PrefsMServerGeneralTab::setServerType(MSG_SERVER_TYPE type)
{
m_server_type=type;
switch(m_server_type) {
case MSG_Imap4:
XtVaSetValues (m_server_type_option,
XmNmenuHistory, m_imap_button,
NULL);
break;
case MSG_Pop3:
XtVaSetValues (m_server_type_option,
XmNmenuHistory, m_pop_button,
NULL);
break;
case MSG_MoveMail:
XtVaSetValues (m_server_type_option,
XmNmenuHistory, m_movemail_button,
NULL);
break;
case MSG_Inbox:
XP_ASSERT(0);
break;
}
}
void
XFE_PrefsMServerGeneralTab::lockWidgets()
{
XP_Bool lock_server=FALSE,
lock_user=FALSE,
lock_password=FALSE,
lock_check_mail=FALSE,
lock_download=FALSE,
lock_check_time=FALSE;
switch (m_server_type) {
case MSG_Imap4:
if (m_is_new || (m_original_type!=MSG_Imap4))
lock_server = FALSE;
else
lock_server = TRUE;
lock_download=PREF_PrefIsLocked(IMAP_DOWNLOAD);
if (m_server_name) {
lock_user = IMAP_PrefIsLocked(m_server_name, USERNAME);
lock_password = IMAP_PrefIsLocked(m_server_name, REMEMBER_PASSWORD);
lock_check_mail = IMAP_PrefIsLocked(m_server_name, CHECK_NEW_MAIL);
lock_check_time = IMAP_PrefIsLocked(m_server_name, CHECK_TIME);
}
break;
case MSG_Pop3:
lock_server = PREF_PrefIsLocked(POP_SERVER);
lock_user = PREF_PrefIsLocked(POP_NAME);
lock_password = PREF_PrefIsLocked(POP_REMEMBER_PASSWORD);
lock_check_mail = PREF_PrefIsLocked(POP_CHECK_NEW_MAIL);
lock_check_time = PREF_PrefIsLocked(POP_CHECK_TIME);
lock_download = PREF_PrefIsLocked(POP_DOWNLOAD);
break;
case MSG_MoveMail:
lock_server=TRUE;
lock_user=TRUE;
lock_password=TRUE;
lock_check_mail = PREF_PrefIsLocked(POP_CHECK_NEW_MAIL);
lock_check_time = PREF_PrefIsLocked(POP_CHECK_TIME);
lock_download = PREF_PrefIsLocked(POP_DOWNLOAD);
break;
case MSG_Inbox:
XP_ASSERT(0);
break;
}
XtSetSensitive(m_server_text, !lock_server);
XtSetSensitive(m_server_user_name, !lock_user);
XtSetSensitive(m_remember_password, !lock_password);
XtSetSensitive(m_check_mail, !lock_check_mail);
XtSetSensitive(m_check_time, !lock_check_time);
XtSetSensitive(m_download_toggle, !lock_download);
}
void
XFE_PrefsMServerGeneralTab::optionImap_cb(Widget /* w */,
XtPointer clientData,
XtPointer /* callData */)
{
XFE_PrefsMServerGeneralTab *tab=(XFE_PrefsMServerGeneralTab*)clientData;
if (!tab) return;
tab->ChangedType(MSG_Imap4);
}
void
XFE_PrefsMServerGeneralTab::optionPop_cb(Widget /* w */,
XtPointer clientData,
XtPointer /* callData */)
{
XFE_PrefsMServerGeneralTab *tab=(XFE_PrefsMServerGeneralTab*)clientData;
if (!tab) return;
tab->ChangedType(MSG_Pop3);
}
void
XFE_PrefsMServerGeneralTab::optionMovemail_cb(Widget /* w */,
XtPointer clientData,
XtPointer /* callData*/)
{
XFE_PrefsMServerGeneralTab *tab=(XFE_PrefsMServerGeneralTab*)clientData;
if (!tab) return;
tab->ChangedType(MSG_MoveMail);
}
void
XFE_PrefsMServerGeneralTab::ChangedType(MSG_SERVER_TYPE type)
{
m_server_type=type;
if (m_changed_callback) m_changed_callback(m_changed_closure, type);
lockWidgets();
}
void
XFE_PrefsMServerGeneralTab::setChangedCallback(serverTypeCallback cb,
void* closure)
{
m_changed_callback=cb;
m_changed_closure=closure;
}
void
XFE_PrefsMServerGeneralTab::apply()
{
// pull actual values out of the widgets
char *server_name = getServerName();
char *user_name = getUserName();
XP_Bool remember_password = getRememberPassword();
XP_Bool check_mail = getCheckMail();
XP_Bool download = getDownload();
int32 check_time = getWaitTime();
MSG_Master *master = fe_getMNMaster();
switch (m_server_type) {
case MSG_Imap4:
if (m_original_type==MSG_Imap4) {
// create if necessary
// use dumb defaults & let pref panes handle it correctly
if (m_is_new)
MSG_CreateIMAPHost(master, server_name, FALSE, user_name,
check_mail, check_time, remember_password,
TRUE, TRUE, "", "","");
} else { // originally POP or movemail
// implicitly create by setting POP server and switching type
PREF_SetCharPref(POP_SERVER, server_name);
PREF_SetIntPref(MAIL_SERVER_TYPE, (int32)MSG_Imap4);
}
IMAP_SetCharPref(server_name, USERNAME, user_name);
IMAP_SetBoolPref(server_name, REMEMBER_PASSWORD, remember_password);
IMAP_SetBoolPref(server_name, CHECK_NEW_MAIL, check_mail);
IMAP_SetIntPref(server_name, CHECK_TIME, check_time);
PREF_SetBoolPref(IMAP_DOWNLOAD, download);
break;
case MSG_Pop3:
PREF_SetIntPref(MAIL_SERVER_TYPE, (int32)MSG_Pop3);
PREF_SetCharPref(POP_SERVER, server_name);
PREF_SetCharPref(POP_NAME, user_name);
PREF_SetBoolPref(POP_REMEMBER_PASSWORD, remember_password);
PREF_SetBoolPref(POP_CHECK_NEW_MAIL, check_mail);
PREF_SetIntPref(POP_CHECK_TIME, check_time);
PREF_SetBoolPref(POP_DOWNLOAD, download);
break;
case MSG_MoveMail:
PREF_SetIntPref(MAIL_SERVER_TYPE, (int32)MSG_MoveMail);
PREF_SetBoolPref(POP_CHECK_NEW_MAIL, check_mail);
PREF_SetIntPref(POP_CHECK_TIME, check_time);
PREF_SetBoolPref(POP_DOWNLOAD, download);
break;
case MSG_Inbox:
XP_ASSERT(0);
}
// Free all the strings
XtFree(server_name);
XtFree(user_name);
}
// Create the body of the Imap Tab
XFE_PrefsMServerIMAPTab::XFE_PrefsMServerIMAPTab(
XFE_Component *top,
XFE_View *view)
: XFE_XmLTabView(top, view, XFE_IMAP_TAB),
m_delete_trash_toggle(0),
m_delete_mark_toggle(0),
m_delete_remove_toggle(0) HG62519
{
#if 0
m_use_sub=0;
#endif
create();
}
void
XFE_PrefsMServerIMAPTab::create() {
Widget kids[10];
int i = 0;
Widget form;
Widget delete_radiobox;
Widget delete_label;
Widget sep1;
form = getBaseWidget();
HG19271
kids[i++] = delete_label =
XmCreateLabelGadget(form, "deleteLabel", NULL, 0);
kids[i++] = delete_radiobox =
XmCreateRadioBox(form, "deleteRadioBox", NULL, 0);
m_delete_trash_toggle =
XmCreateToggleButtonGadget(delete_radiobox, "trashToggle", NULL, 0);
m_delete_mark_toggle =
XmCreateToggleButtonGadget(delete_radiobox, "markToggle", NULL, 0);
m_delete_remove_toggle =
XmCreateToggleButtonGadget(delete_radiobox, "removeToggle", NULL, 0);
kids[i++] = m_expunge_toggle =
XmCreateToggleButtonGadget(form, "expungeExitToggle", NULL, 0);
kids[i++] = m_trash_toggle =
XmCreateToggleButtonGadget(form, "trashExitToggle", NULL, 0);
#if 0
kids[i++] = m_use_sub =
XmCreateToggleButtonGadget(form, "UseSub", NULL, 0);
#endif
HG10977
XtVaSetValues(delete_label,
XmNtopAttachment, XmATTACH_WIDGET,
HG18162
XmNleftAttachment, XmATTACH_FORM,
NULL);
XtVaSetValues(delete_radiobox,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, delete_label,
XmNleftAttachment, XmATTACH_FORM,
NULL);
XtVaSetValues(m_expunge_toggle,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, delete_radiobox,
XmNleftWidget, XmATTACH_FORM,
NULL);
XtVaSetValues(m_trash_toggle,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, m_expunge_toggle,
XmNleftWidget, XmATTACH_FORM,
NULL);
#if 0
XtVaSetValues(m_use_sub,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, m_trash_toggle,
XmNleftAttachment, XmATTACH_FORM,
NULL);
#endif
// Manage the kids
XtManageChild(m_delete_trash_toggle);
XtManageChild(m_delete_mark_toggle);
XtManageChild(m_delete_remove_toggle);
XtManageChildren(kids, i);
// set an initial default (this should be done in init(),
// but I'm not sure how)
XmToggleButtonGadgetSetState(m_delete_trash_toggle, True, True);
}
void
XFE_PrefsMServerIMAPTab::init(char *server_name) {
if (!server_name) return;
XP_Bool HG19711 use_sub;
XP_Bool expunge_quit, trash_quit;
int32 intval;
IMAP_GetIntPref(server_name, DELETE_MODEL, &intval);
HG19189
IMAP_GetBoolPref(server_name, USE_SUB, &use_sub);
IMAP_GetBoolPref(server_name, EXPUNGE_QUIT, &expunge_quit);
IMAP_GetBoolPref(server_name, TRASH_QUIT, &trash_quit);
MSG_IMAPDeleteModel delete_model=(MSG_IMAPDeleteModel)intval;
switch (delete_model) {
case MSG_IMAPDeleteIsIMAPDelete:
XmToggleButtonGadgetSetState(m_delete_mark_toggle, True, True);
break;
case MSG_IMAPDeleteIsMoveToTrash:
XmToggleButtonGadgetSetState(m_delete_trash_toggle, True, True);
break;
case MSG_IMAPDeleteIsDeleteNoTrash:
XmToggleButtonGadgetSetState(m_delete_remove_toggle, True, True);
break;
}
HG71676
XmToggleButtonGadgetSetState(m_expunge_toggle, expunge_quit, TRUE);
XmToggleButtonGadgetSetState(m_trash_toggle, trash_quit, TRUE);
#if 0
XmToggleButtonGadgetSetState(m_use_sub, use_sub,TRUE);
#endif
}
void
XFE_PrefsMServerIMAPTab::apply(char *server_name)
{
XP_ASSERT(server_name);
if (!server_name) return;
int32 intval=(int32)MSG_IMAPDeleteIsMoveToTrash;
if (XmToggleButtonGadgetGetState(m_delete_mark_toggle))
intval=(int32)MSG_IMAPDeleteIsIMAPDelete;
else if (XmToggleButtonGadgetGetState(m_delete_trash_toggle))
intval=(int32)MSG_IMAPDeleteIsMoveToTrash;
else if (XmToggleButtonGadgetGetState(m_delete_remove_toggle))
intval=(int32)MSG_IMAPDeleteIsDeleteNoTrash;
IMAP_SetIntPref(server_name, DELETE_MODEL, intval);
HG71851
IMAP_SetBoolPref(server_name, EXPUNGE_QUIT, getExpungeQuit());
IMAP_SetBoolPref(server_name, TRASH_QUIT, getTrashQuit());
#if 0
IMAP_SetBoolPref(server_name, USE_SUB, getUseSub());
#endif
}
// Create the body of the Advanced Tab
XFE_PrefsMServerAdvancedTab::XFE_PrefsMServerAdvancedTab(
XFE_Component *top,
XFE_View *view)
: XFE_XmLTabView(top, view, XFE_ADVANCED_TAB),
m_path_prefs_label(0),
m_personal_dir_label(0),
m_personal_dir_text(0),
m_public_dir_label(0),
m_public_dir_text(0),
m_other_label(0),
m_other_text(0),
m_allow_server(0)
{
create();
}
void XFE_PrefsMServerAdvancedTab::create() {
Widget kids[10];
Arg av[10];
int ac = 0, i = 0;
Widget form;
form = getBaseWidget();
kids[i++] = m_path_prefs_label =
XmCreateLabelGadget(form, "PathPrefsLabel", av, ac);
kids[i++] = m_personal_dir_label =
XmCreateLabelGadget(form, "PersonalDir", av, ac);
kids[i++] = m_personal_dir_text =
fe_CreateTextField(form, "PersonalDirText", av, ac);
kids[i++] = m_public_dir_label =
XmCreateLabelGadget(form, "PublicDir", av, ac);
kids[i++] = m_public_dir_text =
fe_CreateTextField(form, "PublicDirText", av, ac);
kids[i++] = m_other_label =
XmCreateLabelGadget(form, "OtherUsers", av, ac);
kids[i++] = m_other_text =
fe_CreateTextField(form, "OtherUsersText", av, ac);
kids[i++] = m_allow_server =
XmCreateToggleButtonGadget(form, "AllowServer", av, ac);
// Specify the geometry constraints
XtVaSetValues(m_path_prefs_label,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNleftAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_FORM,
NULL);
XtVaSetValues(m_personal_dir_label,
XmNalignment, XmALIGNMENT_END,
XmNleftAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNtopWidget, m_personal_dir_text,
XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNbottomWidget, m_personal_dir_text,
NULL);
XtVaSetValues(m_personal_dir_text,
XmNrightAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, m_path_prefs_label,
NULL);
XtVaSetValues(m_public_dir_label,
XmNalignment, XmALIGNMENT_END,
XmNleftAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNtopWidget, m_public_dir_text,
XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNbottomWidget, m_public_dir_text,
NULL);
XtVaSetValues(m_public_dir_text,
XmNrightAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, m_personal_dir_text,
NULL);
XtVaSetValues(m_other_label,
XmNalignment, XmALIGNMENT_END,
XmNleftAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNtopWidget, m_other_text,
XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNbottomWidget, m_other_text,
NULL);
XtVaSetValues(m_other_text,
XmNrightAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, m_public_dir_text,
NULL);
XtVaSetValues(m_allow_server,
XmNleftAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, m_other_label,
NULL);
// Manage the kids
XtManageChildren(kids, i);
}
void
XFE_PrefsMServerAdvancedTab::init(char *server_name) {
if (!server_name) return;
char *personal_dir=NULL,
*public_dir=NULL,
*other_dir=NULL;
XP_Bool override=FALSE;
if (IMAP_CopyCharPref(server_name, NS_PERSONAL, &personal_dir)==PREF_OK) {
fe_SetTextField(m_personal_dir_text, personal_dir);
XP_FREE(personal_dir);
}
if (IMAP_CopyCharPref(server_name, NS_PUBLIC, &public_dir)==PREF_OK) {
fe_SetTextField(m_public_dir_text, public_dir);
XP_FREE(public_dir);
}
if (IMAP_CopyCharPref(server_name, NS_OTHER, &other_dir)==PREF_OK) {
fe_SetTextField(m_other_text, other_dir);
XP_FREE(other_dir);
}
IMAP_GetBoolPref (server_name, OVERRIDE_NAMESPACES, &override);
XmToggleButtonGadgetSetState(m_allow_server, override,TRUE);
}
void
XFE_PrefsMServerAdvancedTab::apply(char *server_name)
{
XP_ASSERT(server_name);
if (!server_name) return;
char *personal_dir = getImapPersonalDir();
char *public_dir = getImapPublicDir();
char *others_dir = getImapOthersDir();
XP_Bool override = getOverrideNamespaces();
IMAP_SetCharPref(server_name, NS_PERSONAL, personal_dir);
IMAP_SetCharPref(server_name, NS_PUBLIC, public_dir);
IMAP_SetCharPref(server_name, NS_OTHER, others_dir);
IMAP_SetBoolPref(server_name, OVERRIDE_NAMESPACES, override);
XtFree(personal_dir);
XtFree(public_dir);
XtFree(others_dir);
}
// Create the body of the POP Tab
XFE_PrefsMServerPOPTab::XFE_PrefsMServerPOPTab(XFE_Component *top,
XFE_View *view)
: XFE_XmLTabView(top, view, XFE_POP_TAB),
m_leave_messages(0)
{
create();
}
void
XFE_PrefsMServerPOPTab::create() {
Widget kids[10];
Arg av[10];
int ac = 0, i = 0;
Widget form;
form = getBaseWidget();
kids[i++] = m_leave_messages =
XmCreateToggleButtonGadget(form, "LeaveMessages", av, ac);
XtVaSetValues(m_leave_messages,
XmNleftAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_FORM,
NULL);
// Manage the kids
XtManageChildren(kids, i);
}
void
XFE_PrefsMServerPOPTab::init() {
XP_Bool leave_messages;
PREF_GetBoolPref(POP_LEAVE_ON_SERVER, &leave_messages);
XmToggleButtonGadgetSetState(m_leave_messages, leave_messages,TRUE);
}
void
XFE_PrefsMServerPOPTab::apply()
{
PREF_SetBoolPref(POP_LEAVE_ON_SERVER, getLeaveMessages());
}
XFE_PrefsMServerMovemailTab::XFE_PrefsMServerMovemailTab(XFE_Component *top,
XFE_View *view)
: XFE_XmLTabView(top, view, XFE_MOVEMAIL_TAB)
{
create();
}
void
XFE_PrefsMServerMovemailTab::create()
{
Widget kids[5];
int i;
Widget spacer;
Widget toggle_radiobox;
Widget form = getBaseWidget();
Dimension lmargin, spacing;
i=0;
kids[i++] = toggle_radiobox =
XmCreateRadioBox(form, "movemailRadio", NULL,0);
m_builtin_toggle =
XmCreateToggleButtonGadget(toggle_radiobox,"builtinToggle", NULL,0);
m_external_toggle =
XmCreateToggleButtonGadget(toggle_radiobox,"externalToggle",NULL,0);
// spacer so text box lines up with label in bottom radio button
kids[i++] = spacer =
XmCreateLabelGadget(form, "", NULL, 0);
kids[i++] = m_program_text =
fe_CreateTextField(form, "externalApp", NULL, 0);
kids[i++] = m_choose_button =
XmCreatePushButtonGadget(form, "appChoose", NULL, 0);
XtVaGetValues(m_external_toggle,
XmNmarginLeft, &lmargin,
XmNspacing, &spacing,
NULL);
XtVaSetValues(toggle_radiobox,
XmNtopAttachment, XmATTACH_FORM,
XmNleftAttachment, XmATTACH_FORM,
NULL);
XtVaSetValues(spacer,
XmNwidth, lmargin+spacing,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, toggle_radiobox,
XmNleftAttachment, XmATTACH_FORM,
NULL);
XtVaSetValues(m_program_text,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, toggle_radiobox,
XmNleftAttachment, XmATTACH_WIDGET,
XmNleftWidget, spacer,
NULL);
XtVaSetValues(m_choose_button,
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
XmNtopWidget, m_program_text,
XmNleftAttachment, XmATTACH_WIDGET,
XmNleftWidget, m_program_text,
NULL);
XtManageChild(m_builtin_toggle);
XtManageChild(m_external_toggle);
XtManageChildren(kids, i);
XtAddCallback(m_builtin_toggle, XmNvalueChangedCallback,
toggleBuiltin_cb, this);
XtAddCallback(m_choose_button, XmNactivateCallback,
chooseMovemail_cb, this);
}
void
XFE_PrefsMServerMovemailTab::init()
{
XP_Bool boolval;
XP_Bool locked;
char *charval;
locked=PREF_PrefIsLocked("mail.use_builtin_movemail");
XtSetSensitive(m_builtin_toggle, !locked);
XtSetSensitive(m_external_toggle,!locked);
PREF_GetBoolPref("mail.use_builtin_movemail", &boolval);
XmToggleButtonGadgetSetState(m_builtin_toggle, boolval, True);
XmToggleButtonGadgetSetState(m_external_toggle, !boolval, True);
locked=PREF_PrefIsLocked("mail.movemail_program");
XtSetSensitive(m_program_text, !locked);
PREF_CopyCharPref("mail.movemail_program", &charval);
fe_SetTextField(m_program_text, charval);
XP_FREE(charval);
}
void
XFE_PrefsMServerMovemailTab::apply()
{
XP_Bool boolval = (XP_Bool)XmToggleButtonGetState(m_builtin_toggle);
PREF_SetBoolPref("mail.use_builtin_movemail", boolval);
char *str=fe_GetTextField(m_program_text);
PREF_SetCharPref("mail.movemail_program", str);
if (str) XtFree(str);
}
void
XFE_PrefsMServerMovemailTab::toggleBuiltin_cb(Widget,
XtPointer closure,
XtPointer callData)
{
XFE_PrefsMServerMovemailTab *tab=(XFE_PrefsMServerMovemailTab *)closure;
tab->toggleBuiltin((XmToggleButtonCallbackStruct *)callData);
}
void
XFE_PrefsMServerMovemailTab::chooseMovemail_cb(Widget,
XtPointer closure,
XtPointer)
{
XFE_PrefsMServerMovemailTab *tab=(XFE_PrefsMServerMovemailTab *)closure;
tab->chooseMovemail();
}
void
XFE_PrefsMServerMovemailTab::toggleBuiltin(XmToggleButtonCallbackStruct *cbs)
{
XtSetSensitive(m_program_text, !cbs->set);
XtSetSensitive(m_choose_button, !cbs->set);
}
void
XFE_PrefsMServerMovemailTab::chooseMovemail()
{
}