528 lines
14 KiB
C++
528 lines
14 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.0 (the "NPL"); you may not use this file except in
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
* http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
* for the specific language governing rights and limitations under the
|
|
* NPL.
|
|
*
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
* Reserved.
|
|
*/
|
|
/*
|
|
PrefsLdapProp.cpp -- The LDAP server properties dialog
|
|
Created: Linda Wei <lwei@netscape.com>, 7-Feb-97.
|
|
*/
|
|
|
|
|
|
|
|
#include "felocale.h"
|
|
#include "structs.h"
|
|
#include "fonts.h"
|
|
#include "xpassert.h"
|
|
#include "xfe.h"
|
|
#include "PrefsDialog.h"
|
|
#include "PrefsLdapProp.h"
|
|
|
|
#include <Xm/Label.h>
|
|
#include <Xm/LabelG.h>
|
|
#include <Xm/PushB.h>
|
|
#include <Xm/PushBG.h>
|
|
#include <Xm/ToggleB.h>
|
|
#include <Xm/Form.h>
|
|
#include <Xm/Frame.h>
|
|
#include <Xm/TextF.h>
|
|
#include <Xm/ToggleBG.h>
|
|
#include <Xfe/Xfe.h>
|
|
|
|
extern "C"
|
|
{
|
|
char *XP_GetString(int i);
|
|
}
|
|
|
|
// ==================== Public Member Functions ====================
|
|
|
|
// Member: XFE_PrefsLdapPropDialog
|
|
// Description: Constructor
|
|
// Inputs:
|
|
// Side effects: Creates the LDAP Server Properties dialog
|
|
|
|
XFE_PrefsLdapPropDialog::XFE_PrefsLdapPropDialog(XFE_PrefsDialog *prefsDialog,
|
|
XFE_PrefsPageMailNewsAddrBook *addrBookPage,
|
|
Widget parent, // dialog parent
|
|
char *name, // dialog name
|
|
Boolean modal) // modal dialog?
|
|
: XFE_Dialog(parent,
|
|
name,
|
|
TRUE, // ok
|
|
TRUE, // cancel
|
|
FALSE, // help
|
|
FALSE, // apply
|
|
FALSE, // separator
|
|
modal // modal
|
|
),
|
|
m_prefsDialog(prefsDialog),
|
|
m_addrBookPage(addrBookPage),
|
|
m_prefsDataLdapProp(0)
|
|
{
|
|
PrefsDataLdapProp *fep = NULL;
|
|
|
|
fep = new PrefsDataLdapProp;
|
|
memset(fep, 0, sizeof(PrefsDataLdapProp));
|
|
m_prefsDataLdapProp = fep;
|
|
|
|
Widget kids[100];
|
|
Arg av[50];
|
|
int ac;
|
|
int i;
|
|
|
|
Widget form;
|
|
form = XtVaCreateWidget("form", xmFormWidgetClass, m_chrome,
|
|
XmNmarginWidth, 8,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
NULL);
|
|
XtManageChild (form);
|
|
|
|
Widget desc_label;
|
|
Widget server_label;
|
|
Widget root_label;
|
|
Widget port_number_label;
|
|
Widget number_of_hit_label;
|
|
Widget desc_text;
|
|
Widget server_text;
|
|
Widget root_text;
|
|
Widget port_number_text;
|
|
Widget number_of_hit_text;
|
|
Widget secure_toggle;
|
|
#if 0
|
|
Widget save_passwd_toggle;
|
|
#endif
|
|
|
|
ac = 0;
|
|
i = 0;
|
|
|
|
kids[i++] = desc_label =
|
|
XmCreateLabelGadget(form, "descLabel", av, ac);
|
|
|
|
kids[i++] = server_label =
|
|
XmCreateLabelGadget(form, "serverLabel", av, ac);
|
|
|
|
kids[i++] = root_label =
|
|
XmCreateLabelGadget(form, "rootLabel", av, ac);
|
|
|
|
kids[i++] = port_number_label =
|
|
XmCreateLabelGadget(form, "portNumberLabel", av, ac);
|
|
|
|
kids[i++] = number_of_hit_label =
|
|
XmCreateLabelGadget(form, "numHitLabel", av, ac);
|
|
|
|
kids[i++] = desc_text =
|
|
fe_CreateTextField(form, "descText", av, ac);
|
|
|
|
kids[i++] = server_text =
|
|
fe_CreateTextField(form, "serverText", av, ac);
|
|
|
|
kids[i++] = root_text =
|
|
fe_CreateTextField(form, "rootText", av, ac);
|
|
|
|
kids[i++] = port_number_text =
|
|
fe_CreateTextField(form, "portNumberText", av, ac);
|
|
|
|
kids[i++] = number_of_hit_text =
|
|
fe_CreateTextField(form, "numberOfHitText", av, ac);
|
|
|
|
kids[i++] = secure_toggle =
|
|
XmCreateToggleButtonGadget(form, "secure", av, ac);
|
|
|
|
#if 0
|
|
kids[i++] = save_passwd_toggle =
|
|
XmCreateToggleButtonGadget(form, "savePasswd", av, ac);
|
|
#endif
|
|
|
|
fep->desc_text = desc_text;
|
|
fep->server_text = server_text;
|
|
fep->root_text = root_text;
|
|
fep->port_number_text = port_number_text;
|
|
fep->number_of_hit_text = number_of_hit_text;
|
|
fep->secure_toggle = secure_toggle;
|
|
#if 0
|
|
fep->save_passwd_toggle = save_passwd_toggle;
|
|
#endif
|
|
|
|
int labels_width;
|
|
labels_width = XfeVaGetWidestWidget(desc_label,
|
|
server_label,
|
|
root_label,
|
|
port_number_label,
|
|
number_of_hit_label,
|
|
NULL);
|
|
|
|
int labels_height;
|
|
labels_height = XfeVaGetTallestWidget(desc_label,
|
|
desc_text,
|
|
secure_toggle,
|
|
NULL);
|
|
|
|
XtVaSetValues(desc_label,
|
|
XmNheight, labels_height,
|
|
RIGHT_JUSTIFY_VA_ARGS(desc_label,labels_width),
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_NONE,
|
|
NULL);
|
|
|
|
XtVaSetValues(desc_text,
|
|
XmNcolumns, 35,
|
|
XmNheight, labels_height,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
XmNleftOffset, labels_width,
|
|
XmNrightAttachment, XmATTACH_NONE,
|
|
XmNbottomAttachment, XmATTACH_NONE,
|
|
NULL);
|
|
|
|
XtVaSetValues(server_label,
|
|
XmNheight, labels_height,
|
|
RIGHT_JUSTIFY_VA_ARGS(server_label,labels_width),
|
|
XmNtopAttachment, XmATTACH_WIDGET,
|
|
XmNtopWidget, desc_label,
|
|
XmNbottomAttachment, XmATTACH_NONE,
|
|
NULL);
|
|
|
|
XtVaSetValues(server_text,
|
|
XmNcolumns, 35,
|
|
XmNheight, labels_height,
|
|
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
|
|
XmNtopWidget, server_label,
|
|
XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
|
|
XmNleftWidget, desc_text,
|
|
XmNrightAttachment, XmATTACH_NONE,
|
|
XmNbottomAttachment, XmATTACH_NONE,
|
|
NULL);
|
|
|
|
XtVaSetValues(root_label,
|
|
XmNheight, labels_height,
|
|
RIGHT_JUSTIFY_VA_ARGS(root_label,labels_width),
|
|
XmNtopAttachment, XmATTACH_WIDGET,
|
|
XmNtopWidget, server_label,
|
|
XmNbottomAttachment, XmATTACH_NONE,
|
|
NULL);
|
|
|
|
XtVaSetValues(root_text,
|
|
XmNcolumns, 35,
|
|
XmNheight, labels_height,
|
|
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
|
|
XmNtopWidget, root_label,
|
|
XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
|
|
XmNleftWidget, desc_text,
|
|
XmNrightAttachment, XmATTACH_NONE,
|
|
XmNbottomAttachment, XmATTACH_NONE,
|
|
NULL);
|
|
|
|
XtVaSetValues(port_number_label,
|
|
XmNheight, labels_height,
|
|
RIGHT_JUSTIFY_VA_ARGS(port_number_label,labels_width),
|
|
XmNtopAttachment, XmATTACH_WIDGET,
|
|
XmNtopWidget, root_label,
|
|
XmNbottomAttachment, XmATTACH_NONE,
|
|
NULL);
|
|
|
|
XtVaSetValues(port_number_text,
|
|
XmNcolumns, 6,
|
|
XmNheight, labels_height,
|
|
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
|
|
XmNtopWidget, port_number_label,
|
|
XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
|
|
XmNleftWidget, desc_text,
|
|
XmNrightAttachment, XmATTACH_NONE,
|
|
XmNbottomAttachment, XmATTACH_NONE,
|
|
NULL);
|
|
|
|
XtVaSetValues(number_of_hit_label,
|
|
XmNheight, labels_height,
|
|
RIGHT_JUSTIFY_VA_ARGS(number_of_hit_label,labels_width),
|
|
XmNtopAttachment, XmATTACH_WIDGET,
|
|
XmNtopWidget, port_number_label,
|
|
XmNbottomAttachment, XmATTACH_NONE,
|
|
NULL);
|
|
|
|
XtVaSetValues(number_of_hit_text,
|
|
XmNcolumns, 6,
|
|
XmNheight, labels_height,
|
|
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
|
|
XmNtopWidget, number_of_hit_label,
|
|
XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
|
|
XmNleftWidget, desc_text,
|
|
XmNrightAttachment, XmATTACH_NONE,
|
|
XmNbottomAttachment, XmATTACH_NONE,
|
|
NULL);
|
|
|
|
XtVaSetValues(secure_toggle,
|
|
XmNindicatorType, XmONE_OF_MANY,
|
|
XmNheight, labels_height,
|
|
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
|
|
XmNtopWidget, port_number_text,
|
|
XmNleftAttachment, XmATTACH_WIDGET,
|
|
XmNleftWidget, port_number_text,
|
|
XmNrightAttachment, XmATTACH_NONE,
|
|
XmNbottomAttachment, XmATTACH_NONE,
|
|
NULL);
|
|
|
|
#if 0
|
|
XtVaSetValues(save_passwd_toggle,
|
|
XmNindicatorType, XmONE_OF_MANY,
|
|
XmNheight, labels_height,
|
|
XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
|
|
XmNtopWidget, number_of_hit_text,
|
|
XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET,
|
|
XmNleftWidget, secure_toggle,
|
|
XmNrightAttachment, XmATTACH_NONE,
|
|
XmNbottomAttachment, XmATTACH_NONE,
|
|
NULL);
|
|
#endif
|
|
|
|
// Add callbacks
|
|
|
|
XtAddCallback(m_chrome, XmNokCallback, cb_ok, this);
|
|
XtAddCallback(m_chrome, XmNcancelCallback, cb_cancel, this);
|
|
|
|
XtManageChildren(kids, i);
|
|
XtManageChild(form);
|
|
}
|
|
|
|
// Member: ~XFE_PrefsLdapPropDialog
|
|
// Description: Destructor
|
|
// Inputs:
|
|
// Side effects:
|
|
|
|
XFE_PrefsLdapPropDialog::~XFE_PrefsLdapPropDialog()
|
|
{
|
|
delete m_prefsDataLdapProp;
|
|
}
|
|
|
|
// Member: show
|
|
// Description: Pop up dialog
|
|
// Inputs:
|
|
// Side effects:
|
|
|
|
void XFE_PrefsLdapPropDialog::show()
|
|
{
|
|
// Manage the top level
|
|
|
|
XFE_Dialog::show();
|
|
|
|
// Set focus to the OK button
|
|
|
|
XmProcessTraversal(m_okButton, XmTRAVERSE_CURRENT);
|
|
}
|
|
|
|
// Member: initPage
|
|
// Description: Initializes page for MailNewsLang
|
|
// Inputs:
|
|
// Side effects:
|
|
|
|
void XFE_PrefsLdapPropDialog::initPage(DIR_Server *server)
|
|
{
|
|
XP_ASSERT(m_prefsDataLdapProp);
|
|
PrefsDataLdapProp *fep = m_prefsDataLdapProp;
|
|
char buf[256];
|
|
|
|
m_server = server;
|
|
if (server) {
|
|
fe_SetTextField(fep->desc_text, server->description);
|
|
fe_SetTextField(fep->server_text, server->serverName);
|
|
fe_SetTextField(fep->root_text, server->searchBase);
|
|
PR_snprintf(buf, sizeof(buf), "%d", server->port);
|
|
XtVaSetValues(fep->port_number_text, XmNvalue, buf, 0);
|
|
PR_snprintf(buf, sizeof(buf), "%d", server->maxHits);
|
|
XtVaSetValues(fep->number_of_hit_text, XmNvalue, buf, 0);
|
|
XtVaSetValues(fep->secure_toggle, XmNset, server->isSecure, 0);
|
|
#if 0
|
|
XtVaSetValues(fep->save_passwd_toggle, XmNset, server->savePassword, 0);
|
|
#endif
|
|
}
|
|
}
|
|
|
|
// Member: verifyPage
|
|
// Description: verify page for MailNewsLang
|
|
// Inputs:
|
|
// Side effects:
|
|
|
|
Boolean XFE_PrefsLdapPropDialog::verifyPage()
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
// Member: getContext
|
|
// Description: returns context
|
|
// Inputs:
|
|
// Side effects:
|
|
|
|
MWContext *XFE_PrefsLdapPropDialog::getContext()
|
|
{
|
|
return (m_prefsDialog->getContext());
|
|
}
|
|
|
|
// Member: getData
|
|
// Description: returns data
|
|
// Inputs:
|
|
// Side effects:
|
|
|
|
PrefsDataLdapProp *XFE_PrefsLdapPropDialog::getData()
|
|
{
|
|
return (m_prefsDataLdapProp);
|
|
}
|
|
|
|
// Member: getEditDir
|
|
// Description: returns the directory being edited
|
|
// Inputs:
|
|
// Side effects:
|
|
|
|
DIR_Server *XFE_PrefsLdapPropDialog::getEditDir()
|
|
{
|
|
return m_server;
|
|
}
|
|
|
|
// Member: getAddrBookPage
|
|
// Description: returns the Address Book prefs page
|
|
// Inputs:
|
|
// Side effects:
|
|
|
|
XFE_PrefsPageMailNewsAddrBook *XFE_PrefsLdapPropDialog::getAddrBookPage()
|
|
{
|
|
return m_addrBookPage;
|
|
}
|
|
|
|
// Member: getPrefsDialog
|
|
// Description: returns preferences dialog
|
|
// Inputs:
|
|
// Side effects:
|
|
|
|
XFE_PrefsDialog *XFE_PrefsLdapPropDialog::getPrefsDialog()
|
|
{
|
|
return (m_prefsDialog);
|
|
}
|
|
|
|
// Friend: prefsLangCb_ok
|
|
// Description:
|
|
// Inputs:
|
|
// Side effects:
|
|
|
|
void XFE_PrefsLdapPropDialog::cb_ok(Widget w,
|
|
XtPointer closure,
|
|
XtPointer callData)
|
|
{
|
|
XFE_PrefsLdapPropDialog *theDialog = (XFE_PrefsLdapPropDialog *)closure;
|
|
PrefsDataLdapProp *fep = theDialog->getData();
|
|
Bool create = theDialog->getEditDir() ? False : True;
|
|
DIR_Server *dir = 0;
|
|
|
|
if (create) {
|
|
dir = (DIR_Server *)XP_ALLOC(sizeof(DIR_Server));
|
|
DIR_InitServer(dir);
|
|
}
|
|
else {
|
|
dir = theDialog->getEditDir();
|
|
XP_FREEIF(dir->description);
|
|
XP_FREEIF(dir->serverName);
|
|
XP_FREEIF(dir->searchBase);
|
|
DIR_InitServer(dir);
|
|
}
|
|
|
|
char *desc = 0;
|
|
char *server = 0;
|
|
char *root = 0;
|
|
char *port_num_text = 0;
|
|
char *num_hits_text = 0;
|
|
char dummy;
|
|
int port_num = 0;
|
|
int num_hits = 0;
|
|
Boolean b;
|
|
char temp[1024];
|
|
char *ptr;
|
|
|
|
// TODO: error checking
|
|
|
|
desc = fe_GetTextField(fep->desc_text);
|
|
server = fe_GetTextField(fep->server_text);
|
|
root = fe_GetTextField(fep->root_text);
|
|
XtVaGetValues(fep->port_number_text, XmNvalue, &port_num_text, 0);
|
|
XtVaGetValues(fep->number_of_hit_text, XmNvalue, &num_hits_text, 0);
|
|
|
|
if (1 != sscanf(port_num_text, " %d %c", &port_num, &dummy) ||
|
|
port_num < 0) {
|
|
// TODO: error
|
|
}
|
|
if (port_num_text) XtFree(port_num_text);
|
|
|
|
if (1 == sscanf(num_hits_text, " %d %c", &num_hits, &dummy) &&
|
|
num_hits < 0) {
|
|
// TODO: error
|
|
}
|
|
if (num_hits_text) XtFree(num_hits_text);
|
|
|
|
if (ptr = XP_STRCHR(server, '.')) {
|
|
XP_STRCPY(temp, ptr+1);
|
|
if (ptr = XP_STRCHR(temp, '.')) {
|
|
*ptr = '\0';
|
|
}
|
|
}
|
|
else {
|
|
XP_STRCPY(temp, server);
|
|
}
|
|
|
|
dir->description = desc ? desc : XP_STRDUP("");
|
|
dir->serverName = server ? server : XP_STRDUP("");
|
|
dir->searchBase = root ? root : XP_STRDUP("");
|
|
// dir->htmlGateway = NULL; // no loner use
|
|
dir->fileName = WH_FileName(WH_TempName(xpAddrBook, temp), xpAddrBook);
|
|
dir->port = port_num;
|
|
dir->maxHits = num_hits;
|
|
XtVaGetValues(fep->secure_toggle, XmNset, &b, 0);
|
|
dir->isSecure = b;
|
|
#if 0
|
|
XtVaGetValues(fep->save_passwd_toggle, XmNset, &b, 0);
|
|
dir->savePassword = b;
|
|
#endif
|
|
dir->dirType = LDAPDirectory;
|
|
|
|
// Insert into list if this is create
|
|
|
|
if (create) {
|
|
XFE_PrefsPageMailNewsAddrBook *dir_page = theDialog->getAddrBookPage();
|
|
dir_page->insertDir(dir);
|
|
}
|
|
|
|
// Simulate a cancel
|
|
|
|
theDialog->cb_cancel(w, closure, callData);
|
|
}
|
|
|
|
// Member: prefsLangCb_cancel
|
|
// Description:
|
|
// Inputs:
|
|
// Side effects:
|
|
|
|
void XFE_PrefsLdapPropDialog::cb_cancel(Widget /* w */,
|
|
XtPointer closure,
|
|
XtPointer /* callData */)
|
|
{
|
|
XFE_PrefsLdapPropDialog *theDialog = (XFE_PrefsLdapPropDialog *)closure;
|
|
|
|
XtRemoveCallback(theDialog->m_chrome, XmNokCallback, cb_ok, theDialog);
|
|
XtRemoveCallback(theDialog->m_chrome, XmNcancelCallback, cb_cancel, theDialog);
|
|
|
|
// Delete the dialog
|
|
|
|
delete theDialog;
|
|
}
|
|
|