|
|
DataMuseum.dkPresents historical artifacts from the history of: Regnecentalen RC-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Regnecentalen RC-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T U x
Length: 5484 (0x156c)
Types: TextFile
Notes: UNIX file
Names: »xmmenushel.c«
└─⟦a0a611847⟧ Bits:30004636/disk1.imd INTERACTIVE Motif Environment Development System
└─⟦a0a611847⟧ UNIX Filesystem
└─⟦this⟧ »xt/new/usr/lib/X11/examples/xmsamplers/xmmenushel.c«
#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();
}