Files
Mozilla/mozilla/cmd/xfe/src/ABNameFolderDlg.cpp
dmose%mozilla.org 83e38c06cc updated license boilerplate to xPL v1.1
git-svn-id: svn://10.0.0.236/trunk@52594 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-02 22:43:10 +00:00

627 lines
16 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):
*/
/*
ABNameFolderDlg.cpp -- class definition for XFE_ABNameFolderDlg
Created: Tao Cheng <tao@netscape.com>, 12-nov-96
*/
#include "ABNameFolderDlg.h"
#include "PropertySheetView.h"
#include "ABNameGenTab.h"
#include "ABNameConTab.h"
#if 0
/* out for 4.x and 5.0
*/
#include "ABNameSecuTab.h"
#endif
#include "ABNameCTalkTab.h"
#include "AddrBookView.h"
extern "C" {
XP_List* FE_GetDirServers();
ABook* fe_GetABook(MWContext *context);
};
#include "xpgetstr.h"
extern int XFE_AB_NAME_CARD_FOR;
extern int XFE_AB_NAME_NEW_CARD;
extern int XFE_ADDR_ENTRY_ALREADY_EXISTS;
extern int MK_ADDR_ENTRY_ALREADY_EXISTS;
//
// This is the dialog it self
//
XFE_ABNameFolderDlg::XFE_ABNameFolderDlg(Widget parent,
char *name,
Boolean modal,
MWContext *context):
XFE_PropertySheetDialog((XFE_View *)0, parent, name,
context,
TRUE, /* ok */
TRUE, /* cancel */
TRUE, /* help */
FALSE, /* apply */
FALSE, /* separator */
modal)
{
m_newUser = True;
m_entry = MSG_VIEWINDEXNONE;
//
m_personEntry.Initialize();
/* protected: m_view == folder view
*/
XFE_PropertySheetView* folderView = (XFE_PropertySheetView *) m_view;
/* Add tabs
*/
/* Gen
*/
folderView->addTab(new XFE_ABNameGenTabView((XFE_Component *)this,
folderView));
folderView->addTab(new XFE_ABNameConTabView((XFE_Component *)this,
folderView));
#if 0
/* out for 4.x and 5.0
*/
folderView->addTab(new XFE_ABNameSecuTabView((XFE_Component *)this,
folderView));
#endif
folderView->addTab(new XFE_ABNameCTalkTabView((XFE_Component *)this,
folderView));
}
#if defined(USE_ABCOM)
XFE_ABNameFolderDlg::XFE_ABNameFolderDlg(MSG_Pane *personPane,
MWContext *context):
XFE_PropertySheetDialog((XFE_View *)0,
CONTEXT_WIDGET(context),
"abCardProperties",
context,
TRUE, /* ok */
TRUE, /* cancel */
TRUE, /* help */
FALSE, /* apply */
FALSE, /* separator */
TRUE)
{
m_newUser = True;
m_entry = MSG_VIEWINDEXNONE;
/* protected: m_view == folder view
*/
XFE_PropertySheetView* folderView = (XFE_PropertySheetView *) m_view;
/* Add tabs
*/
/* Gen
*/
folderView->addTab(new XFE_ABNameGenTabView((XFE_Component *)this,
folderView));
folderView->addTab(new XFE_ABNameConTabView((XFE_Component *)this,
folderView));
folderView->addTab(new XFE_ABNameCTalkTabView((XFE_Component *)this,
folderView));
setDlgValues(personPane);
}
#endif /* USE_ABCOM */
XFE_ABNameFolderDlg::~XFE_ABNameFolderDlg()
{
#if defined(USE_ABCOM)
MSG_Pane *pane = ((XFE_MNView *) m_view)->getPane();
MSG_SetFEData(pane, 0);
int error = AB_ClosePane(pane);
#else
m_personEntry.CleanUp();
#endif /* USE_ABCOM */
}
#if defined(USE_ABCOM)
void
XFE_ABNameFolderDlg::setDlgValues(MSG_Pane *pane)
{
/* super class' */
((XFE_MNView *) m_view)->setPane(pane);
m_entry = AB_GetABIDForPerson(pane);
m_newUser = m_entry?False:True;
XFE_PropertySheetDialog::setDlgValues();
}
#endif /* USE_ABCOM */
void XFE_ABNameFolderDlg::setDlgValues(ABID entry, PersonEntry* pPerson,
Boolean newUser)
{
m_newUser = newUser;
m_entry = entry;
/* copy person data
*/
if (pPerson) {
if (pPerson->pNickName)
m_personEntry.pNickName = XP_STRDUP(pPerson->pNickName);
if (pPerson->pGivenName)
m_personEntry.pGivenName = XP_STRDUP(pPerson->pGivenName);
if (pPerson->pMiddleName)
m_personEntry.pMiddleName = XP_STRDUP(pPerson->pMiddleName);
if (pPerson->pFamilyName)
m_personEntry.pFamilyName = XP_STRDUP(pPerson->pFamilyName);
if (pPerson->pCompanyName)
m_personEntry.pCompanyName = XP_STRDUP(pPerson->pCompanyName);
if (pPerson->pLocality)
m_personEntry.pLocality = XP_STRDUP(pPerson->pLocality);
if (pPerson->pRegion)
m_personEntry.pRegion = XP_STRDUP(pPerson->pRegion);
if (pPerson->pEmailAddress)
m_personEntry.pEmailAddress = XP_STRDUP(pPerson->pEmailAddress);
if (pPerson->pInfo)
m_personEntry.pInfo = XP_STRDUP(pPerson->pInfo);
m_personEntry.HTMLmail = pPerson->HTMLmail;
if (pPerson->pTitle)
m_personEntry.pTitle = XP_STRDUP(pPerson->pTitle);
if (pPerson->pAddress)
m_personEntry.pAddress = XP_STRDUP(pPerson->pAddress);
if (pPerson->pPOAddress)
m_personEntry.pPOAddress = XP_STRDUP(pPerson->pPOAddress);
if (pPerson->pZipCode)
m_personEntry.pZipCode = XP_STRDUP(pPerson->pZipCode);
if (pPerson->pCountry)
m_personEntry.pCountry = XP_STRDUP(pPerson->pCountry);
if (pPerson->pWorkPhone)
m_personEntry.pWorkPhone = XP_STRDUP(pPerson->pWorkPhone);
if (pPerson->pFaxPhone)
m_personEntry.pFaxPhone = XP_STRDUP(pPerson->pFaxPhone);
if (pPerson->pHomePhone)
m_personEntry.pHomePhone = XP_STRDUP(pPerson->pHomePhone);
HG17211
if (pPerson->pCoolAddress)
m_personEntry.pCoolAddress = XP_STRDUP(pPerson->pCoolAddress);
m_personEntry.UseServer = pPerson->UseServer;
}/* if */
if (!m_newUser && m_entry != MSG_VIEWINDEXNONE) {
DIR_Server *dir = getABDir();
ABook *aBook = fe_GetABook(0);
char a_line[AB_MAX_STRLEN];
a_line[0] = '\0';
if (AB_GetFullName(dir, aBook, entry, a_line) != MSG_VIEWINDEXNONE) {
char tmp[AB_MAX_STRLEN];
XP_SAFE_SPRINTF(tmp, sizeof(tmp),
XP_GetString(XFE_AB_NAME_CARD_FOR),
a_line);
setCardName(tmp);
}/* if AB_GetFullName */
}/* if !m_newUser && m_entry != MSG_VIEWINDEXNONE */
else {
setCardName(XP_GetString(XFE_AB_NAME_NEW_CARD));
}/* else */
XFE_PropertySheetDialog::setDlgValues();
}
void XFE_ABNameFolderDlg::setDlgValues(ABID entry, Boolean newUser)
{
m_newUser = newUser;
m_entry = entry;
if (!m_newUser && m_entry != MSG_VIEWINDEXNONE) {
DIR_Server *dir = getABDir();
ABook *aBook = fe_GetABook(0);
char a_line[AB_MAX_STRLEN];
a_line[0] = '\0';
if (AB_GetNickname(dir, aBook, entry, a_line) != MSG_VIEWINDEXNONE)
m_personEntry.pNickName = XP_STRDUP(a_line);
a_line[0] = '\0';
if (AB_GetGivenName(dir, aBook, entry, a_line) != MSG_VIEWINDEXNONE)
m_personEntry.pGivenName = XP_STRDUP(a_line);
a_line[0] = '\0';
if (AB_GetMiddleName(dir, aBook, entry, a_line) != MSG_VIEWINDEXNONE)
m_personEntry.pMiddleName = XP_STRDUP(a_line);
a_line[0] = '\0';
if (AB_GetFamilyName(dir, aBook, entry, a_line) != MSG_VIEWINDEXNONE)
m_personEntry.pFamilyName = XP_STRDUP(a_line);
a_line[0] = '\0';
if (AB_GetCompanyName(dir, aBook, entry, a_line) != MSG_VIEWINDEXNONE)
m_personEntry.pCompanyName = XP_STRDUP(a_line);
a_line[0] = '\0';
if (AB_GetLocality(dir, aBook, entry, a_line) != MSG_VIEWINDEXNONE)
m_personEntry.pLocality = XP_STRDUP(a_line);
a_line[0] = '\0';
if (AB_GetRegion(dir, aBook, entry, a_line) != MSG_VIEWINDEXNONE)
m_personEntry.pRegion = XP_STRDUP(a_line);
a_line[0] = '\0';
if (AB_GetEmailAddress(dir, aBook, entry, a_line) != MSG_VIEWINDEXNONE)
m_personEntry.pEmailAddress = XP_STRDUP(a_line);
a_line[0] = '\0';
if (AB_GetInfo(dir, aBook, entry, a_line) != MSG_VIEWINDEXNONE)
m_personEntry.pInfo = XP_STRDUP(a_line);
AB_GetHTMLMail(dir, aBook, entry, &(m_personEntry.HTMLmail));
a_line[0] = '\0';
if (AB_GetTitle(dir, aBook, entry, a_line) != MSG_VIEWINDEXNONE)
m_personEntry.pTitle = XP_STRDUP(a_line);
a_line[0] = '\0';
if (AB_GetStreetAddress(dir, aBook, entry, a_line) != MSG_VIEWINDEXNONE)
m_personEntry.pAddress = XP_STRDUP(a_line);
a_line[0] = '\0';
if (AB_GetPOAddress(dir, aBook, entry, a_line) != MSG_VIEWINDEXNONE)
m_personEntry.pPOAddress = XP_STRDUP(a_line);
a_line[0] = '\0';
if (AB_GetZipCode(dir, aBook, entry, a_line) != MSG_VIEWINDEXNONE)
m_personEntry.pZipCode = XP_STRDUP(a_line);
a_line[0] = '\0';
if (AB_GetCountry(dir, aBook, entry, a_line) != MSG_VIEWINDEXNONE)
m_personEntry.pCountry = XP_STRDUP(a_line);
a_line[0] = '\0';
if (AB_GetWorkPhone(dir, aBook, entry, a_line) != MSG_VIEWINDEXNONE)
m_personEntry.pWorkPhone = XP_STRDUP(a_line);
a_line[0] = '\0';
if (AB_GetFaxPhone(dir, aBook, entry, a_line) != MSG_VIEWINDEXNONE)
m_personEntry.pFaxPhone = XP_STRDUP(a_line);
a_line[0] = '\0';
if (AB_GetHomePhone(dir, aBook, entry, a_line) != MSG_VIEWINDEXNONE)
m_personEntry.pHomePhone = XP_STRDUP(a_line);
#if 0
a_line[0] = '\0';
if (AB_GetDistName(dir, aBook, entry, a_line) != MSG_VIEWINDEXNONE)
m_personEntry.pDistName = XP_STRDUP(a_line);
#endif
HG01019
a_line[0] = '\0';
if (AB_GetCoolAddress(dir, aBook, entry, a_line) != MSG_VIEWINDEXNONE)
m_personEntry.pCoolAddress = XP_STRDUP(a_line);
short use;
AB_GetUseServer(dir, aBook, entry, &use);
m_personEntry.UseServer = use;
a_line[0] = '\0';
if (AB_GetFullName(dir, aBook, entry, a_line) != MSG_VIEWINDEXNONE) {
char tmp[AB_MAX_STRLEN];
XP_SAFE_SPRINTF(tmp, sizeof(tmp),
XP_GetString(XFE_AB_NAME_CARD_FOR),
a_line);
setCardName(tmp);
}/* if AB_GetFullName */
}/* if !m_newUser && m_entry != MSG_VIEWINDEXNONE */
else {
m_personEntry.Initialize();
setCardName(XP_GetString(XFE_AB_NAME_NEW_CARD));
}/* else */
XFE_PropertySheetDialog::setDlgValues();
}
void XFE_ABNameFolderDlg::apply()
{
getDlgValues();
#if defined(USE_ABCOM)
MSG_Pane *pane = ((XFE_MNView *) m_view)->getPane();
uint16 numItems = 1;
AB_AttributeValue *values =
(AB_AttributeValue *) XP_CALLOC(numItems,
sizeof(AB_AttributeValue));
values[0].attrib = AB_attribWinCSID;
values[0].u.shortValue = m_context->fe.data->xfe_doc_csid;
m_okToDestroy = TRUE;
int error = AB_SetPersonEntryAttributes(pane,
values,
numItems);
AB_FreeEntryAttributeValues(values, numItems);
if (error != AB_SUCCESS)
m_okToDestroy = False;
error = AB_CommitChanges(pane);
if (error != AB_SUCCESS)
m_okToDestroy = False;
#else
DIR_Server *dir = getABDir();
ABook *aBook = fe_GetABook(0);
// assign win_csid
m_personEntry.WinCSID = m_context->fe.data->xfe_doc_csid;
int errorID;
m_okToDestroy = TRUE;
if (m_newUser) {
/* eEntryAlreadyExists ; MK_ADDR_ENTRY_ALREADY_EXISTS
*/
int errorID = AB_AddUser(dir, aBook, &m_personEntry, &m_entry);
if (errorID != 0 ||
m_entry == MSG_VIEWINDEXNONE) {
if (MK_ADDR_ENTRY_ALREADY_EXISTS == errorID)
fe_Alert_2(getBaseWidget(),
XP_GetString(XFE_ADDR_ENTRY_ALREADY_EXISTS));
else {
char tmp[128];
XP_SAFE_SPRINTF(tmp, sizeof(tmp),
"%s",
XP_GetString(errorID));
fe_Alert_2(getBaseWidget(), tmp);
}/* else */
m_okToDestroy = FALSE;
}/* if */
}/* if */
else {
errorID = AB_ModifyUser(dir, aBook, m_entry, &m_personEntry);
if (errorID != 0 ||
m_entry == MSG_VIEWINDEXNONE) {
if (MK_ADDR_ENTRY_ALREADY_EXISTS == errorID)
fe_Alert_2(getBaseWidget(),
XP_GetString(XFE_ADDR_ENTRY_ALREADY_EXISTS));
else {
char tmp[128];
XP_SAFE_SPRINTF(tmp, sizeof(tmp),
"%s",
XP_GetString(errorID));
fe_Alert_2(getBaseWidget(), tmp);
}/* else */
m_okToDestroy = FALSE;
}/* if */
}/* else */
#endif /* USE_ABCOM */
}
char* XFE_ABNameFolderDlg::getFullname()
{
char a_line[AB_MAX_STRLEN];
a_line[0] = '\0';
static char *firstName = 0;
static char *lastName = 0;
static XP_Bool changed = False;
#if defined(USE_ABCOM)
uint16 numItems = 3;
AB_AttribID *attribs = (AB_AttribID *) XP_CALLOC(numItems,
sizeof(AB_AttribID));
attribs[0] = AB_attribGivenName;
attribs[1] = AB_attribFamilyName;
attribs[2] = AB_attribFullName;
AB_AttributeValue *values = NULL;
int error =
AB_GetPersonEntryAttributes(((XFE_MNView *) m_view)->getPane(),
attribs,
&values,
&numItems);
char *tmp0 = 0,
*tmp1 = 0,
*tmp2 = 0;
for (int i=0; i < numItems; i++) {
switch (values[i].attrib) {
case AB_attribGivenName:
tmp0 = values[i].u.string;
break;
case AB_attribFamilyName:
tmp1 = values[i].u.string;
break;
case AB_attribFullName:
tmp2 = values[i].u.string;
break;
default:
XP_ASSERT(0);
break;
}/* switch */
}/* for i */
if (!changed && (firstName && tmp0 && XP_STRCMP(firstName, tmp0)) ||
(lastName && tmp1 && XP_STRCMP(lastName, tmp1)))
changed = True;
if (tmp2)
XP_SAFE_SPRINTF(a_line, sizeof(a_line),
"%s",
tmp2);
if ((m_entry == MSG_VIEWINDEXNONE) ||
changed ||
(tmp2 == NULL)) {
if (tmp0 || tmp1) {
XP_SAFE_SPRINTF(a_line, sizeof(a_line),
"%s %s",
tmp0?
tmp0:"",
tmp1?
tmp1:"");
}/* if */
}/* if FullName */
firstName = tmp0?XP_STRDUP(tmp0):0;
lastName = tmp1?XP_STRDUP(tmp1):0;
// free
XP_FREEIF(attribs);
AB_FreeEntryAttributeValues(values, numItems);
#else
DIR_Server *dir = getABDir();
ABook *aBook = fe_GetABook(0);
if (!changed &&
(firstName && XP_STRCMP(firstName, m_personEntry.pGivenName)) ||
(lastName && XP_STRCMP(lastName, m_personEntry.pFamilyName)))
changed = True;
if ((m_entry == MSG_VIEWINDEXNONE) ||
changed ||
(AB_GetFullName(dir, aBook, m_entry, a_line) == MSG_VIEWINDEXNONE)) {
if (m_personEntry.pGivenName || m_personEntry.pFamilyName) {
XP_SAFE_SPRINTF(a_line, sizeof(a_line),
"%s %s",
m_personEntry.pGivenName?
m_personEntry.pGivenName:"",
m_personEntry.pFamilyName?
m_personEntry.pFamilyName:"");
}/* if */
}/* if AB_GetFullName */
firstName = m_personEntry.pGivenName;
lastName = m_personEntry.pFamilyName;
#endif /* USE_ABCOM */
return XP_STRLEN(a_line)?XP_STRDUP(a_line):0;
}
void XFE_ABNameFolderDlg::setCardName(char *name)
{
if (name)
XtVaSetValues(XtParent(m_chrome), XmNtitle, name, NULL);
}
DIR_Server* XFE_ABNameFolderDlg::getABDir()
{
XP_List *directories = FE_GetDirServers();
DIR_Server *pabDir = NULL;
DIR_GetPersonalAddressBook(directories, &pabDir);
return pabDir;
}/* XFE_ABNameFolderDlg::getABDir() */
extern "C" void fe_showABCardPropertyDlg(Widget parent,
MWContext *context,
ABID entry = MSG_VIEWINDEXNONE,
XP_Bool newuser = True)
{
XFE_ABNameFolderDlg* nameDlg =
new XFE_ABNameFolderDlg(parent,
"abCardProperties",
True,
context);
nameDlg->setDlgValues(entry, newuser);
nameDlg->show();
}
extern "C" int FE_ShowPropertySheetFor(MWContext* context,
ABID entryID, PersonEntry* pPerson)
{
// need a context
XP_ASSERT(context);
// Get ABook
ABook *addr_book = fe_GetABook(0);
// Get ABDir
DIR_Server *dir;
DIR_GetPersonalAddressBook(FE_GetDirServers(), &dir);
int result = -1;
if (dir) {
XFE_ABNameFolderDlg* nameDlg =
new XFE_ABNameFolderDlg(CONTEXT_WIDGET(context),
"abCardProperties",
True,
context);
if (entryID != MSG_MESSAGEIDNONE) {
nameDlg->setDlgValues(entryID, pPerson, False);
}/* if */
else {
/* new user
*/
nameDlg->setDlgValues(entryID, pPerson, True);
}/* else */
XFE_PropertySheetDialog::ANS_t ans = XFE_PropertySheetDialog::eWAITING;
nameDlg->setClientData(&ans);
nameDlg->show();
while (ans == XFE_PropertySheetDialog::eWAITING)
fe_EventLoop ();
#if defined(DEBUG_tao)
printf("\n THE ANSWER is %d\n", ans);
#endif
if (ans == XFE_PropertySheetDialog::eCANCEL)
result = FALSE;
else if (ans == XFE_PropertySheetDialog::eAPPLY)
result = TRUE;
else
result = -1;
}/* if dir */
return result;
}
#if defined(USE_ABCOM)
extern "C" int
fe_ShowPropertySheetForEntry(MSG_Pane *pane, MWContext *context)
{
XFE_ABNameFolderDlg* nameDlg =
new XFE_ABNameFolderDlg(pane, context);
nameDlg->show();
}
#endif /* USE_ABCOM */