packages icon
                                 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...