Files
Mozilla/mozilla/cmd/xfe/src/ABComplPickerDlg.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

242 lines
6.0 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):
*/
/* -*- Mode: C++; tab-width: 4 -*-
Created: Tao Cheng <tao@netscape.com>, 16-mar-98
*/
#include "ABComplPickerDlg.h"
#include "ABComplPickerView.h"
#include "Frame.h"
#include "ViewGlue.h"
#include <Xm/Form.h>
#include <Xm/DialogS.h>
#include "xpgetstr.h"
#include "xp_mem.h"
#include "libi18n.h"
#include "intl_csi.h"
#include "felocale.h"
extern int XFE_AB_NAME;
extern int XFE_AB_TITLE;
extern int XFE_AB_DEPARTMENT;
XFE_ABComplPickerDlg::XFE_ABComplPickerDlg(Widget parent,
char *name,
Boolean modal,
MWContext *context,
MSG_Pane *pane,
MWContext *pickerContext,
NCPickerExitFunc func,
void *callData):
#if defined(GLUE_COMPO_CONTEXT)
XFE_ViewDashBDlg(parent, name, context,
True, /* ok */
True, /* cancel */
True, /* help */
False, /* apply; remove */
modal)
#else
XFE_ViewDialog((XFE_View *) 0, parent, name,
context,
True, /* ok */
True, /* cancel */
True, /* help */
False, /* apply; remove */
False, /* separator */
modal)
#endif /* GLUE_COMPO_CONTEXT */
{
m_func = func;
m_cData = callData;
m_okToDestroy = False;
Arg av [20];
int ac = 0;
/* Form: m_chrome is the dialog
*/
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++;
XtSetArg (av [ac], XmNresizePolicy, XmRESIZE_NONE); ac++;
Widget form = XmCreateForm (m_chrome, "pickerParentForm", av, ac);
#if defined(GLUE_COMPO_CONTEXT)
m_aboveButtonArea = form;
#endif /* GLUE_COMPO_CONTEXT */
XtManageChild (form);
XtVaSetValues(m_chrome, /* the dialog */
// XmNallowShellResize, FALSE,
// XmNnoResize, False,
XmNdefaultButton, NULL,
NULL);
/* picker pane
*/
MSG_Pane *pickerPane = 0;
if (!pane || !pickerContext) {
m_pickerContext = cloneCntxtNcreatePane(context, &pickerPane);
}/* pane */
else {
m_pickerContext = pickerContext;
pickerPane = pane;
}/* else */
/* The list view
*/
XFE_ABComplPickerView *pickerView =
new XFE_ABComplPickerView(this,
form,
NULL,
m_pickerContext,
pickerPane);
setView(pickerView);
//
pickerView->registerInterest(XFE_ABComplPickerView::confirmed,
this,
(XFE_FunctionNotification)confirmed_cb);
#if defined(GLUE_COMPO_CONTEXT)
if (m_dashboard && pickerView)
m_dashboard->connect2Dashboard(pickerView);
//
attachView();
#endif /* GLUE_COMPO_CONTEXT */
}
XFE_ABComplPickerDlg::~XFE_ABComplPickerDlg()
{
#if defined(GLUE_COMPO_CONTEXT)
if (m_view && m_dashboard)
m_dashboard->disconnectFromDashboard(m_view);
#endif
m_view->unregisterInterest(XFE_ABComplPickerView::confirmed,
this,
(XFE_FunctionNotification)confirmed_cb);
m_okToDestroy = True;
}
XFE_CALLBACK_DEFN(XFE_ABComplPickerDlg, confirmed)(XFE_NotificationCenter */*obj*/,
void */*clientData*/,
void */* callData */)
{
ok();
}
void
XFE_ABComplPickerDlg::selectItem(int i)
{
XFE_Outliner *outliner = ((XFE_MNListView *) m_view)->getOutliner();
if (i < outliner->getTotalLines())
outliner->selectItemExclusive(i);
}
MWContext*
XFE_ABComplPickerDlg::cloneCntxtNcreatePane(MWContext *context,
MSG_Pane **pane)
{
MWContext *pickerContext = XP_NewContext();
if (!pickerContext)
return NULL;
#if defined(GLUE_COMPO_CONTEXT)
fe_ContextData *fec = XP_NEW_ZAP (fe_ContextData);
XP_ASSERT(fec);
CONTEXT_DATA((pickerContext)) = fec;
pickerContext->funcs = fe_BuildDisplayFunctionTable();
// hack to identify parent type
XFE_Frame *f = ViewGlue_getFrame(context);
ViewGlue_addMapping(f, (void *)pickerContext);
#else
fe_ContextData *fec = XP_NEW_ZAP (fe_ContextData);
XP_ASSERT(fec);
CONTEXT_DATA((pickerContext)) = fec;
XFE_Frame *f = ViewGlue_getFrame(context);
ViewGlue_addMapping(f, (void *)pickerContext);
pickerContext->funcs = fe_BuildDisplayFunctionTable();
CONTEXT_WIDGET(pickerContext) = CONTEXT_WIDGET(context);
// fe_InitRemoteServer (XtDisplay (widget));
#endif /* GLUE_COMPO_CONTEXT */
// Initialize doc_csid
INTL_CharSetInfo c = LO_GetDocumentCharacterSetInfo(pickerContext);
INTL_SetCSIDocCSID(c, fe_LocaleCharSetID);
INTL_SetCSIWinCSID(c, INTL_DocToWinCharSetID(INTL_GetCSIDocCSID(c)));
//
int error = AB_CreateABPickerPane(pane,
pickerContext,
fe_getMNMaster(),
8);
XP_ASSERT(*pane);
return pickerContext;
}
void
XFE_ABComplPickerDlg::cancel()
{
hide();
}
void
XFE_ABComplPickerDlg::ok()
{
cancel();
if (m_func)
m_func(((XFE_ABComplPickerView *)m_view)->getSelection(),
m_cData);
}
/* C API
*/
extern "C" XFE_ABComplPickerDlg*
fe_showComplPickerDlg(Widget toplevel,
MWContext *context,
MSG_Pane *pane,
MWContext *pickerContext,
NCPickerExitFunc func,
void *callData)
{
XFE_ABComplPickerDlg *dlg =
new XFE_ABComplPickerDlg(toplevel,
"CompletionPickerDlg",
True,
context,
pane,
pickerContext,
func,
callData);
#if 1
return dlg;
#else
dlg->show();
#endif
}