/* Written by Dan Heller and 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.
*/
/* modal.c -- demonstrate modal dialogs. Display two pushbuttons
* each activating a modal dialog.
*/
#include <Xm/RowColumn.h>
#include <Xm/MessageB.h>
#include <Xm/PushB.h>
/* main() --create a pushbutton whose callback pops up a dialog box */
int main(argc, argv)
int argc;
char *argv[];
{
XtAppContext app;
Widget toplevel, button, rowcolumn;
void pushed();
XtSetLanguageProc (NULL, NULL, NULL);
toplevel = XtVaAppInitialize (&app, "Demos",
NULL, 0, &argc, argv, NULL, NULL);
rowcolumn = XtCreateManagedWidget ("rowcolumn",
xmRowColumnWidgetClass, toplevel, NULL, 0);
button = XtCreateManagedWidget ("Application Modal",
xmPushButtonWidgetClass, rowcolumn, NULL, 0);
XtAddCallback (button, XmNactivateCallback,
pushed, (XtPointer)XmDIALOG_FULL_APPLICATION_MODAL);
button = XtCreateManagedWidget ("System Modal",
xmPushButtonWidgetClass, rowcolumn, NULL, 0);
XtAddCallback (button, XmNactivateCallback, pushed,
(XtPointer)XmDIALOG_SYSTEM_MODAL);
XtRealizeWidget (toplevel);
XtAppMainLoop (app);
}
/* pushed() --the callback routine for the main app's pushbutton.
* Create either a full-application or system modal dialog box.
*/
void
pushed(widget, client_data, call_data)
Widget widget;
XtPointer client_data;
XtPointer call_data;
{
static Widget dialog;
XmString t;
extern void dlg_callback();
unsigned char modality = (unsigned char) client_data;
/* See if we've already created this dialog -- if so,
* we don't need to create it again. Just re-pop it up.
*/
if (!dialog) {
Arg args[5];
int n = 0;
XmString ok = XmStringCreateLocalized ("OK");
XtSetArg(args[n], XmNautoUnmanage, False); n++;
XtSetArg(args[n], XmNcancelLabelString, ok); n++;
dialog = XmCreateInformationDialog (widget, "notice", args, n);
XtAddCallback (dialog, XmNcancelCallback, dlg_callback, NULL);
XtUnmanageChild (
XmMessageBoxGetChild (dialog, XmDIALOG_OK_BUTTON));
XtUnmanageChild (
XmMessageBoxGetChild (dialog, XmDIALOG_HELP_BUTTON));
}
t = XmStringCreateLocalized ("You must reply to this message now!");
XtVaSetValues (dialog,
XmNmessageString, t,
XmNdialogStyle, modality,
NULL);
XmStringFree (t);
XtManageChild (dialog);
XtPopup (XtParent (dialog), XtGrabNone);
}
void
dlg_callback(dialog, client_data, call_data)
Widget dialog;
XtPointer client_data;
XtPointer call_data;
{
XtPopdown (XtParent (dialog));
}