/* w5a.c demonstrate dialog boxes and data input, App and Va style */ /* and enumeration type, and Widgets local to main function */ /* 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 /* w5.h has all global definitions. The GLOBAL is stripped here. */ #define W5_DEFS /* Every where else, just include. get extern */ #include "w5.h" /* external definitions from w5.h have GLOBAL stripped */ enum Choice { OK, CANCEL, HELP }; Arg args[10]; /* ArgList for widgets, cnt is number of args*/ Cardinal cnt; int main(int argc, char *argv[]) { /* widgets indented according to heirarchy */ /* underscore b, "_b" are visible buttons that can be pushed */ /* underscore dia, "_dia" are dialog box widgets */ Widget toplevel; Widget main_window; Widget menu_bar; Widget value_pulldown, value_b; Widget value_num_b, value_view_ang_b, value_name_b, value_apply_b, value_quit_b, value_num2_b; Widget value_num_dia, value_view_ang_dia, value_name_dia, value_num2_dia; /* callback functions */ void DoValue_num(); void Dovalue_num_dia(); void Dovalue_num2(); void Dovalue_num2_dia(); void DoValue_view_ang(); void Dovalue_view_ang_dia(); void DoValue_name(); void DoValue_name_dia(); void DoValue_apply(); void DoQuit(); XtAppContext app; toplevel = XtVaAppInitialize(&app, "W5", NULL, 0, &argc, argv, NULL, NULL); main_window = XtVaCreateManagedWidget("Main", xmMainWindowWidgetClass, toplevel, XmNresizePolicy, XmRESIZE_GROW, XmNwidth, 300, XmNheight, 300, NULL ); cnt = 0; menu_bar = XmCreateMenuBar(main_window, "Menu", args, cnt); XtManageChild(menu_bar); cnt = 0; value_pulldown = XmCreatePulldownMenu(menu_bar, "Value_P", args, cnt); XtSetArg(args[cnt],XmNsubMenuId,value_pulldown); cnt++; value_b = XmCreateCascadeButton(menu_bar, "Set Values", args, cnt); XtManageChild(value_b); value_num_b = XtCreateManagedWidget("Number", xmCascadeButtonWidgetClass, value_pulldown, NULL, 0); XtAddCallback(value_num_b, XmNactivateCallback, DoValue_num, &value_num_dia); cnt = 0; XtSetArg(args[cnt], XmNselectionLabelString, XmStringCreateLtoR ("Give me a number from one to ten. ", XmSTRING_DEFAULT_CHARSET)); cnt++; value_num_dia = XmCreatePromptDialog(toplevel, "dialog", args, cnt); XtAddCallback (value_num_dia, XmNokCallback, Dovalue_num_dia, (XtPointer)OK); XtAddCallback (value_num_dia, XmNcancelCallback, Dovalue_num_dia, (XtPointer)CANCEL); XtAddCallback (value_num_dia, XmNhelpCallback, Dovalue_num_dia, (XtPointer)HELP); value_view_ang_b = XtCreateManagedWidget("View Angle", xmCascadeButtonWidgetClass, value_pulldown, NULL, 0); XtAddCallback(value_view_ang_b, XmNactivateCallback, DoValue_view_ang, &value_view_ang_dia); cnt = 0; XtSetArg(args[cnt], XmNselectionLabelString, XmStringCreateLtoR ("Give X Y Z of viewer (blank separated float). ", XmSTRING_DEFAULT_CHARSET)); cnt++; value_view_ang_dia = XmCreatePromptDialog(toplevel, "dialog", args, cnt); XtAddCallback (value_view_ang_dia, XmNokCallback, Dovalue_view_ang_dia, (XtPointer)OK); XtAddCallback (value_view_ang_dia, XmNcancelCallback, Dovalue_view_ang_dia, (XtPointer)CANCEL); XtUnmanageChild(XmSelectionBoxGetChild(value_view_ang_dia, XmDIALOG_HELP_BUTTON)); value_name_b = XtCreateManagedWidget("Name", xmCascadeButtonWidgetClass, value_pulldown, NULL, 0); XtAddCallback(value_name_b, XmNactivateCallback, DoValue_name, &value_name_dia); cnt = 0; XtSetArg(args[cnt], XmNselectionLabelString, XmStringCreateLtoR ("What is your name? ", XmSTRING_DEFAULT_CHARSET)); cnt++; value_name_dia = XmCreatePromptDialog(toplevel, "dialog", args, cnt); XtAddCallback (value_name_dia, XmNokCallback, DoValue_name_dia, (XtPointer)OK); XtAddCallback (value_name_dia, XmNcancelCallback, DoValue_name_dia, (XtPointer)CANCEL); XtUnmanageChild(XmSelectionBoxGetChild(value_name_dia, XmDIALOG_HELP_BUTTON)); value_apply_b = XtCreateManagedWidget("Apply", xmCascadeButtonWidgetClass, value_pulldown, NULL, 0); XtAddCallback(value_apply_b, XmNactivateCallback, DoValue_apply, 0); value_quit_b = XtCreateManagedWidget("Quit", xmCascadeButtonWidgetClass, value_pulldown, NULL, 0); XtAddCallback(value_quit_b, XmNactivateCallback, DoQuit, 0); XtRealizeWidget(toplevel); XtAppMainLoop(app); } /* this callback called when Set Values, Number is chosen from menu */ void DoValue_num(Widget w, Widget *b, /* notice second formal is pointer to a widget */ XmAnyCallbackStruct *call_data) { /* pop dialog box and ask for number 1 to 10 */ XtManageChild(*b); } /* this callback called when OK, CANCEL or HELP pressed on popup dialog */ void Dovalue_num_dia(Widget w, int client_data, XmAnyCallbackStruct *call_data) { char *s; XmSelectionBoxCallbackStruct *selection; int n; switch (client_data) { case OK: selection=(XmSelectionBoxCallbackStruct *) call_data; XmStringGetLtoR(selection->value, XmSTRING_DEFAULT_CHARSET, &s); printf("user entered=%s \n", s); sscanf(s,"%d", &n); /* error check and tell to enter again */ printf("number %d \n", n); XtFree(s); break; case HELP: printf("That is 1, 2, 3, ... 10 ! \n"); break; /* should pop up a help information box */ case CANCEL: break; /* not really needed in switch, does nothing */ } } /* end Dovalue_num_dia */ void DoValue_view_ang(Widget w, Widget *b, XmAnyCallbackStruct *call_data) { /* pop dialog box and ask for number 1 to 10 */ XtManageChild(*b); } void Dovalue_view_ang_dia(Widget w, enum Choice client_data, XmAnyCallbackStruct *call_data) { char *s; XmSelectionBoxCallbackStruct *selection; if(client_data==OK) { selection=(XmSelectionBoxCallbackStruct *) call_data; XmStringGetLtoR(selection->value, XmSTRING_DEFAULT_CHARSET, &s); printf("user view angles=%s \n", s); sscanf(s,"%f %f %f", &view_pitch, &view_roll, &view_yaw ); /* error check and tell to enter again */ printf("view roll, pitch, yaw %f %f %f \n", view_pitch, view_roll, view_yaw ); XtFree(s); } } /* end Dovalue_view_ang_dia */ void DoValue_name(Widget w, Widget *b, XmAnyCallbackStruct *call_data) { /* pop dialog box and ask for name */ XtManageChild(*b); } void DoValue_name_dia(Widget w, enum Choice client_data, XmAnyCallbackStruct *call_data) { char *s; XmSelectionBoxCallbackStruct *selection; if(client_data==OK) { selection=(XmSelectionBoxCallbackStruct *) call_data; XmStringGetLtoR(selection->value, XmSTRING_DEFAULT_CHARSET, &s); printf("user entered name =%s \n", s); /* save the name somewhere */ XtFree(s); } } /* end DoValue_name_dia */ void DoValue_apply(Widget w, int flag, XmAnyCallbackStruct *call_data) { printf("DoValue_apply \n"); /* really do something with inputs */ } void DoQuit(Widget w, int flag, XmAnyCallbackStruct *call_data) { exit(0); }