/* Written by Paula Ferguson.
* Copyright 1994, O'Reilly & Associates, Inc.
* Permission to use, copy, and modify this program without
* restriction is hereby granted, as long as this copyright
* notice appears in each copy of the program source code.
* This program is freely distributable without licensing fees and
* is provided without guarantee or warrantee expressed or implied.
* This program is -not- in the public domain.
*/
/* question.c -- create a QuestionDialog with four action buttons
*/
#include <Xm/MessageB.h>
#include <Xm/PushB.h>
main(argc, argv)
int argc;
char *argv[];
{
XtAppContext app;
Widget toplevel, pb;
extern void pushed();
toplevel = XtVaAppInitialize (&app, "Demos", NULL, 0,
&argc, argv, NULL, NULL);
pb = XtVaCreateManagedWidget ("Button",
xmPushButtonWidgetClass, toplevel, NULL);
XtAddCallback (pb, XmNactivateCallback, pushed, NULL);
XtRealizeWidget (toplevel);
XtAppMainLoop (app);
}
void
pushed(w, client_data, call_data)
Widget w;
XtPointer client_data;
XtPointer call_data;
{
Widget dialog, no_button;
extern void dlg_callback();
Arg args[5];
int n = 0;
XmString m = XmStringCreateLocalized
("Do you want to update your changes?");
XmString yes = XmStringCreateLocalized ("Yes");
XmString no = XmStringCreateLocalized ("No");
XtSetArg (args[n], XmNautoUnmanage, False); n++;
XtSetArg (args[n], XmNmessageString, m); n++;
XtSetArg (args[n], XmNokLabelString, yes); n++;
dialog = XmCreateQuestionDialog (w, "notice", args, n);
XtAddCallback (dialog, XmNokCallback, dlg_callback, NULL);
XtAddCallback (dialog, XmNcancelCallback, dlg_callback, NULL);
XtAddCallback (dialog, XmNhelpCallback, dlg_callback, NULL);
XmStringFree (m);
XmStringFree (yes);
no_button = XtVaCreateManagedWidget ("no",
xmPushButtonWidgetClass, dialog,
XmNlabelString, no,
NULL);
XtAddCallback (no_button, XmNactivateCallback, dlg_callback, NULL);
XtManageChild (dialog);
XtPopup (XtParent (dialog), XtGrabNone);
}
void
dlg_callback(w, client_data, call_data)
Widget w;
XtPointer client_data;
XtPointer call_data;
{
XmAnyCallbackStruct *cbs = (XmAnyCallbackStruct *) call_data;
switch (cbs->reason) {
case XmCR_OK :
case XmCR_CANCEL :
XtPopdown (XtParent (w));
break;
case XmCR_ACTIVATE :
XtPopdown (XtParent (XtParent (w)));
break;
case XmCR_HELP :
puts ("Help selected");
break;
}
}