/*
 * Copyright 1989, 1992 O'Reilly and Associates, Inc.
 * See ../Copyright for complete rights and liability information.
 */


/* 
 *  xmenu3.c - pulldown menu invoked with MenuButton widget
 */

/*
 *  So that we can use fprintf:
 */
#include <stdio.h>

/* 
 * Standard Toolkit include files:
 */
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>

#include <X11/Shell.h>

/*
 * Public include files for widgets used in this file.
 */
#include <X11/Xaw/Command.h>
#include <X11/Xaw/MenuButton.h>
#include <X11/Xaw/Box.h>
#include <X11/Xaw/Label.h>

Widget pshell;

/*
 * quit button callback function
 */
/* ARGSUSED */
void Quit(w, client_data, call_data)
Widget w;
XtPointer client_data, call_data;
{ 
    exit(0); 
}

/*
 * menu pane button callback function
 */
/* ARGSUSED */
void PaneChosen(w, client_data, call_data)
Widget w;
XtPointer client_data;  /* cast to pane_number */
XtPointer call_data;    /* unused */
{ 
    int pane_number = (int) client_data;
    printf("Pane %d chosen.\n", pane_number);
    /* popdown the parent of the parent (pshell) */
    XtPopdown(pshell);
}

main(argc, argv)
int argc;
char **argv;
{
    XtAppContext app_context;
    Widget topLevel, box, pressme, quit, menulabel, menubox, menupane[10];
    int i;
    /*String buf[50];*/
    char buf[50];

    XtSetLanguageProc(NULL, (XtLanguageProc)NULL, NULL);

    topLevel = XtVaAppInitialize(
        &app_context,       /* Application context */
        "XMenu3",   	    /* application class name */
        NULL, 0,            /* command line option list */
        &argc, argv,        /* command line args */
        NULL,               /* for missing app-defaults file */
        NULL);              /* terminate varargs list */

    box = XtCreateManagedWidget(
        "box",  	/* widget name */
        boxWidgetClass, /* widget class */
        topLevel,   	/* parent widget*/
        NULL,   	/* argument list*/
        0   		/* arglist size */
        );

    quit = XtCreateManagedWidget(
        "quit", 		/* widget name */
        commandWidgetClass, 	/* widget class */
        box,    		/* parent widget*/
        NULL,   		/* argument list*/
        0   			/* arglist size */
        );

    pressme = XtVaCreateManagedWidget(
        "pressme",  		/* widget name   */
        menuButtonWidgetClass,  /* widget class */
        box,    		/* parent widget*/
        XtNmenuName, "pshell",
        NULL);

    pshell = XtCreatePopupShell(
        "pshell",		/* widget name */
        transientShellWidgetClass, /* widget class */
        pressme,		/* parent widget */
        NULL,			/* argument list */
        0			/* arglist size */
        );

    menubox = XtCreateManagedWidget(
        "menubox",              /* widget name   */
        boxWidgetClass,         /* widget class */
        pshell,                 /* parent widget*/
        NULL,                   /* argument list*/
        0           		/* arglist size */
    );
    
    menulabel = XtCreateManagedWidget(
        "menulabel",            /* widget name   */
        labelWidgetClass,       /* widget class */
        menubox,                /* parent widget*/
        NULL,                   /* argument list*/
        0           		/* arglist size */
        );

    for (i = 0; i < 10; i++) {
      sprintf(buf, "menupane%d", i);
      menupane[i] = XtCreateManagedWidget(buf,   /* widget name   */
                    commandWidgetClass, menubox, NULL, 0);

      XtAddCallback(menupane[i], XtNcallback, PaneChosen, i);
    }

    XtAddCallback(quit, XtNcallback, Quit, NULL);

    XtRealizeWidget(topLevel);

    XtAppMainLoop(app_context);
}