DataMuseum.dk

Presents historical artifacts from the history of:

Regnecentalen RC-900

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Regnecentalen RC-900

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦b69c89f06⟧ TextFile

    Length: 5484 (0x156c)
    Types: TextFile
    Notes: UNIX file
    Names: »xmmenushel.c«

Derivation

└─⟦a0a611847⟧ Bits:30004636/disk1.imd INTERACTIVE Motif Environment Development System
└─⟦a0a611847⟧ UNIX Filesystem
    └─⟦this⟧ »xt/new/usr/lib/X11/examples/xmsamplers/xmmenushel.c« 

TextFile

#ifdef REV_INFO
#ifndef lint
static char SCCSID[] = "OSF/Motif: @(#)xmmenushel.c	1.1 - 89/08/30 - 12:12:39";
#endif /* lint */
#endif /* REV_INFO */
/* Popup Menu and Submenus created with MenuShells */

#include <Xm/Xm.h>
#include <Xm/MenuShell.h>
#include <Xm/PushBG.h>
#include <Xm/CascadeBG.h>
#include <Xm/RowColumn.h>


/*********** Callback for the Pushbuttons ***********************/

void ButtonCB (w, client_data, call_data) 
Widget	w;		/*  widget id		*/
caddr_t	client_data;	/*  data from application   */
caddr_t	call_data;	/*  data from widget class  */
{
   /*  print message and terminate program  */
   printf ("Button %s selected.\n", client_data);
	
}

/************** Event Handler for Popup Menu ************************/

PostIt (w, popup, event)
Widget w;
Widget popup;
XButtonEvent * event;
{
   if (event->button != Button2)
	return;
   XmMenuPosition(popup, event);
   XtManageChild(popup);
}


/***********************Main Logic for Program ********************/


