/* w4a.c menu another way, different calls */ /* 2/10/08 JSS fix for RedHat change to Motif/Lestif */ #define XMSTRINGDEFINES 1 #include /* to fix XtAddCallback failure */ #include #include #include #include #include #include #include /* widgets indented according to heirarchy */ /* underscore b, "_b" are visible buttons that can be pushed */ Widget toplevel; Widget main_window; Widget menu_bar; Widget file_pulldown, file_b; Widget new_b, open_b, print_b, quit_b; Widget enter_pulldown, enter_b; Widget easy_b, complete_b; Arg args[10]; /* ArgList for widgets, cnt is number of args*/ Cardinal cnt; main(int argc, char *argv[]) { /* callback functions */ void DoNew(); void DoOpen(); void DoPrint(); void DoQuit(); void DoEasy(); void DoComplete(); cnt = 0; toplevel = XtInitialize(argv[0], "Menu_Draw", NULL, 0, &argc, argv); cnt = 0; XtSetArg(args[cnt], XmNresizePolicy, XmRESIZE_GROW); cnt++; XtSetArg(args[cnt], XmNwidth, 200); cnt++; XtSetArg(args[cnt], XmNheight, 100); cnt++; main_window = XmCreateMainWindow(toplevel, "Main", args, cnt); XtManageChild(main_window); cnt = 0; menu_bar = XmCreateMenuBar(main_window, "Menu", args, cnt); XtManageChild(menu_bar); cnt = 0; file_pulldown = XmCreatePulldownMenu(menu_bar, "File_P", args, cnt); XtSetArg(args[cnt],XmNsubMenuId,file_pulldown); cnt++; file_b = XmCreateCascadeButton(menu_bar, "File", args, cnt); XtManageChild(file_b); new_b = XtCreateManagedWidget("New", xmCascadeButtonWidgetClass, file_pulldown, NULL, 0); XtAddCallback(new_b, XmNactivateCallback, DoNew, 0); open_b = XtCreateManagedWidget("Open", xmCascadeButtonWidgetClass, file_pulldown, NULL, 0); XtAddCallback(open_b, XmNactivateCallback, DoOpen, 0); print_b = XtCreateManagedWidget("Print", xmCascadeButtonWidgetClass, file_pulldown, NULL, 0); XtAddCallback(print_b, XmNactivateCallback, DoPrint, 0); quit_b = XtCreateManagedWidget("Quit", xmCascadeButtonWidgetClass, file_pulldown, NULL, 0); XtAddCallback(quit_b, XmNactivateCallback, DoQuit, 0); cnt = 0; enter_pulldown = XmCreatePulldownMenu(menu_bar, "Enter_P", args, cnt); XtSetArg(args[cnt],XmNsubMenuId,enter_pulldown); cnt++; enter_b = XmCreateCascadeButton(menu_bar, "Enter", args, cnt); XtManageChild(enter_b); easy_b = XtCreateManagedWidget("Easy", xmCascadeButtonWidgetClass, enter_pulldown, NULL, 0); XtAddCallback(easy_b, XmNactivateCallback, DoEasy, 0); complete_b = XtCreateManagedWidget("Complete", xmCascadeButtonWidgetClass, enter_pulldown, NULL, 0); XtAddCallback(complete_b, XmNactivateCallback, DoComplete, 0); XtRealizeWidget(toplevel); XtMainLoop(); } void DoNew(Widget w, int flag, XmAnyCallbackStruct *call_data) { printf("DoNew \n"); } void DoOpen(Widget w, int flag, XmAnyCallbackStruct *call_data) { printf("DoOpen \n"); } void DoPrint(Widget w, int flag, XmAnyCallbackStruct *call_data) { printf("DoPrint \n"); } void DoQuit(Widget w, int flag, XmAnyCallbackStruct *call_data) { exit(0); /* no saving updates, should warn with a dialog box */ /* ignore stupid compiler error message */ } void DoEasy(Widget w, int flag, XmAnyCallbackStruct *call_data) { printf("DoEasy \n"); } void DoComplete(Widget w, int flag, XmAnyCallbackStruct *call_data) { printf("DoComplete \n"); }