SmartMessageBox Widget
-----------------------------------------------------------------------------
This is the xmSmartMessageBoxWidget.  The basic idea is that I decided
that dialogs should be simpler in Motif programs, ie, you shouldn't have
to unmanage unwanted widgets just to have a dialog.  Plus, the Template
dialog is more voodoo than anything else.  The SmartMessagBox widget
manages whatever you tell it to in 4 different ways: as a label, as
a control widget, as a separator, or as an action widget.  You can
have up to 1 label, up to 1 control, up to 1 separator, and as many action widgets
as you'd like.  This is all handled throught constraint resources.
The basic setup is:
      ------------------------------------
      - Label |                          -
      -           |       Control        -
      -----------|         Area          -
      -           |                      _
      -       separator                  - 
      ------------------------------------
      -            Action                -
      -            Area                  -
      ------------------------------------
Although you don't need to have all of the different areas.
	When you create a child of a SmartMessageBoxWidget, it's
constraint resource XmNchildType defaults to XmCHILD_ACTION, which
means for it to be managed in the action area.  You can change
this resource so that it is managed in any of the 4 fields above.
A basic dialog box would then look like:
    smb = XtCreateManagedWidget("SmartMessageBox", xmSmartMessageBoxWidgetClass,
        toplevel, NULL, 0);
	n = 0;
	XtSetArg(warg[n], XmNchildType, XmCHILD_LABEL); n++;
    XtCreateManagedWidget("Label", xmLabelWidgetClass, smb, warg, n);
	n = 0;
	XtSetArg(warg[n], XmNchildType, XmCHILD_SEPARATOR); n++;
    XtCreateManagedWidget("Separator", xmSeparatorWidgetClass, smb, warg, n);
	n = 0;
	XtSetArg(warg[n], XmNchildType, XmCHILD_CONTROL); n++;
    XtCreateManagedWidget("MessageLabel", xmLabelWidgetClass, smb, warg, n);
/*
** These default to the action area.
*/
    defButton = XtCreateManagedWidget("OK", xmPushButtonWidgetClass, smb, warg, n);
    XtCreateManagedWidget("Help", xmPushButtonWidgetClass, smb, NULL, 0);
    n = 0;
    XtSetArg(warg[n], XmNdefaultButton, defButton); n++;
    XtSetValues(smb, warg, n);
	The other resources are:
	XmNminimizeButtons: (Boolean) make all the widgets in the action
		area the smallest possible
	XmNdialogType: (XmDIALOG_INFORMATION, etc.) adds the appropriate
		bitmap to the dialog as a label automatically
	XmNdialogPositioning: positions the dialog on popups to
XmDIALOG_POSITIONING_LEAVE_ALONE: let the window manager do whatever
XmDIALOG_POSITIONING_INITIAL_CENTER: first time it pops up centered in
	the screen, afterwards it pops up wherever it was left
XmDIALOG_POSITIONING_ALWAYS_CENTER: always pops up in the center of
    the screen
XmDIALOG_POSITIONING_DEFAULT_AT_POINTER: positions the dialog up so that the
    default button is centered on the pointer
XmDIALOG_POSITIONING_CENTER_AT_POINTER: positions the dialog up so that the
    dialog is centered on the pointer
	To build the SmartMessageBoxWidget you will need Motif 1.2.  Plus
if you have a version < 1.2.3 you will need to #define NEED_BBCONSTRAINT 1
since the Motif headers didn't have the Bulletin board constraint part like
they should have.
  That's about it.  Let me know what you think, and if I get encouraged
then maybe I'll write some more...See copyright or source files for
distribution info...
  John L. Cwikla
  cwikla@wri.com
  Furthering "open software" into reality...