/*******************************************************************
*
* menu1
*
* This simple program shows how menus widgets are used,m
* this example program uses a menu bar for the menus. This
* is the easiest way to set up an Athena menu.
*
*****************************************************************/
#include < X11/StringDefs.h >
#include < X11/Intrinsic.h >
#include < X11/Xaw/Form.h >
#include < X11/Xaw/SimpleMenu.h >
#include < X11/Xaw/SmeBSB.h >
#include < X11/Xaw/MenuButton.h >
#include < X11/Xaw/SmeLine.h >
void quit_callback(w, client, call)
Widget w;
XtPointer client;
XtPointer call; {
exit(0);
}
void print_string(w, client, call)
Widget w;
char *client;
XtPointer call; {
printf("%s\n",client);
}
main(argc,argv)
int argc;
char **argv; {
Widget toplevel;
Widget form;
Widget quit;
Widget button1;
Widget button2;
Widget button3;
Widget menu1;
Widget menu2;
Widget menu3;
Widget line1;
Widget line2;
Widget entry;
int n;
Arg wargs[10];
toplevel = XtInitialize(argv[0],"menu",NULL,0,
&argc,argv);
form = XtCreateManagedWidget("form", formWidgetClass,
toplevel, NULL, 0);
button1 = XtCreateManagedWidget("button1", menuButtonWidgetClass,
form, NULL, 0);
n = 0;
XtSetArg(wargs[n], XtNmenuName, "menu1"); n++;
XtSetValues(button1, wargs, n);
button2 = XtCreateManagedWidget("button2", menuButtonWidgetClass,
form, NULL, 0);
n = 0;
XtSetArg(wargs[n], XtNfromHoriz, button1); n++;
XtSetArg(wargs[n], XtNmenuName, "menu2"); n++;
XtSetValues(button2, wargs, n);
button3 = XtCreateManagedWidget("button3", menuButtonWidgetClass,
form, NULL, 0);
n = 0;
XtSetArg(wargs[n], XtNfromHoriz, button2); n++;
XtSetArg(wargs[n], XtNmenuName, "menu3"); n++;
XtSetValues(button3, wargs, n);
/*
* create the first pull down menu
*/
menu1 = XtCreatePopupShell("menu1", simpleMenuWidgetClass,
button1, NULL, 0);
entry = XtCreateManagedWidget("one", smeBSBObjectClass,
menu1, NULL, 0);
XtAddCallback(entry, XtNcallback, print_string, "one");
entry = XtCreateManagedWidget("two", smeBSBObjectClass,
menu1, NULL, 0);
XtAddCallback(entry, XtNcallback, print_string, "two");
entry = XtCreateManagedWidget("three", smeBSBObjectClass,
menu1, NULL, 0);
XtAddCallback(entry, XtNcallback, print_string, "three");
line1 = XtCreateManagedWidget("line1", smeLineObjectClass,
menu1, NULL, 0);
quit = XtCreateManagedWidget("quit", smeBSBObjectClass,
menu1, NULL, 0);
XtAddCallback(quit, XtNcallback, quit_callback, NULL);
/*
* create the second pull down menu
*/
n = 0;
XtSetArg(wargs[n], XtNlabel, "menu label"); n++;
menu2 = XtCreatePopupShell("menu2", simpleMenuWidgetClass,
button2, wargs, n);
line2 = XtCreateManagedWidget("line2", smeLineObjectClass,
menu2, NULL, 0);
quit = XtCreateManagedWidget("quit", smeBSBObjectClass,
menu2, NULL, 0);
XtAddCallback(quit, XtNcallback, quit_callback, NULL);
/*
* create the third pull down menu
*/
menu3 = XtCreatePopupShell("menu3", simpleMenuWidgetClass,
button3, NULL, 0);
entry = XtCreateManagedWidget("four", smeBSBObjectClass,
menu3, NULL, 0);
XtAddCallback(entry, XtNcallback, print_string, "four");
entry = XtCreateManagedWidget("five", smeBSBObjectClass,
menu3, NULL, 0);
XtAddCallback(entry, XtNcallback, print_string, "five");
entry = XtCreateManagedWidget("six", smeBSBObjectClass,
menu3, NULL, 0);
XtAddCallback(entry, XtNcallback, print_string, "six");
quit = XtCreateManagedWidget("quit", smeBSBObjectClass,
menu3, NULL, 0);
XtAddCallback(quit, XtNcallback, quit_callback, NULL);
XtRealizeWidget(toplevel);
XtMainLoop();
}
highlight(condition) - highlights the widget
unhighlist - turns off the widget highlighting
notify - call all the procedures on the callback list
< EnterWindow > : highlight()
< LeaveWindow > : reset()
< Btn1Down > : set()
< Btn2Down > : notify() unset()
Event Synonym
KeyPress Key, KeyDown
KeyRelease KeyUp
ButtonPress BtnDown
ButtonRelease BtnUp
MotionNotify Motion, PtrMoved, MouseMoved
EnterNotify Enter, EnterWindow
LeaveNotify Leave, LeaveWindow
None
Any
Cntl
Shift
Lock
Meta
Button1
Button2
Button3
Shift ~Cntl < ButtonPress >
! Shift < ButtonPress >
will only occur when the shift key is pressed, and all the other modifier keys are released
< ButtonPress > : action1()
< ButtonPress > 1 : action2()
Cntl < ButtonPress > 1 : action3()
< ButtonPress > : action1()
< ButtonPress > 1 : action2()
Cntl < ButtonPress > 1 : action3()
XtTranslations XtParseTranslationTable(table)
char *table;
char table[] = " < EnterWindow > : highlight()\n\
< LeaveWindow > : reset()\n\
< Btn1Down > : set()\n\
< Btn2Down > : notify() unset()";
XtAugmentTranslations(w, translations)
Widget w;
XtTranslations translations;
XtOverrideTranslations(w, translations)
Widget w;
XtTranslations translations;
XtUninstallTranslations(w)
Widget w;
/*******************************************************************
*
* menu1
*
* This simple program shows how menus widgets are used,m
* this example program uses a menu bar for the menus. This
* is the easiest way to set up an Athena menu.
*
*****************************************************************/
#include < X11/StringDefs.h >
#include < X11/Intrinsic.h >
#include < X11/Xaw/Box.h >
#include < X11/Xaw/SimpleMenu.h >
#include < X11/Xaw/SmeBSB.h >
#include < X11/Xaw/MenuButton.h >
#include < X11/Xaw/SmeLine.h >
#include < X11/X.h >
Widget menu1;
Widget menu2;
Widget menu3;
char translations[] =
"! < Btn1Down > : XawPositionSimpleMenu(menu1) XtMenuPopup(menu1)0 < Btn2Down > : XawPositionSimpleMenu(menu2) XtMenuPopup(menu2)
void quit_callback(w, client, call)
Widget w;
XtPointer client;
XtPointer call; {
exit(0);
}
void print_string(w, client, call)
Widget w;
char *client;
XtPointer call; {
printf("%s\n",client);
}
main(argc,argv)
int argc;
char **argv; {
Widget toplevel;
Widget box;
Widget quit;
Widget line1;
Widget line2;
Widget entry;
int n;
Arg wargs[10];
toplevel = XtInitialize(argv[0],"menu",NULL,0,
&argc,argv);
box = XtCreateManagedWidget("box", boxWidgetClass,
toplevel, NULL, 0);
XawSimpleMenuAddGlobalActions(XtWidgetToApplicationContext(box));
n = 0;
XtSetArg(wargs[n], XtNwidth, 200); n++;
XtSetArg(wargs[n], XtNheight, 200); n++;
XtSetValues(box, wargs, n);
XtOverrideTranslations(box, XtParseTranslationTable(
translations));
/*
* create the first pull down menu
*/
menu1 = XtCreatePopupShell("menu1", simpleMenuWidgetClass,
box, NULL, 0);
entry = XtCreateManagedWidget("one", smeBSBObjectClass,
menu1, NULL, 0);
XtAddCallback(entry, XtNcallback, print_string, "one");
entry = XtCreateManagedWidget("two", smeBSBObjectClass,
menu1, NULL, 0);
XtAddCallback(entry, XtNcallback, print_string, "two");
entry = XtCreateManagedWidget("three", smeBSBObjectClass,
menu1, NULL, 0);
XtAddCallback(entry, XtNcallback, print_string, "three");
line1 = XtCreateManagedWidget("line1", smeLineObjectClass,
menu1, NULL, 0);
quit = XtCreateManagedWidget("quit", smeBSBObjectClass,
menu1, NULL, 0);
XtAddCallback(quit, XtNcallback, quit_callback, NULL);
/*
* create the second pull down menu
*/
n = 0;
XtSetArg(wargs[n], XtNlabel, "menu label"); n++;
menu2 = XtCreatePopupShell("menu2", simpleMenuWidgetClass,
box, wargs, n);
line2 = XtCreateManagedWidget("line2", smeLineObjectClass,
menu2, NULL, 0);
quit = XtCreateManagedWidget("quit", smeBSBObjectClass,
menu2, NULL, 0);
XtAddCallback(quit, XtNcallback, quit_callback, NULL);
/*
* create the third pull down menu
*/
menu3 = XtCreatePopupShell("menu3", simpleMenuWidgetClass,
box, NULL, 0);
entry = XtCreateManagedWidget("four", smeBSBObjectClass,
menu3, NULL, 0);
XtAddCallback(entry, XtNcallback, print_string, "four");
entry = XtCreateManagedWidget("five", smeBSBObjectClass,
menu3, NULL, 0);
XtAddCallback(entry, XtNcallback, print_string, "five");
entry = XtCreateManagedWidget("six", smeBSBObjectClass,
menu3, NULL, 0);
XtAddCallback(entry, XtNcallback, print_string, "six");
quit = XtCreateManagedWidget("quit", smeBSBObjectClass,
menu3, NULL, 0);
XtAddCallback(quit, XtNcallback, quit_callback, NULL);
XtRealizeWidget(toplevel);
XtMainLoop();
}