gecko-dev/cmd/xfe/src/ViewDashBDlg.cpp

219 строки
5.5 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 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.
*
* Contributor(s):
*/
/* -*- Mode: C++; tab-width: 4 -*-
ViewDashBDlg.cpp -- View dialog with a dashboard.
Created: Tao Cheng <tao@netscape.com>, 27-apr-98
*/
#include "ViewDashBDlg.h"
#include <Xfe/Xfe.h>
XFE_ViewDashBDlg::XFE_ViewDashBDlg(Widget parent,
char *name,
MWContext *context,
Boolean ok,
Boolean cancel,
Boolean help,
Boolean apply,
Boolean modal)
: XFE_ViewDialog(NULL, parent, name,
context,
FALSE, // ok
FALSE, // cancel
FALSE, // help
FALSE, // apply
FALSE, // separator
FALSE, // modal
create_chrome_widget(parent, name,
TRUE,
TRUE,
FALSE,
FALSE,
FALSE,
modal))
{
m_okBtn = 0;
m_dashboard = new XFE_Dashboard(this,
m_chrome,
NULL, // XFE_Frame
False /* taskbar */);
m_dashboard->setShowStatusBar(True);
m_dashboard->setShowProgressBar(True);
// create the button area
m_buttonArea = createButtonArea(m_chrome, ok, cancel, help, apply);
XtVaSetValues(m_dashboard->getBaseWidget(),
XmNleftAttachment, XmATTACH_FORM,
XmNrightAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_NONE,
XmNbottomAttachment, XmATTACH_FORM,
NULL);
XtVaSetValues(m_buttonArea,
XmNleftAttachment, XmATTACH_FORM,
XmNrightAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_NONE,
XmNbottomAttachment, XmATTACH_WIDGET,
XmNbottomWidget, m_dashboard->getBaseWidget(),
XmNmarginWidth, 0,
XmNmarginHeight, 0,
NULL);
}
void
XFE_ViewDashBDlg::attachView()
{
// subclass create the view area
XP_ASSERT(m_aboveButtonArea);
XtVaSetValues(m_aboveButtonArea,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, 3,
XmNrightAttachment, XmATTACH_FORM,
XmNrightOffset, 3,
XmNtopAttachment, XmATTACH_FORM,
XmNtopOffset, 3,
XmNbottomAttachment, XmATTACH_WIDGET,
XmNbottomWidget, m_buttonArea,
NULL);
XtManageChild(m_buttonArea);
m_dashboard->show();
}
XFE_ViewDashBDlg::~XFE_ViewDashBDlg()
{
#if 0
/* Bug 140476: core dump in LDAP search
* dashboard shall not be destroyed here
*/
if (m_dashboard) {
Widget w = m_dashboard->getBaseWidget();
if (w && XfeIsAlive(w))
XtDestroyWidget(w);
m_dashboard = 0;
}/* if */
#endif
}
Widget
XFE_ViewDashBDlg::createButtonArea(Widget parent,
Boolean ok,
Boolean cancel,
Boolean help,
Boolean /*apply*/)
{
Widget msgb;
Widget button;
msgb = XmCreateMessageBox(parent, "messagebox", NULL, 0);
/* We have to do this explicitly because of AIX versions come
with these buttons by default */
fe_UnmanageChild_safe(XmMessageBoxGetChild(msgb, XmDIALOG_SEPARATOR));
if (!ok)
fe_UnmanageChild_safe(XmMessageBoxGetChild(msgb, XmDIALOG_OK_BUTTON));
else
{
m_okBtn = XmMessageBoxGetChild(msgb, XmDIALOG_OK_BUTTON);
if (m_okBtn)
{
XtManageChild(m_okBtn);
XtAddCallback(msgb, XmNokCallback, ok_cb, this);
}
}
if (!cancel)
fe_UnmanageChild_safe(XmMessageBoxGetChild(msgb, XmDIALOG_CANCEL_BUTTON));
else
{
button = XmMessageBoxGetChild(msgb, XmDIALOG_CANCEL_BUTTON);
if (button)
{
XtManageChild(button);
XtAddCallback(msgb, XmNcancelCallback, cancel_cb, this);
}
}
if (!help)
fe_UnmanageChild_safe(XmMessageBoxGetChild(msgb, XmDIALOG_HELP_BUTTON));
else
{
button = XmMessageBoxGetChild(msgb, XmDIALOG_HELP_BUTTON);
if (button)
{
XtManageChild(button);
XtAddCallback(msgb, XmNhelpCallback, help_cb, this);
}
}
return msgb;
}
Widget
XFE_ViewDashBDlg::create_chrome_widget(Widget parent,
char *name,
Boolean /* ok */,
Boolean /* cancel */,
Boolean /* help */,
Boolean /* apply */,
Boolean /* separator */,
Boolean modal)
{
Visual *v = 0;
Colormap cmap = 0;
Cardinal depth = 0;
Arg av[20];
int ac;
Widget chrome;
XtVaGetValues (parent,
XtNvisual, &v,
XtNcolormap, &cmap,
XtNdepth, &depth,
0);
ac = 0;
XtSetArg (av[ac], XmNvisual, v); ac++;
XtSetArg (av[ac], XmNdepth, depth); ac++;
XtSetArg (av[ac], XmNcolormap, cmap); ac++;
XtSetArg (av[ac], XmNallowShellResize, TRUE); ac++;
XtSetArg (av[ac], XmNtransientFor, parent); ac++;
if (modal) {
XtSetArg (av[ac], XmNdialogStyle, XmDIALOG_PRIMARY_APPLICATION_MODAL); ac++;
}
XtSetArg (av[ac], XmNdeleteResponse, XmDESTROY); ac++;
XtSetArg (av[ac], XmNautoUnmanage, False); ac++;
chrome = XmCreateFormDialog(parent, name, av, ac);
return chrome;
}