Mozilla/mozilla/cmd/xfe/src/PrefsPageLIServer.cpp
spider d56dcfe52f NORMANDY_DDAY merge...
git-svn-id: svn://10.0.0.236/trunk@4478 18797224-902f-48f8-a5cc-f745e15eee43
1998-06-25 05:50:45 +00:00

301 lines
9.6 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 "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.
*/
/*
PrefsPageLIServer.cpp -- LI server preferences.
Created: Daniel Malmer <malmer@netscape.com>, 21-Apr-98.
*/
#include "felocale.h"
#include "prefapi.h"
#include "PrefsPageLIServer.h"
#include "Xfe/Geometry.h"
#include <Xm/Label.h>
XFE_PrefsPageLIServer::XFE_PrefsPageLIServer(XFE_PrefsDialog* dialog) : XFE_PrefsPage(dialog)
{
}
XFE_PrefsPageLIServer::XFE_PrefsPageLIServer(Widget w) : XFE_PrefsPage(w)
{
}
XFE_PrefsPageLIServer::~XFE_PrefsPageLIServer()
{
}
void
XFE_PrefsPageLIServer::create()
{
int ac;
Arg av[16];
Widget frame_label;
Widget form;
Widget server_label;
Widget ldap_addr_label;
Widget ldap_base_label;
Widget http_base_label;
Dimension spacing;
Dimension indicator_size;
Dimension label_height;
Dimension label_width;
ac = 0;
XtSetArg(av[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
XtSetArg(av[ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
XtSetArg(av[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
XtSetArg(av[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
m_wPage = XmCreateFrame(m_wPageForm, "liServer", av, ac);
XtManageChild(m_wPage);
ac = 0;
XtSetArg(av[ac], XmNchildType, XmFRAME_TITLE_CHILD); ac++;
frame_label = XmCreateLabelGadget(m_wPage, "frameLabel", av, ac);
XtManageChild(frame_label);
ac = 0;
form = XmCreateForm(m_wPage, "form", av, ac);
XtManageChild(form);
ac = 0;
XtSetArg(av[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
XtSetArg(av[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
server_label = XmCreateLabelGadget(form, "serverLabel", av, ac);
XtManageChild(server_label);
ac = 0;
XtSetArg(av[ac], XmNindicatorType, XmONE_OF_MANY); ac++;
XtSetArg(av[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
XtSetArg(av[ac], XmNtopWidget, server_label); ac++;
XtSetArg(av[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
XtSetArg(av[ac], XmNtopOffset, 4); ac++;
XtSetArg(av[ac], XmNleftOffset, 16); ac++;
m_ldap_toggle = XmCreateToggleButtonGadget(form, "ldapToggle", av, ac);
XtManageChild(m_ldap_toggle);
XtVaGetValues(m_ldap_toggle, XmNindicatorSize, &indicator_size,
XmNspacing, &spacing, NULL);
ac = 0;
XtSetArg(av[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
XtSetArg(av[ac], XmNtopWidget, m_ldap_toggle); ac++;
XtSetArg(av[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
XtSetArg(av[ac], XmNleftWidget, m_ldap_toggle); ac++;
XtSetArg(av[ac], XmNleftOffset, indicator_size + spacing); ac++;
XtSetArg(av[ac], XmNalignment, XmALIGNMENT_END); ac++;
ldap_addr_label = XmCreateLabelGadget(form, "ldapAddrLabel", av, ac);
XtManageChild(ldap_addr_label);
ac = 0;
XtSetArg(av[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
XtSetArg(av[ac], XmNtopWidget, m_ldap_toggle); ac++;
XtSetArg(av[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++;
XtSetArg(av[ac], XmNleftWidget, ldap_addr_label); ac++;
m_ldap_addr_text = XmCreateTextField(form, "ldapAddrText", av, ac);
XtManageChild(m_ldap_addr_text);
ac = 0;
XtSetArg(av[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
XtSetArg(av[ac], XmNtopWidget, ldap_addr_label); ac++;
XtSetArg(av[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
XtSetArg(av[ac], XmNleftWidget, m_ldap_toggle); ac++;
XtSetArg(av[ac], XmNleftOffset, indicator_size + spacing); ac++;
XtSetArg(av[ac], XmNalignment, XmALIGNMENT_END); ac++;
ldap_base_label = XmCreateLabelGadget(form, "ldapBaseLabel", av, ac);
XtManageChild(ldap_base_label);
ac = 0;
XtSetArg(av[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
XtSetArg(av[ac], XmNtopWidget, m_ldap_addr_text); ac++;
XtSetArg(av[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++;
XtSetArg(av[ac], XmNleftWidget, ldap_base_label); ac++;
m_ldap_base_text = XmCreateTextField(form, "ldapBaseText", av, ac);
XtManageChild(m_ldap_base_text);
ac = 0;
XtSetArg(av[ac], XmNindicatorType, XmONE_OF_MANY); ac++;
XtSetArg(av[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
XtSetArg(av[ac], XmNtopWidget, ldap_base_label); ac++;
XtSetArg(av[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
XtSetArg(av[ac], XmNleftWidget, m_ldap_toggle); ac++;
XtSetArg(av[ac], XmNtopOffset, 4); ac++;
m_http_toggle = XmCreateToggleButtonGadget(form, "httpToggle", av, ac);
XtManageChild(m_http_toggle);
XtVaGetValues(m_http_toggle, XmNindicatorSize, &indicator_size,
XmNspacing, &spacing, NULL);
ac = 0;
XtSetArg(av[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
XtSetArg(av[ac], XmNtopWidget, m_http_toggle); ac++;
XtSetArg(av[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
XtSetArg(av[ac], XmNleftWidget, m_ldap_toggle); ac++;
XtSetArg(av[ac], XmNleftOffset, indicator_size + spacing); ac++;
XtSetArg(av[ac], XmNalignment, XmALIGNMENT_END); ac++;
http_base_label = XmCreateLabelGadget(form, "httpBaseLabel", av, ac);
XtManageChild(http_base_label);
ac = 0;
XtSetArg(av[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
XtSetArg(av[ac], XmNtopWidget, m_http_toggle); ac++;
XtSetArg(av[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++;
XtSetArg(av[ac], XmNleftWidget, http_base_label); ac++;
m_http_base_text = XmCreateTextField(form, "httpBaseText", av, ac);
XtManageChild(m_http_base_text);
label_height = XfeVaGetTallestWidget(ldap_addr_label, m_ldap_addr_text, NULL);
XtVaSetValues(ldap_addr_label, XmNheight, label_height, NULL);
XtVaSetValues(m_ldap_addr_text, XmNheight, label_height, NULL);
label_height = XfeVaGetTallestWidget(ldap_base_label, m_ldap_base_text, NULL);
XtVaSetValues(ldap_base_label, XmNheight, label_height, NULL);
XtVaSetValues(m_ldap_base_text, XmNheight, label_height, NULL);
label_height = XfeVaGetTallestWidget(http_base_label, m_http_base_text, NULL);
XtVaSetValues(http_base_label, XmNheight, label_height, NULL);
XtVaSetValues(m_http_base_text, XmNheight, label_height, NULL);
label_width = XfeVaGetWidestWidget(ldap_addr_label, ldap_base_label,
http_base_label, NULL);
XtVaSetValues(ldap_addr_label, XmNwidth, label_width, NULL);
XtVaSetValues(ldap_base_label, XmNwidth, label_width, NULL);
XtVaSetValues(http_base_label, XmNwidth, label_width, NULL);
XtAddCallback(m_ldap_toggle, XmNvalueChangedCallback, cb_toggle, this);
XtAddCallback(m_http_toggle, XmNvalueChangedCallback, cb_toggle, this);
setCreated(TRUE);
}
void
XFE_PrefsPageLIServer::init()
{
XP_Bool use_ldap;
char* li_protocol = NULL;
char* ldap_addr = NULL;
char* ldap_base = NULL;
char* http_base = NULL;
PREF_CopyCharPref("li.protocol", &li_protocol);
PREF_CopyCharPref("li.server.ldap.url", &ldap_addr);
PREF_CopyCharPref("li.server.ldap.userbase", &ldap_base);
PREF_CopyCharPref("li.server.http.baseURL", &http_base);
fe_SetTextField(m_ldap_addr_text, ldap_addr);
fe_SetTextField(m_ldap_base_text, ldap_base);
fe_SetTextField(m_http_base_text, http_base);
/* ldap is the default, so use ldap if li_protocol == NULL */
use_ldap = (!li_protocol || !XP_STRCMP(li_protocol, "ldap"));
XtVaSetValues(m_ldap_toggle, XmNset, use_ldap,
XmNsensitive, !PREF_PrefIsLocked("li.protocol"), NULL);
XtVaSetValues(m_ldap_addr_text, XmNsensitive,
!PREF_PrefIsLocked("li.server.ldap.url") && use_ldap, NULL);
XtVaSetValues(m_ldap_base_text, XmNsensitive,
!PREF_PrefIsLocked("li.server.ldap.userbase") && use_ldap, NULL);
XtVaSetValues(m_http_toggle, XmNset, !use_ldap,
XmNsensitive, !PREF_PrefIsLocked("li.protocol"), NULL);
XtVaSetValues(m_http_base_text, XmNsensitive,
!PREF_PrefIsLocked("li.server.http.baseURL") && !use_ldap, NULL);
setInitialized(TRUE);
}
void
XFE_PrefsPageLIServer::install()
{
}
void
XFE_PrefsPageLIServer::save()
{
char* str;
PREF_SetCharPref("li.protocol",
XmToggleButtonGetState(m_ldap_toggle) ? "ldap" : "http");
str = fe_GetTextField(m_ldap_addr_text);
PREF_SetCharPref("li.server.ldap.url", str);
if ( str ) XtFree(str);
str = fe_GetTextField(m_ldap_base_text);
PREF_SetCharPref("li.server.ldap.userbase", str);
if ( str ) XtFree(str);
str = fe_GetTextField(m_http_base_text);
PREF_SetCharPref("li.server.http.baseURL", str);
if ( str ) XtFree(str);
}
void
XFE_PrefsPageLIServer::cb_toggle(Widget w, XtPointer closure, XtPointer data)
{
((XFE_PrefsPageLIServer*)closure)->toggleCallback(w, data);
}
void
XFE_PrefsPageLIServer::toggleCallback(Widget w, XtPointer call_data)
{
XP_Bool use_ldap;
XmToggleButtonCallbackStruct* cb = (XmToggleButtonCallbackStruct*) call_data;
if ( !cb->set ) {
XtVaSetValues(w, XmNset, True, NULL);
} else {
use_ldap = ( w == m_ldap_toggle );
XmToggleButtonSetState(m_ldap_toggle, use_ldap, False);
XmToggleButtonSetState(m_http_toggle, !use_ldap, False);
XtSetSensitive(m_ldap_addr_text,
use_ldap && !PREF_PrefIsLocked("li.server.ldap.url"));
XtSetSensitive(m_ldap_base_text,
use_ldap && !PREF_PrefIsLocked("li.server.ldap.userbase"));
XtSetSensitive(m_http_base_text,
!use_ldap && !PREF_PrefIsLocked("li.server.http.baseURL"));
}
}
Boolean
XFE_PrefsPageLIServer::verify()
{
return TRUE;
}
Widget
XFE_PrefsPageLIServer::get_frame()
{
return m_wPage;
}