зеркало из https://github.com/mozilla/gecko-dev.git
418 строки
12 KiB
C++
418 строки
12 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.org 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):
|
|
*/
|
|
/*
|
|
ABNameCTalkTab.cpp -- class definition for XFE_PropertyTabView
|
|
Created: Tao Cheng <tao@netscape.com>, 12-nov-96
|
|
*/
|
|
|
|
#include "PropertySheetView.h"
|
|
#include "ABNameFolderDlg.h"
|
|
#include "ABNameCTalkTab.h"
|
|
|
|
#include "abcom.h"
|
|
|
|
#include <Xm/Form.h>
|
|
#include <Xm/TextF.h>
|
|
#include <Xm/Separator.h>
|
|
|
|
#include <Xm/ToggleB.h>
|
|
#include <Xm/LabelG.h>
|
|
|
|
#include "DtWidgets/ComboBox.h"
|
|
|
|
#include "felocale.h"
|
|
#include "xpgetstr.h"
|
|
#include "xfe.h"
|
|
|
|
extern int XFE_AB_NAME_COOLTALK_TAB;
|
|
extern int XFE_AB_COOLTALK_INFO;
|
|
extern int XFE_AB_COOLTALK_DEF_SERVER;
|
|
extern int XFE_AB_COOLTALK_SERVER_IK_HOST;
|
|
extern int XFE_AB_COOLTALK_DIRECTIP;
|
|
extern int XFE_AB_COOLTALK_ADDR_LABEL;
|
|
extern int XFE_AB_COOLTALK_ADDR_EXAMPLE;
|
|
|
|
XFE_ABNameCTalkTabView::XFE_ABNameCTalkTabView(XFE_Component *top,
|
|
XFE_View *view):
|
|
XFE_PropertyTabView(top, view, XFE_AB_NAME_COOLTALK_TAB)
|
|
{
|
|
|
|
int ac, numForms = 3;
|
|
Arg av[20];
|
|
Widget topForm = getBaseWidget(),
|
|
label,
|
|
stripForm[4];
|
|
|
|
XmString xmstr;
|
|
|
|
for (int i=0; i < numForms; i++) {
|
|
ac = 0;
|
|
stripForm[i] = XmCreateForm(topForm, "strip", av, ac);
|
|
|
|
if (i == 0) {
|
|
label = XtVaCreateManagedWidget("cTalkLabelInfo",
|
|
xmLabelGadgetClass, stripForm[i],
|
|
XmNalignment, XmALIGNMENT_BEGINNING,
|
|
NULL);
|
|
|
|
xmstr = XmStringCreateLtoR(XP_GetString(XFE_AB_COOLTALK_INFO),
|
|
XmFONTLIST_DEFAULT_TAG);
|
|
XtVaSetValues(label,
|
|
XmNlabelString, xmstr,
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_NONE,
|
|
0);
|
|
XmStringFree(xmstr);
|
|
|
|
XtVaSetValues(stripForm[i],
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_NONE,
|
|
XmNtopOffset, 10,
|
|
0);
|
|
|
|
}/* if */
|
|
else if (i == 1) {
|
|
/* the select prompt label
|
|
*/
|
|
xmstr = XmStringCreateLtoR(XP_GetString(XFE_AB_COOLTALK_ADDR_LABEL),
|
|
XmFONTLIST_DEFAULT_TAG);
|
|
label = XtVaCreateManagedWidget("cTalkServerPrompt",
|
|
xmLabelGadgetClass, stripForm[i],
|
|
XmNlabelString, xmstr,
|
|
XmNalignment, XmALIGNMENT_BEGINNING,
|
|
NULL);
|
|
XmStringFree(xmstr);
|
|
|
|
/* The combo select
|
|
*/
|
|
Visual *v = 0;
|
|
Colormap cmap = 0;
|
|
Cardinal depth = 0;
|
|
XtVaGetValues (getToplevel()->getBaseWidget(),
|
|
XmNvisual, &v,
|
|
XmNcolormap, &cmap,
|
|
XmNdepth, &depth,
|
|
NULL);
|
|
|
|
|
|
/* Create a combobox for storing directories
|
|
*/
|
|
XtSetArg (av[ac], XmNvisual, v); ac++;
|
|
XtSetArg (av[ac], XmNcolormap, cmap); ac++;
|
|
XtSetArg (av[ac], XmNdepth, depth); ac++;
|
|
XtSetArg (av[ac], XmNmoveSelectedItemUp, False); ac++;
|
|
XtSetArg (av[ac], XmNtype, XmDROP_DOWN_COMBO_BOX); ac++;
|
|
XtSetArg (av[ac], XmNvisibleItemCount, 3); ac++;
|
|
|
|
m_serverCombo = DtCreateComboBox(stripForm[i],
|
|
"serverCombo", av,ac);
|
|
XtVaGetValues(m_serverCombo,
|
|
XmNtextField, &(m_textFs[0]),
|
|
NULL);
|
|
XtVaSetValues(m_textFs[0],
|
|
XmNeditable, False,
|
|
0);
|
|
|
|
// Add fake items to comboBox
|
|
int nServers = 3;
|
|
XmString xmstr;
|
|
for (int j = 0; j < nServers; j++) {
|
|
xmstr = XmStringCreateLtoR(XP_GetString(XFE_AB_COOLTALK_DEF_SERVER+j),
|
|
XmSTRING_DEFAULT_CHARSET);
|
|
DtComboBoxAddItem(m_serverCombo, xmstr, 1, True );
|
|
XmStringFree(xmstr);
|
|
}/* for j */
|
|
// attachment
|
|
XtVaSetValues(label,
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
XmNrightAttachment, XmATTACH_NONE,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
0);
|
|
|
|
XtVaSetValues(m_serverCombo,
|
|
XmNleftAttachment, XmATTACH_WIDGET,
|
|
XmNleftWidget, label,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
0);
|
|
|
|
XtManageChild(m_serverCombo);
|
|
XtAddCallback(m_serverCombo,
|
|
XmNselectionCallback,
|
|
XFE_ABNameCTalkTabView::comboSelCallback,
|
|
this);
|
|
|
|
//
|
|
XtVaSetValues(stripForm[i],
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
XmNtopAttachment, XmATTACH_WIDGET,
|
|
XmNtopWidget, stripForm[i-1],
|
|
XmNtopOffset, 20,
|
|
0);
|
|
XtVaGetValues(label,
|
|
XmNwidth, &m_labelWidth,
|
|
0);
|
|
|
|
m_labelWidth += 10;
|
|
XtVaSetValues(label,
|
|
XmNwidth, m_labelWidth,
|
|
0);
|
|
}/* else if */
|
|
else if (i == 2) {
|
|
/* type in text
|
|
*/
|
|
ac = 0;
|
|
m_textFs[1] = fe_CreateTextField(stripForm[i], "serverName",
|
|
av, ac);
|
|
/* example label
|
|
*/
|
|
xmstr = XmStringCreateLtoR(" ",
|
|
XmFONTLIST_DEFAULT_TAG);
|
|
m_serverExample = XtVaCreateManagedWidget("cTalkServerPrompt",
|
|
xmLabelGadgetClass, stripForm[i],
|
|
XmNlabelString, xmstr,
|
|
XmNalignment, XmALIGNMENT_BEGINNING,
|
|
NULL);
|
|
XmStringFree(xmstr);
|
|
|
|
//
|
|
XtVaSetValues(m_textFs[1],
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_NONE,
|
|
XmNleftOffset, m_labelWidth,
|
|
0);
|
|
XtVaSetValues(m_serverExample,
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
XmNtopAttachment, XmATTACH_WIDGET,
|
|
XmNtopWidget, m_textFs[1],
|
|
XmNleftOffset, m_labelWidth,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
0);
|
|
XtVaSetValues(stripForm[i],
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
XmNtopAttachment, XmATTACH_WIDGET,
|
|
XmNtopWidget, stripForm[i-1],
|
|
XmNtopOffset, 10,
|
|
XmNbottomOffset, 10,
|
|
0);
|
|
XtManageChild(m_textFs[1]);
|
|
XtSetSensitive(stripForm[i], False);
|
|
m_typeinTextForm = stripForm[i];
|
|
}/* else */
|
|
|
|
XtManageChild(stripForm[i]);
|
|
}/* for i */
|
|
// setServerState(0, 0);
|
|
}
|
|
|
|
XFE_ABNameCTalkTabView::~XFE_ABNameCTalkTabView()
|
|
{
|
|
}
|
|
|
|
|
|
void XFE_ABNameCTalkTabView::comboSelCallback(Widget w,
|
|
XtPointer clientData,
|
|
XtPointer callData)
|
|
{
|
|
XFE_ABNameCTalkTabView *obj = (XFE_ABNameCTalkTabView *) clientData;
|
|
obj->comboSelCB(w, callData);
|
|
}
|
|
|
|
void
|
|
XFE_ABNameCTalkTabView::comboSelCB(Widget /* w */, XtPointer callData)
|
|
{
|
|
DtComboBoxCallbackStruct *cbData = (DtComboBoxCallbackStruct *)callData;
|
|
if (cbData->reason == XmCR_SELECT ) {
|
|
char* text = 0;
|
|
XmString str = cbData->item_or_text;
|
|
|
|
XmStringGetLtoR(str, XmSTRING_DEFAULT_CHARSET, &text);
|
|
if (*text ) {
|
|
XmString xmstr;
|
|
char tmp[128];
|
|
|
|
tmp[0] = '\0';
|
|
if (XP_STRCMP(text, "Netscape Conference DLS Server") == 0) {
|
|
XP_SAFE_SPRINTF(tmp, sizeof(tmp),
|
|
"%s",
|
|
"");
|
|
m_serverType = kDefaultDLS;
|
|
XtSetSensitive(m_typeinTextForm, False);
|
|
}/* if */
|
|
else if (XP_STRCMP(text, "Specific DLS Server") == 0) {
|
|
XP_SAFE_SPRINTF(tmp, sizeof(tmp),
|
|
XP_GetString(XFE_AB_COOLTALK_ADDR_EXAMPLE),
|
|
"servername.domain.com");
|
|
|
|
m_serverType = kSpecificDLS;
|
|
XtSetSensitive(m_typeinTextForm, True);
|
|
}/* if */
|
|
else if (XP_STRCMP(text, "Hostname or IP Address") == 0) {
|
|
XP_SAFE_SPRINTF(tmp, sizeof(tmp),
|
|
XP_GetString(XFE_AB_COOLTALK_ADDR_EXAMPLE),
|
|
"name.domain.com or 123.45.678.90");
|
|
|
|
m_serverType = kHostOrIPAddress;
|
|
XtSetSensitive(m_typeinTextForm, True);
|
|
}/* if */
|
|
xmstr = XmStringCreateLtoR(tmp,
|
|
XmFONTLIST_DEFAULT_TAG);
|
|
XtVaSetValues(m_serverExample,
|
|
XmNlabelString, xmstr,
|
|
NULL);
|
|
XmStringFree(xmstr);
|
|
|
|
XtFree(text);
|
|
}/* if text */
|
|
}/* if */
|
|
}
|
|
|
|
void XFE_ABNameCTalkTabView::setDlgValues()
|
|
{
|
|
XFE_ABNameFolderDlg *dlg = (XFE_ABNameFolderDlg *)getToplevel();
|
|
#if defined(USE_ABCOM)
|
|
XFE_PropertySheetView *folderView = (XFE_PropertySheetView *) getParent();
|
|
MSG_Pane *pane = folderView->getPane();
|
|
|
|
uint16 numItems = 2;
|
|
AB_AttribID * attribs = (AB_AttribID *) XP_CALLOC(numItems,
|
|
sizeof(AB_AttribID));
|
|
attribs[0] = AB_attribUseServer;
|
|
attribs[1] = AB_attribCoolAddress;
|
|
|
|
AB_AttributeValue *values = NULL;
|
|
int error = AB_GetPersonEntryAttributes(pane,
|
|
attribs,
|
|
&values,
|
|
&numItems);
|
|
int16 shortValue = kDefaultDLS;
|
|
char *tmp = NULL;
|
|
for (int i=0; i < numItems; i++) {
|
|
switch (values[i].attrib) {
|
|
case AB_attribUseServer:
|
|
shortValue = values[i].u.shortValue;
|
|
break;
|
|
|
|
case AB_attribCoolAddress:
|
|
tmp = values[i].u.string;
|
|
break;
|
|
|
|
default:
|
|
XP_ASSERT(0);
|
|
break;
|
|
}/* switch */
|
|
}/* for i */
|
|
|
|
setServerState(shortValue,
|
|
tmp);
|
|
|
|
XP_FREEIF(attribs);
|
|
AB_FreeEntryAttributeValues(values, numItems);
|
|
#else
|
|
PersonEntry& entry = dlg->getPersonEntry();
|
|
setServerState(entry.UseServer,
|
|
entry.pCoolAddress);
|
|
#endif /* USE_ABCOM */
|
|
}
|
|
|
|
void XFE_ABNameCTalkTabView::apply()
|
|
{
|
|
}
|
|
|
|
void XFE_ABNameCTalkTabView::getDlgValues()
|
|
{
|
|
XFE_ABNameFolderDlg *dlg = (XFE_ABNameFolderDlg *)getToplevel();
|
|
#if defined(USE_ABCOM)
|
|
XFE_PropertySheetView *folderView = (XFE_PropertySheetView *) getParent();
|
|
MSG_Pane *pane = folderView->getPane();
|
|
|
|
uint16 numItems = 2;
|
|
AB_AttributeValue *values =
|
|
(AB_AttributeValue *) XP_CALLOC(numItems,
|
|
sizeof(AB_AttributeValue));
|
|
char *tmp = NULL;
|
|
|
|
values[0].attrib = AB_attribUseServer;
|
|
values[0].u.shortValue = m_serverType;
|
|
|
|
tmp = fe_GetTextField(m_textFs[1]);
|
|
values[1].attrib = AB_attribCoolAddress;
|
|
if (tmp && strlen(tmp))
|
|
values[1].u.string = tmp;
|
|
else
|
|
values[1].u.string = XP_STRDUP("");
|
|
|
|
int error = AB_SetPersonEntryAttributes(pane,
|
|
values,
|
|
numItems);
|
|
|
|
AB_FreeEntryAttributeValues(values, numItems);
|
|
#else
|
|
PersonEntry& entry = dlg->getPersonEntry();
|
|
|
|
char *tmp;
|
|
tmp = fe_GetTextField(m_textFs[1]);
|
|
if (tmp && strlen(tmp))
|
|
entry.pCoolAddress = tmp;
|
|
else
|
|
entry.pCoolAddress = XP_STRDUP("");
|
|
entry.UseServer = m_serverType;
|
|
#endif /* USE_ABCOM */
|
|
}
|
|
|
|
void XFE_ABNameCTalkTabView::setServerState(short serverType, char* serverName)
|
|
{
|
|
XmString xmstr;
|
|
if (serverType == kDefaultDLS) {
|
|
fe_SetTextField(m_textFs[1], "");
|
|
xmstr = XmStringCreateLtoR(XP_GetString(XFE_AB_COOLTALK_DEF_SERVER),
|
|
XmSTRING_DEFAULT_CHARSET);
|
|
XtSetSensitive(m_typeinTextForm, False);
|
|
}/* if */
|
|
else if (serverType == kSpecificDLS) {
|
|
fe_SetTextField(m_textFs[1], serverName?serverName:"");
|
|
xmstr = XmStringCreateLtoR(XP_GetString(XFE_AB_COOLTALK_SERVER_IK_HOST),
|
|
XmSTRING_DEFAULT_CHARSET);
|
|
XtSetSensitive(m_typeinTextForm, True);
|
|
}/* if */
|
|
else {
|
|
fe_SetTextField(m_textFs[1], serverName?serverName:"");
|
|
xmstr = XmStringCreateLtoR(XP_GetString(XFE_AB_COOLTALK_DIRECTIP),
|
|
XmSTRING_DEFAULT_CHARSET);
|
|
XtSetSensitive(m_typeinTextForm, True);
|
|
}/* else */
|
|
DtComboBoxSelectItem(m_serverCombo, xmstr);
|
|
XmStringFree(xmstr);
|
|
m_serverType = serverType;
|
|
}
|