#ifndef lint
static char *rcsid = "$Header: menu.c,v 1.7 90/10/25 13:50:01 klee Exp Locker: klee $";
#endif lint
/*
 *			  COPYRIGHT 1990
 *		   DIGITAL EQUIPMENT CORPORATION
 *		       MAYNARD, MASSACHUSETTS
 *			ALL RIGHTS RESERVED.
 *
 * THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND
 * SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
 * DIGITAL MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE FOR
 * ANY PURPOSE.  IT IS SUPPLIED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
 *
 * IF THE SOFTWARE IS MODIFIED IN A MANNER CREATING DERIVATIVE COPYRIGHT RIGHTS,
 * APPROPRIATE LEGENDS MAY BE PLACED ON THE DERIVATIVE WORK IN ADDITION TO THAT
 * SET FORTH ABOVE.
 *
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose and without fee is hereby granted, provided
 * that the above copyright notice appear in all copies and that both that
 * copyright notice and this permission notice appear in supporting documenta-
 * tion, and that the name of Digital Equipment Corporation not be used in
 * advertising or publicity pertaining to distribution of the software without
 * specific, written prior permission.
 */

#include "xglobe.h"

extern Cardinal n;
extern Arg wargs[];

Widget createMenuBar(parent)
    Widget parent;
{
    Widget menuBar, actionsMenu, helpMenu, customizeMenu, widget;
    extern void menuCB();
#ifndef NO_DXM
    extern void helpCB();
#endif NO_DXM

    n = 0;
    menuBar = XmCreateMenuBar(parent, "menuBar", wargs, n);
    XtManageChild(menuBar);

    /* actions pull down menu */
    actionsMenu = XmCreatePulldownMenu(menuBar, "actionsMenu", wargs, 0);
    widget = XtCreateManagedWidget("start", xmPushButtonWidgetClass,
	actionsMenu, wargs, 0);
    XtAddCallback(widget, XmNactivateCallback, menuCB, START_CB);
    widget = XtCreateManagedWidget("stop", xmPushButtonWidgetClass,
	actionsMenu, wargs, 0);
    XtAddCallback(widget, XmNactivateCallback, menuCB, STOP_CB);
    widget = XtCreateManagedWidget("exit", xmPushButtonWidgetClass,
	actionsMenu, wargs, 0);
    XtAddCallback(widget, XmNactivateCallback, menuCB, EXIT_CB);

    n = 0;
    XtSetArg(wargs[n], XmNsubMenuId, actionsMenu); n++;
    XtCreateManagedWidget("actionsButton", xmCascadeButtonWidgetClass,
	menuBar, wargs, n);

#ifndef NO_DXM
    /* help pull down menu */
    helpMenu = XmCreatePulldownMenu(menuBar, "helpMenu", wargs, 0);
    widget = XtCreateManagedWidget("about", xmPushButtonWidgetClass,
	helpMenu, wargs, 0);
    XtAddCallback(widget, XmNactivateCallback, helpCB, ABOUT_CB);
    widget = XtCreateManagedWidget("overview", xmPushButtonWidgetClass,
	helpMenu, wargs, 0);
    XtAddCallback(widget, XmNactivateCallback, helpCB, OVERVIEW_CB);

    n = 0;
    XtSetArg(wargs[n], XmNsubMenuId, helpMenu); n++;
    widget = XtCreateManagedWidget("helpButton", xmCascadeButtonWidgetClass,
	menuBar, wargs, n);
    n = 0;
    XtSetArg(wargs[n], XmNmenuHelpWidget, widget); n++;
    XtSetValues(menuBar, wargs, n);
#endif NO_DXM

    return(menuBar);
}

#ifndef NO_DXM
static void helpCB(widget, clientData, callData)
    Widget widget;
    caddr_t clientData;
    caddr_t callData;
{
    extern void displayHelp();

    switch((int)clientData) {
	case ABOUT_CB:
	    displayHelp("About");
	    break;
	case OVERVIEW_CB:
	    displayHelp("Overview");
	    break;
	default:
	    break;
    }
}

static void displayHelp(latin_string)
    char *latin_string;
{
    static Widget helpDialog = NULL;
    XmString compound_string;
    compound_string = XmStringCreate(latin_string, XmSTRING_DEFAULT_CHARSET);

    if (helpDialog == NULL) {
	n = 0;
	helpDialog = DXmCreateHelp(topLevel, "help", wargs, n);
    }

    n = 0;
    XtSetArg(wargs[n], DXmNfirstTopic, compound_string); n++;
    XtSetValues(helpDialog, wargs, n);
    XtManageChild(helpDialog);
}
#endif NO_DXM

static void
menuCB(widget, clientData, callData)
    Widget widget;
    caddr_t clientData;
    caddr_t callData;
{
    extern void globeStart(), globeStop();

    switch((int)clientData) {
	case START_CB:
	    globeStart();
	    break;
	case STOP_CB:
	    globeStop();
	    break;
	case EXIT_CB:
	    XtDestroyWidget(topLevel);
	    exit(1);
	default:
	    break;
    }
}