void main (argc, argv)
int argc;
char **argv;
{
   Widget toplevel, rc, buttons[2];
   Widget popupshell, mshell1, mshell2, mshell3;
   Widget popup, submenu1, submenu2, submenu3;
   Widget popupBtn[2], sub1Btn[3], sub2Btn[2], sub3Btn[2];
   Arg args[5];
   XmString string;

/* Initialize toolkit */
   
   toplevel = XtInitialize (argv[0], "PopupMenu", NULL, 0, &argc, argv);

/* Create RowColumn in toplevel with two pushbuttons */

   XtSetArg(args[0], XmNwidth, 150);
   XtSetArg(args[1], XmNheight, 50);
   XtSetArg(args[2], XmNresizeWidth, False);
   XtSetArg(args[3], XmNresizeHeight, False);
   XtSetArg(args[4], XmNadjustLast, False);
   rc = XmCreateRowColumn(toplevel, "rc", args, 5);  
   XtManageChild(rc);

   buttons[0] = XmCreatePushButtonGadget(rc, "button1", NULL, 0);
   XtAddCallback(buttons[0], XmNactivateCallback, ButtonCB, "1");

   buttons[1] = XmCreatePushButtonGadget(rc, "button2", NULL, 0);
   XtAddCallback(buttons[1], XmNactivateCallback, ButtonCB, "2");
   XtManageChildren(buttons, 2);

/* Create MenuShell for a Popup MenuPane */

   XtSetArg(args[0], XmNheight, 100);
   XtSetArg(args[1], XmNwidth, 100); 
   popupshell = XmCreateMenuShell(rc, "popupshell", args, 2);

/* Create RowColumn Widget configured as Popup MenuPane */

   XtSetArg(args[0], XmNrowColumnType, XmMENU_POPUP);
   popup = XmCreateRowColumn (popupshell, "popup", args, 1);
   XtAddEventHandler(rc, ButtonPressMask, False, PostIt, popup);

/* Create MenuShells and Pulldown MenuPanes for two submenus */

   XtSetArg(args[0], XmNheight, 100);
   XtSetArg(args[1], XmNwidth, 100);
   mshell1 = XmCreateMenuShell (popupshell, "mshell1", args, 2);

   XtSetArg(args[0], XmNrowColumnType, XmMENU_PULLDOWN);
   submenu1 = XmCreateRowColumn (mshell1, "submenu1", args, 1);

   XtSetArg(args[0], XmNheight, 100);
   XtSetArg(args[1], XmNwidth, 100); 
   mshell2 = XmCreateMenuShell (popupshell, "mshell2", args, 2);

   XtSetArg(args[0], XmNrowColumnType, XmMENU_PULLDOWN);
   submenu2 = XmCreateRowColumn (mshell2, "submenu2", args, 1);

/* Create two Cascade Buttons in the Popup MenuPane */

   string = XmStringCreate("First Submenu", XmSTRING_DEFAULT_CHARSET);
   XtSetArg(args[0], XmNlabelString, string);
   XtSetArg(args[1], XmNsubMenuId, submenu1);
   popupBtn[0] = XmCreateCascadeButtonGadget(popup, "cbutton1", args, 2);
   XmStringFree(string);

   string = XmStringCreate("Second Submenu", XmSTRING_DEFAULT_CHARSET);
   XtSetArg(args[0], XmNlabelString, string);
   XtSetArg(args[1], XmNsubMenuId, submenu2); 
   popupBtn[1] = XmCreateCascadeButtonGadget(popup, "cbutton2", args, 2);
   XmStringFree(string);

   XtManageChildren (popupBtn, 2);

/* Create pushbuttons in MenuPanes submenu1 and submenu2 */

   sub1Btn[0] = XmCreatePushButtonGadget(submenu1, "button1a", NULL, 0);
   XtAddCallback(sub1Btn[0], XmNactivateCallback, ButtonCB, "1a");

   sub1Btn[1] = XmCreatePushButtonGadget(submenu1, "button1b", NULL, 0);
   XtAddCallback(sub1Btn[1], XmNactivateCallback, ButtonCB, "1b");

   sub2Btn[0] = XmCreatePushButtonGadget(submenu2, "button2a", NULL, 0);
   XtAddCallback(sub2Btn[0], XmNactivateCallback, ButtonCB, "2a");

   sub2Btn[1] = XmCreatePushButtonGadget(submenu2, "button2b", NULL, 0);
   XtAddCallback(sub2Btn[1], XmNactivateCallback, ButtonCB, "2b");
   XtManageChildren (sub2Btn, 2);


/* Create a MenuShell for the submenu of submenu1 */

   XtSetArg(args[0], XmNheight, 100);
   XtSetArg(args[1], XmNwidth, 100);
   mshell3 = XmCreateMenuShell (mshell1, "mshell3", args, 2);

/* Create the MenuPane for the submenu of submenu1 */

   XtSetArg(args[0], XmNrowColumnType, XmMENU_PULLDOWN);
   submenu3 = XmCreateRowColumn (mshell3, "submenu3", args, 1);

/* Create the Cascade Button in submenu1 for accessing submenu3 */

   string = XmStringCreate("To Third Submenu", XmSTRING_DEFAULT_CHARSET);
   XtSetArg(args[0], XmNlabelString, string);
   XtSetArg(args[1], XmNsubMenuId, submenu3);
   sub1Btn[2] = XmCreateCascadeButtonGadget(submenu1, "cbutton3", args, 2);
   XmStringFree(string);

   XtManageChildren(sub1Btn, 3);

/* Create pushbuttons in submenu */

   sub3Btn[0] = XmCreatePushButtonGadget(submenu3, "button3a", NULL, 0);
   XtAddCallback(sub3Btn[0], XmNactivateCallback, ButtonCB, "3a");

   sub3Btn[1] = XmCreatePushButtonGadget(submenu3, "button3b", NULL, 0);
   XtAddCallback(sub3Btn[1], XmNactivateCallback, ButtonCB, "3b");
   XtManageChildren (sub3Btn, 2);

/* Get and dispatch events */

   XtRealizeWidget(toplevel);

   XtMainLoop();
}