Blame lib/Xm/MessageB.c

Packit b099d7
/* 
Packit b099d7
 * Motif
Packit b099d7
 *
Packit b099d7
 * Copyright (c) 1987-2012, The Open Group. All rights reserved.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are free software; you can
Packit b099d7
 * redistribute them and/or modify them under the terms of the GNU
Packit b099d7
 * Lesser General Public License as published by the Free Software
Packit b099d7
 * Foundation; either version 2 of the License, or (at your option)
Packit b099d7
 * any later version.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are distributed in the hope that
Packit b099d7
 * they will be useful, but WITHOUT ANY WARRANTY; without even the
Packit b099d7
 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
Packit b099d7
 * PURPOSE. See the GNU Lesser General Public License for more
Packit b099d7
 * details.
Packit b099d7
 *
Packit b099d7
 * You should have received a copy of the GNU Lesser General Public
Packit b099d7
 * License along with these librararies and programs; if not, write
Packit b099d7
 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
Packit b099d7
 * Floor, Boston, MA 02110-1301 USA
Packit b099d7
*/ 
Packit b099d7
/* 
Packit b099d7
 * HISTORY
Packit b099d7
*/ 
Packit b099d7
#ifdef HAVE_CONFIG_H
Packit b099d7
#include <config.h>
Packit b099d7
#endif
Packit b099d7
Packit b099d7
Packit b099d7
#ifdef REV_INFO
Packit b099d7
#ifndef lint
Packit b099d7
static char rcsid[] = "$TOG: MessageB.c /main/18 1999/10/13 16:17:09 mgreess $"
Packit b099d7
#endif
Packit b099d7
#endif
Packit b099d7
/* (c) Copyright 1989, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */
Packit b099d7
/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */
Packit b099d7
Packit b099d7
#include <string.h>
Packit b099d7
#include <Xm/AccColorT.h>	/* for XmAccessColorDataRec */
Packit b099d7
#include <Xm/ActivatableT.h>
Packit b099d7
#include <Xm/ArrowB.h>
Packit b099d7
#include <Xm/ArrowBG.h>
Packit b099d7
#include <Xm/DialogS.h>
Packit b099d7
#include <Xm/DrawnB.h>
Packit b099d7
#include <Xm/LabelG.h>
Packit b099d7
#include <Xm/PushB.h>
Packit b099d7
#include <Xm/PushBG.h>
Packit b099d7
#include <Xm/RowColumnP.h>
Packit b099d7
#include <Xm/SeparatoG.h>
Packit b099d7
#include <Xm/ToggleB.h>
Packit b099d7
#include <Xm/ToggleBG.h>
Packit b099d7
#include <Xm/TraitP.h>
Packit b099d7
#include <Xm/VendorSP.h>	/* for the default display */
Packit b099d7
#include <Xm/VaSimpleP.h>
Packit b099d7
#include "BulletinBI.h"
Packit b099d7
#include "GeoUtilsI.h"
Packit b099d7
#include "ImageCachI.h"
Packit b099d7
#include "MessageBI.h"
Packit b099d7
#include "MessagesI.h"
Packit b099d7
#include "RepTypeI.h"
Packit b099d7
#include "TraversalI.h"
Packit b099d7
#include "XmI.h"
Packit b099d7
#include "ScreenI.h"
Packit b099d7
Packit b099d7
/* convenience macros */
Packit b099d7
#define Double(d)        ((d) << 1)
Packit b099d7
#define TotalWidth(w)    ((w)->core.width + Double ((w)->core.border_width))
Packit b099d7
#define TotalHeight(w)   ((w)->core.height + Double ((w)->core.border_width))
Packit b099d7
#define BottomEdge(w)    ((w)->core.y + TotalHeight (w))
Packit b099d7
Packit b099d7
#define IsButton(w) \
Packit b099d7
(((XtPointer) XmeTraitGet((XtPointer) XtClass(w), XmQTactivatable) != NULL))
Packit b099d7
      
Packit b099d7
#define IsAutoChild(mb, w) ( \
Packit b099d7
      (w) == mb->message_box.symbol_wid || \
Packit b099d7
      (w) == mb->message_box.message_wid || \
Packit b099d7
      (w) == mb->message_box.separator || \
Packit b099d7
      (w) == mb->message_box.ok_button || \
Packit b099d7
      (w) == mb->bulletin_board.cancel_button || \
Packit b099d7
      (w) == mb->message_box.help_button)
Packit b099d7
Packit b099d7
#define ARG_LIST_CNT    25
Packit b099d7
Packit b099d7
#define PIXMAP_LIST_MOD 6
Packit b099d7
Packit b099d7
/* defines for warning message */
Packit b099d7
#define WARNING4	_XmMMsgMessageB_0003
Packit b099d7
#define WARNING5	_XmMMsgMessageB_0004
Packit b099d7
Packit b099d7
Packit b099d7
/********    Static Function Declarations    ********/
Packit b099d7
Packit b099d7
static XImage * CreateDefaultImage( 
Packit b099d7
                        char *bits,
Packit b099d7
                        unsigned int width,
Packit b099d7
                        unsigned int height) ;
Packit b099d7
static void ClassInitialize( void ) ;
Packit b099d7
static void ClassPartInitialize( 
Packit b099d7
                        WidgetClass wc) ;
Packit b099d7
static void Initialize( 
Packit b099d7
                        Widget rw,
Packit b099d7
                        Widget nw,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args) ;
Packit b099d7
static void Destroy( 
Packit b099d7
                        Widget wid) ;
Packit b099d7
static void DeleteChild( 
Packit b099d7
                        Widget child) ;
Packit b099d7
static void MessageCallback( 
Packit b099d7
                        Widget w,
Packit b099d7
                        XtPointer closure,
Packit b099d7
                        XtPointer call_data) ;
Packit b099d7
static Boolean SetValues( 
Packit b099d7
                        Widget cw,
Packit b099d7
                        Widget rw,
Packit b099d7
                        Widget nw,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args) ;
Packit b099d7
static void SetUpSymbol( 
Packit b099d7
                        XmMessageBoxWidget w) ;
Packit b099d7
static void SetUpMessage( 
Packit b099d7
                        XmMessageBoxWidget w) ;
Packit b099d7
static void CreateWidgets( 
Packit b099d7
                        XmMessageBoxWidget w) ;
Packit b099d7
static Widget CreateDialog( 
Packit b099d7
                        Widget parent,
Packit b099d7
                        char *name,
Packit b099d7
                        ArgList al,
Packit b099d7
                        int ac,
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
                        unsigned int type) ;
Packit b099d7
#else
Packit b099d7
                        unsigned char type) ;
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
static void GetMessageString( 
Packit b099d7
                        Widget wid,
Packit b099d7
                        int resource_offset,
Packit b099d7
                        XtArgVal *value) ;
Packit b099d7
static void GetSymbolPixmap( 
Packit b099d7
                        Widget wid,
Packit b099d7
                        int resource_offset,
Packit b099d7
                        XtArgVal *value) ;
Packit b099d7
static void GetOkLabelString( 
Packit b099d7
                        Widget wid,
Packit b099d7
                        int resource_offset,
Packit b099d7
                        XtArgVal *value) ;
Packit b099d7
static void GetCancelLabelString( 
Packit b099d7
                        Widget wid,
Packit b099d7
                        int resource_offset,
Packit b099d7
                        XtArgVal *value) ;
Packit b099d7
static void GetHelpLabelString( 
Packit b099d7
                        Widget wid,
Packit b099d7
                        int resource_offset,
Packit b099d7
                        XtArgVal *value) ;
Packit b099d7
static void GetMsgBoxPixmap( 
Packit b099d7
                        XmMessageBoxWidget mBox) ;
Packit b099d7
Packit b099d7
/********    End Static Function Declarations    ********/
Packit b099d7
Packit b099d7
Packit b099d7
/*  Resource definitions, "get resources" first */
Packit b099d7
Packit b099d7
static XmSyntheticResource syn_resources[] = {
Packit b099d7
Packit b099d7
    {   XmNmessageString,
Packit b099d7
        sizeof (XmString),
Packit b099d7
        XtOffsetOf( struct _XmMessageBoxRec, message_box.message_string),
Packit b099d7
        GetMessageString,
Packit b099d7
		NULL},
Packit b099d7
Packit b099d7
    {   XmNsymbolPixmap,
Packit b099d7
        sizeof (Pixmap),
Packit b099d7
        XtOffsetOf( struct _XmMessageBoxRec, message_box.symbol_pixmap),
Packit b099d7
        GetSymbolPixmap,
Packit b099d7
		NULL},
Packit b099d7
Packit b099d7
    {   XmNokLabelString,
Packit b099d7
        sizeof (XmString),
Packit b099d7
        XtOffsetOf( struct _XmMessageBoxRec, message_box.ok_label_string),
Packit b099d7
        GetOkLabelString,
Packit b099d7
		NULL},
Packit b099d7
Packit b099d7
    {   XmNcancelLabelString,
Packit b099d7
        sizeof (XmString),
Packit b099d7
        XtOffsetOf( struct _XmMessageBoxRec, message_box.cancel_label_string),
Packit b099d7
        GetCancelLabelString,
Packit b099d7
		NULL},
Packit b099d7
Packit b099d7
    {   XmNhelpLabelString,
Packit b099d7
        sizeof (XmString),
Packit b099d7
        XtOffsetOf( struct _XmMessageBoxRec, message_box.help_label_string),
Packit b099d7
        GetHelpLabelString,
Packit b099d7
		NULL},
Packit b099d7
};
Packit b099d7
Packit b099d7
Packit b099d7
static XtResource resources[] = {
Packit b099d7
Packit b099d7
    {   XmNdialogType,
Packit b099d7
        XmCDialogType,
Packit b099d7
        XmRDialogType,
Packit b099d7
        sizeof(unsigned char),
Packit b099d7
        XtOffsetOf( struct _XmMessageBoxRec, message_box.dialog_type),
Packit b099d7
        XmRImmediate,
Packit b099d7
        (XtPointer) XmDIALOG_MESSAGE},
Packit b099d7
Packit b099d7
    {   XmNminimizeButtons,
Packit b099d7
        XmCMinimizeButtons,
Packit b099d7
        XmRBoolean,
Packit b099d7
        sizeof(Boolean),
Packit b099d7
        XtOffsetOf( struct _XmMessageBoxRec, message_box.minimize_buttons),
Packit b099d7
        XmRImmediate,
Packit b099d7
        (XtPointer) False},
Packit b099d7
Packit b099d7
    {   XmNdefaultButtonType,
Packit b099d7
        XmCDefaultButtonType,
Packit b099d7
        XmRDefaultButtonType,
Packit b099d7
        sizeof(unsigned char),
Packit b099d7
        XtOffsetOf( struct _XmMessageBoxRec, message_box.default_type),
Packit b099d7
        XmRImmediate,
Packit b099d7
        (XtPointer) XmDIALOG_OK_BUTTON},
Packit b099d7
Packit b099d7
    {   XmNmessageString,
Packit b099d7
        XmCXmString,
Packit b099d7
        XmRXmString,
Packit b099d7
        sizeof (XmString),
Packit b099d7
        XtOffsetOf( struct _XmMessageBoxRec, message_box.message_string),
Packit b099d7
        XmRXmString,
Packit b099d7
        NULL},
Packit b099d7
Packit b099d7
    {   XmNmessageAlignment,
Packit b099d7
        XmCAlignment,
Packit b099d7
        XmRAlignment,
Packit b099d7
        sizeof(unsigned char),
Packit b099d7
        XtOffsetOf( struct _XmMessageBoxRec, message_box.message_alignment),
Packit b099d7
        XmRImmediate,
Packit b099d7
        (XtPointer) XmALIGNMENT_BEGINNING},
Packit b099d7
Packit b099d7
    {   XmNsymbolPixmap,
Packit b099d7
        XmCPixmap,
Packit b099d7
        XmRDynamicPixmap,
Packit b099d7
        sizeof (Pixmap),
Packit b099d7
        XtOffsetOf( struct _XmMessageBoxRec, message_box.symbol_pixmap),
Packit b099d7
        XmRImmediate,
Packit b099d7
        (XtPointer) XmUNSPECIFIED_PIXMAP},
Packit b099d7
Packit b099d7
    {   XmNokLabelString,
Packit b099d7
        XmCXmString,
Packit b099d7
        XmRXmString,
Packit b099d7
        sizeof (XmString),
Packit b099d7
        XtOffsetOf( struct _XmMessageBoxRec, message_box.ok_label_string),
Packit b099d7
        XmRXmString,
Packit b099d7
        NULL},             /* "OK" default dynamically set from label name */
Packit b099d7
Packit b099d7
    {   XmNokCallback,
Packit b099d7
        XmCCallback,
Packit b099d7
        XmRCallback,
Packit b099d7
        sizeof (XtCallbackList),
Packit b099d7
        XtOffsetOf( struct _XmMessageBoxRec, message_box.ok_callback),
Packit b099d7
        XmRCallback,
Packit b099d7
        NULL},
Packit b099d7
Packit b099d7
    {   XmNcancelLabelString,
Packit b099d7
        XmCXmString,
Packit b099d7
        XmRXmString,
Packit b099d7
        sizeof (XmString),
Packit b099d7
        XtOffsetOf( struct _XmMessageBoxRec, message_box.cancel_label_string),
Packit b099d7
        XmRXmString,
Packit b099d7
        NULL},            /* "Cancel" default dynamically set from label name */
Packit b099d7
Packit b099d7
    {   XmNcancelCallback,
Packit b099d7
        XmCCallback,
Packit b099d7
        XmRCallback,
Packit b099d7
        sizeof (XtCallbackList),
Packit b099d7
        XtOffsetOf( struct _XmMessageBoxRec, message_box.cancel_callback),
Packit b099d7
        XmRCallback,
Packit b099d7
        NULL},
Packit b099d7
Packit b099d7
    {   XmNhelpLabelString,
Packit b099d7
        XmCXmString,
Packit b099d7
        XmRXmString,
Packit b099d7
        sizeof (XmString),
Packit b099d7
        XtOffsetOf( struct _XmMessageBoxRec, message_box.help_label_string),
Packit b099d7
        XmRXmString,
Packit b099d7
        NULL},             /* "Help" default dynamically set from label name */
Packit b099d7
Packit b099d7
};
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/****************************************************************
Packit b099d7
 *
Packit b099d7
 * Full class record constant
Packit b099d7
 *
Packit b099d7
 ****************************************************************/
Packit b099d7
Packit b099d7
externaldef( xmmessageboxclassrec) XmMessageBoxClassRec xmMessageBoxClassRec =
Packit b099d7
{
Packit b099d7
   {                                            /* core_class fields  */
Packit b099d7
      (WidgetClass) &xmBulletinBoardClassRec,   /* superclass         */
Packit b099d7
      "XmMessageBox",                           /* class_name         */
Packit b099d7
      sizeof(XmMessageBoxRec),                  /* widget_size        */
Packit b099d7
      ClassInitialize,                          /* class_initialize   */
Packit b099d7
      ClassPartInitialize,                      /* class_part_init    */
Packit b099d7
      FALSE,                                    /* class_inited       */
Packit b099d7
      Initialize,                               /* initialize         */
Packit b099d7
      NULL,                                     /* initialize_hook    */
Packit b099d7
      XtInheritRealize,                         /* realize            */
Packit b099d7
      NULL,                                     /* actions            */
Packit b099d7
      0,                                        /* num_actions        */
Packit b099d7
      resources,                                /* resources          */
Packit b099d7
      XtNumber(resources),                      /* num_resources      */
Packit b099d7
      NULLQUARK,                                /* xrm_class          */
Packit b099d7
      TRUE,                                     /* compress_motion    */
Packit b099d7
      XtExposeCompressMaximal,                  /* compress_exposure  */
Packit b099d7
      FALSE,                                    /* compress_enterlv   */
Packit b099d7
      FALSE,                                    /* visible_interest   */
Packit b099d7
      Destroy,                                  /* destroy            */
Packit b099d7
      XtInheritResize,                          /* resize             */
Packit b099d7
      XtInheritExpose,                          /* expose             */
Packit b099d7
      SetValues,                                /* set_values         */
Packit b099d7
      NULL,                                     /* set_values_hook    */
Packit b099d7
      XtInheritSetValuesAlmost,                 /* set_values_almost  */
Packit b099d7
      NULL,                                     /* get_values_hook    */
Packit b099d7
      XtInheritAcceptFocus,                     /* enter_focus        */
Packit b099d7
      XtVersion,                                /* version            */
Packit b099d7
      NULL,                                     /* callback_private   */
Packit b099d7
      XtInheritTranslations,                    /* tm_table           */
Packit b099d7
      XtInheritQueryGeometry,                   /* query_geometry     */
Packit b099d7
      NULL,                                     /* display_accelerator*/
Packit b099d7
      NULL,                                     /* extension          */
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {                                            /* composite_class fields */
Packit b099d7
      XtInheritGeometryManager,                 /* geometry_manager   */
Packit b099d7
      XtInheritChangeManaged,                   /* change_managed     */
Packit b099d7
      XtInheritInsertChild,                     /* insert_child       */
Packit b099d7
      DeleteChild,                              /* delete_child       */
Packit b099d7
      NULL,                                     /* extension          */
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {                                            /* constraint_class fields */
Packit b099d7
      NULL,                                     /* resource list        */   
Packit b099d7
      0,                                        /* num resources        */   
Packit b099d7
      sizeof(XmManagerConstraintRec),           /* constraint size      */   
Packit b099d7
      NULL,                                     /* init proc            */   
Packit b099d7
      NULL,                                     /* destroy proc         */   
Packit b099d7
      NULL,                                     /* set values proc      */   
Packit b099d7
      NULL,                                     /* extension            */
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {                                            /* manager_class fields   */
Packit b099d7
      XmInheritTranslations,                    /* translations           */
Packit b099d7
      syn_resources,                            /* syn_resources          */
Packit b099d7
      XtNumber(syn_resources),                  /* num_syn_resources      */
Packit b099d7
      NULL,                                     /* syn_cont_resources     */
Packit b099d7
      0,                                        /* num_syn_cont_resources */
Packit b099d7
      XmInheritParentProcess,                   /* parent_process         */
Packit b099d7
      NULL,                                     /* extension              */
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {                                            /* bulletinBoard class  */
Packit b099d7
      TRUE,                                     /*always_install_accelerators*/
Packit b099d7
      _XmMessageBoxGeoMatrixCreate,             /* geo__matrix_create */
Packit b099d7
      XmInheritFocusMovedProc,                  /* focus_moved_proc */
Packit b099d7
      NULL                                      /* extension */
Packit b099d7
   },   
Packit b099d7
Packit b099d7
   {                                            /* messageBox class */
Packit b099d7
      (XtPointer) NULL                          /* extension */
Packit b099d7
   }    
Packit b099d7
};
Packit b099d7
Packit b099d7
externaldef( xmmessageboxwidgetclass) WidgetClass xmMessageBoxWidgetClass
Packit b099d7
                                        = (WidgetClass) &xmMessageBoxClassRec ;
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *  Bitmap Data for Default Symbol
Packit b099d7
 **********************************<->***********************************/
Packit b099d7
Packit b099d7
static XmConst unsigned char errorBits[] = {
Packit b099d7
   0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0xf0, 0x3a, 0x00, 0x58, 0x55, 0x00,
Packit b099d7
   0x2c, 0xa0, 0x00, 0x56, 0x40, 0x01, 0xaa, 0x80, 0x02, 0x46, 0x81, 0x01,
Packit b099d7
   0x8a, 0x82, 0x02, 0x06, 0x85, 0x01, 0x0a, 0x8a, 0x02, 0x06, 0x94, 0x01,
Packit b099d7
   0x0a, 0xe8, 0x02, 0x14, 0x50, 0x01, 0x28, 0xb0, 0x00, 0xd0, 0x5f, 0x00,
Packit b099d7
   0xa0, 0x2a, 0x00, 0x40, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
Packit b099d7
Packit b099d7
static XmConst unsigned char infoBits[] = {
Packit b099d7
   0x00, 0x00, 0x78, 0x00, 0x54, 0x00, 0x2c, 0x00, 0x54, 0x00, 0x28, 0x00,
Packit b099d7
   0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x2a, 0x00, 0x5c, 0x00, 0x28, 0x00,
Packit b099d7
   0x58, 0x00, 0x28, 0x00, 0x58, 0x00, 0x28, 0x00, 0x58, 0x00, 0x28, 0x00,
Packit b099d7
   0x58, 0x00, 0xae, 0x01, 0x56, 0x01, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00};
Packit b099d7
Packit b099d7
static XmConst unsigned char questionBits[] = {
Packit b099d7
   0xf0, 0x3f, 0x00, 0x58, 0x55, 0x00, 0xac, 0xaa, 0x00, 0xd6, 0x5f, 0x01,
Packit b099d7
   0xea, 0xbf, 0x02, 0xf6, 0x7f, 0x01, 0xea, 0xba, 0x02, 0xf6, 0x7d, 0x05,
Packit b099d7
   0xea, 0xba, 0x0a, 0x56, 0x7d, 0x15, 0xaa, 0xbe, 0x1e, 0x56, 0x5f, 0x01,
Packit b099d7
   0xac, 0xaf, 0x02, 0x58, 0x57, 0x01, 0xb0, 0xaf, 0x00, 0x60, 0x55, 0x01,
Packit b099d7
   0xa0, 0xaa, 0x00, 0x60, 0x17, 0x00, 0xa0, 0x2f, 0x00, 0x60, 0x17, 0x00,
Packit b099d7
   0xb0, 0x2a, 0x00, 0x50, 0x55, 0x00};
Packit b099d7
Packit b099d7
static XmConst unsigned char warningBits[] = {
Packit b099d7
   0x00, 0x00, 0x18, 0x00, 0x2c, 0x00, 0x56, 0x00, 0x2a, 0x00, 0x56, 0x00,
Packit b099d7
   0x2a, 0x00, 0x56, 0x00, 0x2c, 0x00, 0x14, 0x00, 0x2c, 0x00, 0x14, 0x00,
Packit b099d7
   0x2c, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x14, 0x00,
Packit b099d7
   0x2c, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00};
Packit b099d7
Packit b099d7
static XmConst unsigned char workingBits[] = {
Packit b099d7
   0x00, 0x00, 0x00, 0xfe, 0xff, 0x0f, 0xaa, 0xaa, 0x0a, 0x44, 0x55, 0x06,
Packit b099d7
   0xcc, 0x2a, 0x02, 0x44, 0x55, 0x06, 0xcc, 0x2a, 0x02, 0x84, 0x15, 0x06,
Packit b099d7
   0x8c, 0x2a, 0x02, 0x04, 0x15, 0x06, 0x0c, 0x0a, 0x02, 0x04, 0x06, 0x06,
Packit b099d7
   0x0c, 0x0b, 0x02, 0x84, 0x15, 0x06, 0xcc, 0x2a, 0x02, 0x44, 0x55, 0x06,
Packit b099d7
   0xcc, 0x2a, 0x02, 0x44, 0x55, 0x06, 0xcc, 0x2a, 0x02, 0x44, 0x55, 0x06,
Packit b099d7
   0xfe, 0xff, 0x0f, 0x56, 0x55, 0x05, 0x00, 0x00, 0x00};
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/****************************************************************
Packit b099d7
 * Create a default images for symbol... used in ClassInitialize.
Packit b099d7
 ****************/
Packit b099d7
static XImage * 
Packit b099d7
CreateDefaultImage(
Packit b099d7
        char *bits,
Packit b099d7
        unsigned int width,
Packit b099d7
        unsigned int height )
Packit b099d7
{
Packit b099d7
    XImage *        image ;
Packit b099d7
    Display * display = _XmGetDefaultDisplay() ; /* we don't have one here */
Packit b099d7
Packit b099d7
    _XmCreateImage(image, display, bits, width, height, LSBFirst);
Packit b099d7
Packit b099d7
    return( image) ;
Packit b099d7
}
Packit b099d7
/****************************************************************/
Packit b099d7
static void 
Packit b099d7
ClassInitialize( void )
Packit b099d7
{
Packit b099d7
    XImage *image;
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    /* create and install the default images for the symbol */
Packit b099d7
Packit b099d7
    image = CreateDefaultImage ((char *)errorBits, 20, 20);
Packit b099d7
    XmInstallImage (image, "default_xm_error");
Packit b099d7
Packit b099d7
    image = CreateDefaultImage ((char *)infoBits, 11, 24);
Packit b099d7
    XmInstallImage (image, "default_xm_information");
Packit b099d7
Packit b099d7
    image = CreateDefaultImage ((char *)questionBits, 22, 22);
Packit b099d7
    XmInstallImage (image, "default_xm_question");
Packit b099d7
Packit b099d7
    image = CreateDefaultImage ((char *)warningBits, 9, 22);
Packit b099d7
    XmInstallImage (image, "default_xm_warning");
Packit b099d7
Packit b099d7
    image = CreateDefaultImage ((char *)workingBits, 21, 23);
Packit b099d7
    XmInstallImage (image, "default_xm_working");
Packit b099d7
Packit b099d7
    return ;
Packit b099d7
}
Packit b099d7
/****************************************************************/
Packit b099d7
static void 
Packit b099d7
ClassPartInitialize(
Packit b099d7
        WidgetClass wc )
Packit b099d7
{
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    _XmFastSubclassInit (wc, XmMESSAGE_BOX_BIT);
Packit b099d7
Packit b099d7
    return ;
Packit b099d7
}
Packit b099d7
/****************************************************************
Packit b099d7
 * MessageBox widget specific initialization
Packit b099d7
 ****************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static void 
Packit b099d7
Initialize(
Packit b099d7
        Widget rw,		/* unused */
Packit b099d7
        Widget nw,
Packit b099d7
        ArgList args,		/* unused */
Packit b099d7
        Cardinal *num_args )	/* unused */
Packit b099d7
{
Packit b099d7
            XmMessageBoxWidget new_w = (XmMessageBoxWidget) nw ;
Packit b099d7
            Widget          defaultButton ;
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    new_w->message_box.message_wid = NULL;
Packit b099d7
    new_w->message_box.symbol_wid = NULL;
Packit b099d7
    new_w->message_box.separator = NULL;
Packit b099d7
    new_w->message_box.ok_button = NULL;
Packit b099d7
    new_w->bulletin_board.cancel_button = NULL;
Packit b099d7
    new_w->message_box.help_button = NULL;
Packit b099d7
    new_w->bulletin_board.default_button = NULL;
Packit b099d7
    new_w->message_box.internal_pixmap = FALSE ;
Packit b099d7
Packit b099d7
    if(    !XmRepTypeValidValue( XmRID_DIALOG_TYPE,
Packit b099d7
                               new_w->message_box.dialog_type, (Widget) new_w)    )
Packit b099d7
    {   new_w->message_box.dialog_type = XmDIALOG_MESSAGE ;
Packit b099d7
        } 
Packit b099d7
Packit b099d7
    if(    !XmRepTypeValidValue( XmRID_ALIGNMENT,
Packit b099d7
                         new_w->message_box.message_alignment, (Widget) new_w)    )
Packit b099d7
    {   new_w->message_box.message_alignment = XmALIGNMENT_BEGINNING ;
Packit b099d7
        } 
Packit b099d7
Packit b099d7
    CreateWidgets( new_w) ;
Packit b099d7
Packit b099d7
    if(    !XmRepTypeValidValue( XmRID_DEFAULT_BUTTON_TYPE,
Packit b099d7
                              new_w->message_box.default_type, (Widget) new_w)    )
Packit b099d7
    {   new_w->message_box.default_type = XmDIALOG_OK_BUTTON ;
Packit b099d7
        } 
Packit b099d7
    switch(    new_w->message_box.default_type    )
Packit b099d7
    {   
Packit b099d7
        case XmDIALOG_CANCEL_BUTTON:
Packit b099d7
        {   defaultButton = new_w->bulletin_board.cancel_button ;
Packit b099d7
            break ;
Packit b099d7
            } 
Packit b099d7
        case XmDIALOG_HELP_BUTTON:
Packit b099d7
        {   defaultButton = new_w->message_box.help_button ;
Packit b099d7
            break ;
Packit b099d7
            } 
Packit b099d7
        case XmDIALOG_OK_BUTTON:
Packit b099d7
        {   defaultButton = new_w->message_box.ok_button ;
Packit b099d7
            break ;
Packit b099d7
            } 
Packit b099d7
        default:
Packit b099d7
	{   defaultButton = NULL ;
Packit b099d7
	    }
Packit b099d7
        } 
Packit b099d7
      if(    defaultButton    )
Packit b099d7
      {
Packit b099d7
          BB_DefaultButton( new_w) = defaultButton ;
Packit b099d7
          new_w->manager.initial_focus = defaultButton ;
Packit b099d7
          _XmBulletinBoardSetDynDefaultButton( (Widget) new_w, defaultButton) ;
Packit b099d7
      }
Packit b099d7
    return ;
Packit b099d7
    }
Packit b099d7
/****************************************************************
Packit b099d7
 * Destroy the widget specific data structs
Packit b099d7
 ****************/
Packit b099d7
static void 
Packit b099d7
Destroy(
Packit b099d7
        Widget wid )
Packit b099d7
{
Packit b099d7
            XmMessageBoxWidget d = (XmMessageBoxWidget) wid ;
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    if(    (d->message_box.symbol_pixmap != XmUNSPECIFIED_PIXMAP)
Packit b099d7
        && d->message_box.internal_pixmap    )
Packit b099d7
    {   
Packit b099d7
        XmDestroyPixmap( d->core.screen, d->message_box.symbol_pixmap) ;
Packit b099d7
        } 
Packit b099d7
    return ;
Packit b099d7
    }
Packit b099d7

Packit b099d7
/****************************************************************
Packit b099d7
 * Set the widget id to NULL for the child widget being destroyed.
Packit b099d7
 ****************/
Packit b099d7
static void 
Packit b099d7
DeleteChild(
Packit b099d7
        Widget child )
Packit b099d7
{   
Packit b099d7
            XmMessageBoxWidget mbox ;
Packit b099d7
	    XtWidgetProc      delete_child;
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    if(    XtIsRectObj( child)    )
Packit b099d7
    {   
Packit b099d7
        mbox = (XmMessageBoxWidget) XtParent( child) ;
Packit b099d7
Packit b099d7
        /* Check for which child is getting destroyed and set to NULL.
Packit b099d7
        */
Packit b099d7
        if(    child == mbox->message_box.message_wid    )
Packit b099d7
        {   mbox->message_box.message_wid = NULL ;
Packit b099d7
            } 
Packit b099d7
        else
Packit b099d7
        {   if(    child == mbox->message_box.symbol_wid    )
Packit b099d7
            {   mbox->message_box.symbol_wid = NULL ;
Packit b099d7
                } 
Packit b099d7
            else
Packit b099d7
            {   if(    child == mbox->message_box.ok_button    )
Packit b099d7
                {   mbox->message_box.ok_button = NULL ;
Packit b099d7
                    } 
Packit b099d7
                else
Packit b099d7
                {   if(    child == mbox->message_box.help_button    )
Packit b099d7
                    {   mbox->message_box.help_button = NULL ;
Packit b099d7
                        } 
Packit b099d7
                    else
Packit b099d7
                    {   if(    child == mbox->message_box.separator    )
Packit b099d7
                        {   mbox->message_box.separator = NULL ;
Packit b099d7
                            } 
Packit b099d7
                        } 
Packit b099d7
                    } 
Packit b099d7
                } 
Packit b099d7
            }
Packit b099d7
        }
Packit b099d7
    _XmProcessLock();
Packit b099d7
    delete_child = ((XmBulletinBoardWidgetClass) xmBulletinBoardWidgetClass)
Packit b099d7
				  ->composite_class.delete_child;
Packit b099d7
    _XmProcessUnlock();
Packit b099d7
    (*delete_child)(child) ;
Packit b099d7
    return ;
Packit b099d7
    }
Packit b099d7

Packit b099d7
/****************************************************************/
Packit b099d7
static void 
Packit b099d7
MessageCallback(
Packit b099d7
        Widget w,
Packit b099d7
        XtPointer closure,
Packit b099d7
        XtPointer call_data )
Packit b099d7
{
Packit b099d7
            XmMessageBoxWidget tag = (XmMessageBoxWidget) closure ;
Packit b099d7
Packit b099d7
    XmAnyCallbackStruct temp;
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    if (call_data) {
Packit b099d7
    	temp.reason  = ((XmAnyCallbackStruct *) call_data)->reason;
Packit b099d7
    	temp.event   = ((XmAnyCallbackStruct *) call_data)->event;
Packit b099d7
	}
Packit b099d7
    else {
Packit b099d7
    	temp.reason  = 0;
Packit b099d7
    	temp.event   = NULL;
Packit b099d7
    }
Packit b099d7
Packit b099d7
    if (tag->message_box.ok_button == w) {
Packit b099d7
        temp.reason = XmCR_OK;
Packit b099d7
        XtCallCallbackList ((Widget) tag, tag->message_box.ok_callback, &temp);
Packit b099d7
    }
Packit b099d7
    else if (tag->bulletin_board.cancel_button == w) {
Packit b099d7
        temp.reason = XmCR_CANCEL;
Packit b099d7
        XtCallCallbackList ((Widget) tag, tag->message_box.cancel_callback, &temp);
Packit b099d7
    }
Packit b099d7
    else if (tag->message_box.help_button == w) {
Packit b099d7
        temp.reason  = XmCR_HELP;
Packit b099d7
        XtCallCallbackList ((Widget) tag, tag->manager.help_callback, &temp);
Packit b099d7
    }
Packit b099d7
    return ;
Packit b099d7
}
Packit b099d7

Packit b099d7
/****************************************************************
Packit b099d7
 * Set attributes of a message widget
Packit b099d7
 ****************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static Boolean 
Packit b099d7
SetValues(
Packit b099d7
        Widget cw,
Packit b099d7
        Widget rw,		/* unused */
Packit b099d7
        Widget nw,
Packit b099d7
        ArgList args,		/* unused */
Packit b099d7
        Cardinal *num_args )	/* unused */
Packit b099d7
{
Packit b099d7
            XmMessageBoxWidget current = (XmMessageBoxWidget) cw ;
Packit b099d7
            XmMessageBoxWidget new_w = (XmMessageBoxWidget) nw ;
Packit b099d7
            Arg             al[ARG_LIST_CNT] ;  /* arg list       */
Packit b099d7
            Cardinal        ac ;                /* arg list count */
Packit b099d7
            Boolean         need_layout = FALSE ;
Packit b099d7
            Boolean         newPixmap = FALSE ;
Packit b099d7
            Widget          defaultButton ;
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    /* "in_set_values" means the GeometryManager won't try to resize
Packit b099d7
    *    and/or re-layout subwidgets.
Packit b099d7
    */
Packit b099d7
    BB_InSetValues( new_w) = True;
Packit b099d7
Packit b099d7
	    /* fix for CR 5895 */
Packit b099d7
    if(    !new_w->message_box.symbol_pixmap    )
Packit b099d7
    {   new_w->message_box.symbol_pixmap = XmUNSPECIFIED_PIXMAP ;
Packit b099d7
        } 
Packit b099d7
Packit b099d7
    /* Over-ride BBoard to disallow a direct change of button id's
Packit b099d7
     * unless it's a template dialog.  For those, if you can't set it
Packit b099d7
     * here then you can never set it.
Packit b099d7
    */
Packit b099d7
    if ( ( current->message_box.dialog_type != XmDIALOG_TEMPLATE ) &&
Packit b099d7
         ( current->bulletin_board.cancel_button !=
Packit b099d7
                                        new_w->bulletin_board.cancel_button ) )
Packit b099d7
    {
Packit b099d7
        new_w->bulletin_board.cancel_button 
Packit b099d7
                                       = current->bulletin_board.cancel_button;
Packit b099d7
        XmeWarning( (Widget) new_w, WARNING5);
Packit b099d7
    }
Packit b099d7
Packit b099d7
    if(    (current->message_box.dialog_type != new_w->message_box.dialog_type)
Packit b099d7
        && !XmRepTypeValidValue( XmRID_DIALOG_TYPE,
Packit b099d7
                               new_w->message_box.dialog_type, (Widget) new_w)    )
Packit b099d7
    {   
Packit b099d7
        new_w->message_box.dialog_type = current->message_box.dialog_type ;
Packit b099d7
        }
Packit b099d7
Packit b099d7
    if(    new_w->message_box.symbol_pixmap
Packit b099d7
                                     != current->message_box.symbol_pixmap    )
Packit b099d7
    {   newPixmap = TRUE ;
Packit b099d7
        new_w->message_box.internal_pixmap = FALSE ;
Packit b099d7
Packit b099d7
        if(    (current->message_box.symbol_pixmap != XmUNSPECIFIED_PIXMAP)
Packit b099d7
            && current->message_box.internal_pixmap    )
Packit b099d7
        {   
Packit b099d7
            XmDestroyPixmap( current->core.screen,
Packit b099d7
                                          current->message_box.symbol_pixmap) ;
Packit b099d7
            } 
Packit b099d7
        } 
Packit b099d7
    else
Packit b099d7
    {   /* If symbol pixmap is unchanged and a new dialog type is specified,
Packit b099d7
        *   then set to default pixmap.
Packit b099d7
        */
Packit b099d7
        if(    new_w->message_box.dialog_type
Packit b099d7
                                       != current->message_box.dialog_type    )
Packit b099d7
        {   newPixmap = TRUE ;
Packit b099d7
Packit b099d7
            GetMsgBoxPixmap( new_w) ;
Packit b099d7
Packit b099d7
            if(    (current->message_box.symbol_pixmap != XmUNSPECIFIED_PIXMAP)
Packit b099d7
                && current->message_box.internal_pixmap    )
Packit b099d7
            {   
Packit b099d7
                XmDestroyPixmap( current->core.screen, 
Packit b099d7
                                          current->message_box.symbol_pixmap) ;
Packit b099d7
                } 
Packit b099d7
            }
Packit b099d7
        } 
Packit b099d7
    if(    newPixmap    )
Packit b099d7
    {   
Packit b099d7
      need_layout = TRUE ;
Packit b099d7
Packit b099d7
      /* CR 7596,  create child widget if needed */
Packit b099d7
      if( ! new_w->message_box.symbol_wid ) {
Packit b099d7
	SetUpSymbol(new_w);
Packit b099d7
	XtManageChild(new_w->message_box.symbol_wid);
Packit b099d7
      }
Packit b099d7
Packit b099d7
      ac = 0 ;
Packit b099d7
      XtSetArg( al[ac], XmNlabelPixmap, 
Packit b099d7
	       new_w->message_box.symbol_pixmap) ; ++ac ;
Packit b099d7
      XtSetValues( new_w->message_box.symbol_wid, al, ac) ;
Packit b099d7
    }
Packit b099d7
Packit b099d7
    /* Check the buttons and labels
Packit b099d7
    */
Packit b099d7
    ac = 0 ;
Packit b099d7
    if(    new_w->message_box.message_string    )
Packit b099d7
    {   
Packit b099d7
        XtSetArg( al[ac], XmNlabelString, 
Packit b099d7
                                      new_w->message_box.message_string) ; ++ac ;
Packit b099d7
        XtSetArg( al[ac], XmNstringDirection,
Packit b099d7
                                             BB_StringDirection( new_w)) ; ++ac ;
Packit b099d7
        new_w->message_box.message_string = NULL ;
Packit b099d7
        need_layout = TRUE ;
Packit b099d7
        }
Packit b099d7
    if(    current->message_box.message_alignment
Packit b099d7
                                     != new_w->message_box.message_alignment    )
Packit b099d7
    {   if(    !XmRepTypeValidValue( XmRID_ALIGNMENT, 
Packit b099d7
                         new_w->message_box.message_alignment, (Widget) new_w)    )
Packit b099d7
        {   new_w->message_box.message_alignment
Packit b099d7
                                     = current->message_box.message_alignment ;
Packit b099d7
            } 
Packit b099d7
        else
Packit b099d7
        {   XtSetArg( al[ac], XmNalignment, 
Packit b099d7
                                   new_w->message_box.message_alignment) ; ++ac ;
Packit b099d7
            need_layout = TRUE ;
Packit b099d7
            } 
Packit b099d7
        }
Packit b099d7
    if( ac )
Packit b099d7
    {   
Packit b099d7
      /* CR 7596,  create message widget if not there */
Packit b099d7
      if ( ! new_w->message_box.message_wid ) {
Packit b099d7
	SetUpMessage(new_w);
Packit b099d7
	XtManageChild(new_w->message_box.message_wid);
Packit b099d7
      }
Packit b099d7
Packit b099d7
      XtSetValues( new_w->message_box.message_wid, al, ac) ;
Packit b099d7
    } 
Packit b099d7
Packit b099d7
    if(    new_w->message_box.ok_label_string    )
Packit b099d7
    {   
Packit b099d7
        if(    new_w->message_box.ok_button    )
Packit b099d7
        {   ac = 0 ;
Packit b099d7
            XtSetArg( al[ac], XmNlabelString, 
Packit b099d7
                                     new_w->message_box.ok_label_string) ; ++ac ;
Packit b099d7
            XtSetArg( al[ac], XmNstringDirection,
Packit b099d7
                                             BB_StringDirection( new_w)) ; ++ac ;
Packit b099d7
            XtSetValues( new_w->message_box.ok_button, al, ac) ;
Packit b099d7
            } 
Packit b099d7
        new_w->message_box.ok_label_string = NULL ;
Packit b099d7
        need_layout = TRUE ;
Packit b099d7
        } 
Packit b099d7
    if(    new_w->message_box.cancel_label_string    )
Packit b099d7
    {   
Packit b099d7
        if(    new_w->bulletin_board.cancel_button    )
Packit b099d7
        {   ac = 0 ;
Packit b099d7
            XtSetArg( al[ac], XmNlabelString, 
Packit b099d7
                                 new_w->message_box.cancel_label_string) ; ++ac ;
Packit b099d7
            XtSetArg( al[ac], XmNstringDirection,
Packit b099d7
                                             BB_StringDirection( new_w)) ; ++ac ;
Packit b099d7
            XtSetValues( new_w->bulletin_board.cancel_button, al, ac) ;
Packit b099d7
            } 
Packit b099d7
        new_w->message_box.cancel_label_string = NULL ;
Packit b099d7
        need_layout = TRUE ;
Packit b099d7
        } 
Packit b099d7
    if(    new_w->message_box.help_label_string    )
Packit b099d7
    {   
Packit b099d7
        if(    new_w->message_box.help_button    )
Packit b099d7
        {   ac = 0 ;
Packit b099d7
            XtSetArg( al[ac], XmNlabelString, 
Packit b099d7
                                   new_w->message_box.help_label_string) ; ++ac ;
Packit b099d7
            XtSetArg( al[ac], XmNstringDirection,
Packit b099d7
                                             BB_StringDirection( new_w)) ; ++ac ;
Packit b099d7
            XtSetValues( new_w->message_box.help_button, al, ac) ;
Packit b099d7
            } 
Packit b099d7
        new_w->message_box.help_label_string = NULL ;
Packit b099d7
        need_layout = TRUE ;
Packit b099d7
        } 
Packit b099d7
Packit b099d7
    /* If Default Pushbutton changes, reset showAsDefault.
Packit b099d7
    */
Packit b099d7
    if(    current->message_box.default_type
Packit b099d7
                                        != new_w->message_box.default_type    )
Packit b099d7
    {   if(    !XmRepTypeValidValue( XmRID_DEFAULT_BUTTON_TYPE,
Packit b099d7
                          new_w->message_box.default_type, (Widget) new_w)    )
Packit b099d7
        {   new_w->message_box.default_type
Packit b099d7
	                                  = current->message_box.default_type ;
Packit b099d7
            } 
Packit b099d7
        else
Packit b099d7
        {   switch(    new_w->message_box.default_type    )
Packit b099d7
            {   
Packit b099d7
                case XmDIALOG_CANCEL_BUTTON:
Packit b099d7
                {   defaultButton = new_w->bulletin_board.cancel_button ;
Packit b099d7
                    break ;
Packit b099d7
                    } 
Packit b099d7
                case XmDIALOG_HELP_BUTTON:
Packit b099d7
                {   defaultButton = new_w->message_box.help_button ;
Packit b099d7
                    break ;
Packit b099d7
                    } 
Packit b099d7
                case XmDIALOG_OK_BUTTON:
Packit b099d7
                {   defaultButton = new_w->message_box.ok_button ;
Packit b099d7
                    break ;
Packit b099d7
                    }
Packit b099d7
                default:
Packit b099d7
		{   defaultButton = NULL ;
Packit b099d7
		    }
Packit b099d7
        }
Packit b099d7
		BB_DefaultButton( new_w) = defaultButton ;
Packit b099d7
		_XmBulletinBoardSetDynDefaultButton( (Widget) new_w, defaultButton);
Packit b099d7
Packit b099d7
	    if(    (current->manager.initial_focus
Packit b099d7
	                                     == BB_DefaultButton( current))
Packit b099d7
	       &&  (current->manager.initial_focus
Packit b099d7
		                          == new_w->manager.initial_focus)    )
Packit b099d7
	    {   new_w->manager.initial_focus = defaultButton ;
Packit b099d7
		_XmSetInitialOfTabGroup( (Widget) new_w, defaultButton) ;
Packit b099d7
	        }
Packit b099d7
	    }
Packit b099d7
        }
Packit b099d7
    BB_InSetValues( new_w) = False;
Packit b099d7
Packit b099d7
    /* Re-layout the sub-widgets if necessary
Packit b099d7
    */
Packit b099d7
    if(    need_layout
Packit b099d7
        && (XtClass( new_w) == xmMessageBoxWidgetClass)    )
Packit b099d7
    {
Packit b099d7
        _XmBulletinBoardSizeUpdate( (Widget) new_w) ;
Packit b099d7
        }
Packit b099d7
    return( FALSE) ;
Packit b099d7
    }
Packit b099d7

Packit b099d7
/****************************************************************
Packit b099d7
 * Set up the icon (pixmap label widget) and the label widget itself.
Packit b099d7
 ****************/
Packit b099d7
static void 
Packit b099d7
SetUpSymbol(
Packit b099d7
        XmMessageBoxWidget w )
Packit b099d7
{
Packit b099d7
    Arg al[ARG_LIST_CNT];
Packit b099d7
    int ac;
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    /* If no pixmap specified, try to get from bitmap file or default
Packit b099d7
    */
Packit b099d7
    if(    w->message_box.symbol_pixmap == XmUNSPECIFIED_PIXMAP    )
Packit b099d7
    {   GetMsgBoxPixmap( w) ;
Packit b099d7
        }
Packit b099d7
Packit b099d7
    if(    !w->message_box.symbol_pixmap    )
Packit b099d7
    {   w->message_box.symbol_pixmap = XmUNSPECIFIED_PIXMAP ;
Packit b099d7
        } 
Packit b099d7
Packit b099d7
    /* Create symbol label even if no pixmap specified; allows SetValues
Packit b099d7
    *   on dialogType to make pixmap appear in what starts as message box.
Packit b099d7
    */
Packit b099d7
    ac = 0;
Packit b099d7
    XtSetArg (al[ac], XmNwidth, 0);                                    ac++;
Packit b099d7
    XtSetArg (al[ac], XmNheight, 0);                                   ac++;
Packit b099d7
    XtSetArg (al[ac], XmNlabelType, XmPIXMAP);                         ac++; 
Packit b099d7
    XtSetArg (al[ac], XmNlabelPixmap, w->message_box.symbol_pixmap);   ac++;
Packit b099d7
    XtSetArg (al[ac], XmNtraversalOn, False);                          ac++;
Packit b099d7
Packit b099d7
    w->message_box.symbol_wid = XmCreateLabelGadget( (Widget) w, "Symbol",
Packit b099d7
                                                                       al, ac);
Packit b099d7
    return ;
Packit b099d7
    }
Packit b099d7

Packit b099d7
/****************************************************************
Packit b099d7
 * Set up the message label (assumes none set yet).
Packit b099d7
 ****************/
Packit b099d7
static void 
Packit b099d7
SetUpMessage(
Packit b099d7
        XmMessageBoxWidget w )
Packit b099d7
{
Packit b099d7
    Arg al[ARG_LIST_CNT];
Packit b099d7
    int ac;
Packit b099d7
    XmString empty_string = NULL ;
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    /* set up y value dependent on symbol_wid */
Packit b099d7
Packit b099d7
    ac = 0;
Packit b099d7
    XtSetArg (al[ac], XmNalignment, w->message_box.message_alignment);  ac++;
Packit b099d7
    XtSetArg (al[ac], XmNborderWidth, 0);                               ac++;
Packit b099d7
    XtSetArg (al[ac], XmNtraversalOn, False);                           ac++;
Packit b099d7
    if (w->message_box.message_string) {
Packit b099d7
       XtSetArg(al[ac], XmNlabelString, w->message_box.message_string); ac++;
Packit b099d7
       w->message_box.message_string = NULL;
Packit b099d7
    } else {
Packit b099d7
	/* we don't want "Message", the name of the label, to become
Packit b099d7
	   the label string, it would break the AES */
Packit b099d7
/* BEGIN OSF Fix CR 4847 */
Packit b099d7
	empty_string = XmStringCreateLocalized(XmS);
Packit b099d7
/* END OSF Fix CR 4847 */
Packit b099d7
	XtSetArg(al[ac], XmNlabelString, empty_string); ac++;
Packit b099d7
    }
Packit b099d7
    XtSetArg (al[ac], XmNstringDirection, BB_StringDirection( w)) ;
Packit b099d7
    ac++;
Packit b099d7
Packit b099d7
    w->message_box.message_wid = XmCreateLabelGadget( (Widget) w, "Message",
Packit b099d7
						     al, ac);
Packit b099d7
/* BEGIN OSF Fix CR 4847 */
Packit b099d7
    if (empty_string != NULL) XmStringFree(empty_string);
Packit b099d7
/* END OSF Fix CR 4847 */
Packit b099d7
Packit b099d7
    return ;
Packit b099d7
}
Packit b099d7

Packit b099d7
/****************************************************************/
Packit b099d7
XmGeoMatrix 
Packit b099d7
_XmMessageBoxGeoMatrixCreate(
Packit b099d7
        Widget wid,
Packit b099d7
        Widget instigator,
Packit b099d7
        XtWidgetGeometry *desired )
Packit b099d7
{
Packit b099d7
            XmMessageBoxWidget mb = (XmMessageBoxWidget) wid ;
Packit b099d7
            XmGeoMatrix     geoSpec ;
Packit b099d7
    register XmGeoRowLayout  layoutPtr ;
Packit b099d7
    register XmKidGeometry   boxPtr ;
Packit b099d7
            XmKidGeometry   firstBoxInRow ;
Packit b099d7
            Widget menubar = NULL;
Packit b099d7
            Widget workarea = NULL;
Packit b099d7
            Boolean has_buttons = False;
Packit b099d7
            Boolean has_message = False;
Packit b099d7
            Boolean menubar_adjust = False;
Packit b099d7
            Boolean add_pixmap = False;
Packit b099d7
            int nrows = 2;
Packit b099d7
            int nchildren = mb->composite.num_children;
Packit b099d7
            int i;
Packit b099d7
Packit b099d7
    /*
Packit b099d7
     * Layout MessageBox XmGeoMatrix.
Packit b099d7
     * Each row is terminated by leaving an empty XmKidGeometry and
Packit b099d7
     * moving to the next XmGeoRowLayout.
Packit b099d7
     */
Packit b099d7
Packit b099d7
    /* identify menu bar and work area children. */
Packit b099d7
Packit b099d7
    for (i=0; i < nchildren; i++)
Packit b099d7
    {   register Widget w = mb->composite.children[i];
Packit b099d7
  
Packit b099d7
        if( menubar == NULL   
Packit b099d7
            && XmIsRowColumn(w)
Packit b099d7
            && ((XmRowColumnWidget)w)->row_column.type == XmMENU_BAR)
Packit b099d7
        {   menubar = w;
Packit b099d7
            nrows += 1;
Packit b099d7
            }
Packit b099d7
        else
Packit b099d7
        {    if (IsButton(w))
Packit b099d7
             {   has_buttons = True;
Packit b099d7
                }
Packit b099d7
             else
Packit b099d7
             {   if (workarea == NULL && !IsAutoChild(mb,w))
Packit b099d7
                {   workarea = w;
Packit b099d7
                    nrows += 1;
Packit b099d7
                    } 
Packit b099d7
                }
Packit b099d7
             }
Packit b099d7
         }
Packit b099d7
    if (has_buttons)
Packit b099d7
	nrows += 1;
Packit b099d7
Packit b099d7
    geoSpec = _XmGeoMatrixAlloc( nrows, nchildren, 0) ;
Packit b099d7
    geoSpec->composite = (Widget) mb ;
Packit b099d7
    geoSpec->instigator = (Widget) instigator ;
Packit b099d7
    if (desired)
Packit b099d7
	geoSpec->instig_request = *desired ;
Packit b099d7
    geoSpec->margin_w = BB_MarginWidth( mb) + mb->manager.shadow_thickness ;
Packit b099d7
    geoSpec->margin_h = BB_MarginHeight( mb) + mb->manager.shadow_thickness ;
Packit b099d7
    geoSpec->no_geo_request = _XmMessageBoxNoGeoRequest ;
Packit b099d7
Packit b099d7
    layoutPtr = &(geoSpec->layouts->row) ;
Packit b099d7
    boxPtr = geoSpec->boxes ;
Packit b099d7
Packit b099d7
    /* menu bar */
Packit b099d7
 
Packit b099d7
    if(    menubar && _XmGeoSetupKid( boxPtr, menubar)    )
Packit b099d7
    {   layoutPtr->fix_up = _XmMenuBarFix ;
Packit b099d7
        menubar_adjust = True ;
Packit b099d7
        boxPtr += 2;
Packit b099d7
        ++layoutPtr;
Packit b099d7
        }
Packit b099d7
Packit b099d7
    /* symbol pixmap and message string */
Packit b099d7
Packit b099d7
    firstBoxInRow = boxPtr ;
Packit b099d7
Packit b099d7
    if (LayoutIsRtoLM(mb))
Packit b099d7
    {
Packit b099d7
       if(    _XmGeoSetupKid( boxPtr, mb->message_box.message_wid)    )
Packit b099d7
       {   has_message = True ;
Packit b099d7
	   ++boxPtr ;
Packit b099d7
           }
Packit b099d7
       if(    (mb->message_box.symbol_pixmap != XmUNSPECIFIED_PIXMAP)
Packit b099d7
           && _XmGeoSetupKid( boxPtr, mb->message_box.symbol_wid)    )
Packit b099d7
       {   ++boxPtr ;
Packit b099d7
           }
Packit b099d7
    }
Packit b099d7
    else
Packit b099d7
    {
Packit b099d7
      if(    (mb->message_box.symbol_pixmap != XmUNSPECIFIED_PIXMAP)
Packit b099d7
	 && _XmGeoSetupKid( boxPtr, mb->message_box.symbol_wid)    )
Packit b099d7
	{   ++boxPtr ;
Packit b099d7
	  } 
Packit b099d7
      if(    _XmGeoSetupKid( boxPtr, mb->message_box.message_wid)    )
Packit b099d7
	{   has_message = True ;
Packit b099d7
	    ++boxPtr ;
Packit b099d7
	  } 
Packit b099d7
    }
Packit b099d7
    if(    boxPtr != firstBoxInRow && (workarea == NULL || has_message)    )
Packit b099d7
    {   if(    menubar_adjust    )
Packit b099d7
        {   menubar_adjust = False ;
Packit b099d7
            } 
Packit b099d7
        else
Packit b099d7
        {   layoutPtr->space_above = BB_MarginHeight( mb) ;
Packit b099d7
            } 
Packit b099d7
        layoutPtr->space_between = BB_MarginWidth( mb) ;
Packit b099d7
        ++boxPtr ;
Packit b099d7
        ++layoutPtr ;
Packit b099d7
        firstBoxInRow = boxPtr ;
Packit b099d7
        } 
Packit b099d7
Packit b099d7
    /* work area */
Packit b099d7
Packit b099d7
    if (LayoutIsRtoLM(mb) && !has_message && boxPtr != firstBoxInRow)
Packit b099d7
    {   --boxPtr; /* we want the workarea to the left of the pixmap */
Packit b099d7
	add_pixmap = True;
Packit b099d7
        }
Packit b099d7
      
Packit b099d7
    if(    workarea && _XmGeoSetupKid( boxPtr, workarea)    )
Packit b099d7
    {   ++boxPtr ;
Packit b099d7
        } 
Packit b099d7
Packit b099d7
    if (add_pixmap)
Packit b099d7
      if(    (mb->message_box.symbol_pixmap != XmUNSPECIFIED_PIXMAP)
Packit b099d7
	 && _XmGeoSetupKid( boxPtr, mb->message_box.symbol_wid)    )
Packit b099d7
	{   ++boxPtr ;
Packit b099d7
	  } 
Packit b099d7
Packit b099d7
    if(    boxPtr != firstBoxInRow    )
Packit b099d7
    {   layoutPtr->fill_mode = XmGEO_EXPAND;
Packit b099d7
        layoutPtr->fit_mode = XmGEO_PROPORTIONAL;
Packit b099d7
        if(    menubar_adjust    )
Packit b099d7
        {   menubar_adjust = False;
Packit b099d7
            }
Packit b099d7
        else
Packit b099d7
        {   layoutPtr->space_above = BB_MarginHeight( mb) ;
Packit b099d7
            }
Packit b099d7
        layoutPtr->space_between = BB_MarginWidth(mb);
Packit b099d7
        layoutPtr->stretch_height = True;
Packit b099d7
        layoutPtr->even_height = 1;
Packit b099d7
        boxPtr++;
Packit b099d7
        ++layoutPtr ;
Packit b099d7
        }
Packit b099d7
Packit b099d7
    /* separator */
Packit b099d7
Packit b099d7
    if(    _XmGeoSetupKid( boxPtr, mb->message_box.separator)    )
Packit b099d7
    {   layoutPtr->fix_up = _XmSeparatorFix ;
Packit b099d7
        layoutPtr->space_above = BB_MarginHeight( mb) ;
Packit b099d7
        boxPtr += 2 ;
Packit b099d7
        ++layoutPtr ;
Packit b099d7
        } 
Packit b099d7
Packit b099d7
    /* buttons */
Packit b099d7
Packit b099d7
    if (LayoutIsRtoLM(mb))
Packit b099d7
    {
Packit b099d7
	if(    _XmGeoSetupKid( boxPtr, mb->message_box.help_button)    )
Packit b099d7
	{   ++boxPtr ;
Packit b099d7
	    } 
Packit b099d7
Packit b099d7
	if(    _XmGeoSetupKid( boxPtr, mb->bulletin_board.cancel_button)    )
Packit b099d7
	{   ++boxPtr ;
Packit b099d7
	    } 
Packit b099d7
Packit b099d7
	for (i = 0; i < nchildren; i++)
Packit b099d7
	{
Packit b099d7
	    register Widget w = mb->composite.children[nchildren-i-1];
Packit b099d7
 
Packit b099d7
	    if(   !IsAutoChild(mb,w) && IsButton(w) && _XmGeoSetupKid(boxPtr, w)  )
Packit b099d7
	    {   ++boxPtr;
Packit b099d7
		}
Packit b099d7
	}
Packit b099d7
Packit b099d7
	if(    _XmGeoSetupKid( boxPtr, mb->message_box.ok_button)    )
Packit b099d7
	{   ++boxPtr ;
Packit b099d7
	    } 
Packit b099d7
    }
Packit b099d7
    else
Packit b099d7
    {
Packit b099d7
      if(    _XmGeoSetupKid( boxPtr, mb->message_box.ok_button)    )
Packit b099d7
	{   ++boxPtr ;
Packit b099d7
	  } 
Packit b099d7
      for (i = 0; i < nchildren; i++)
Packit b099d7
	{
Packit b099d7
	  register Widget w = mb->composite.children[i];
Packit b099d7
	  
Packit b099d7
	  if(   !IsAutoChild(mb,w) && IsButton(w) && _XmGeoSetupKid(boxPtr, w)  )
Packit b099d7
	    {   ++boxPtr;
Packit b099d7
	      }
Packit b099d7
        }
Packit b099d7
      if(    _XmGeoSetupKid( boxPtr, mb->bulletin_board.cancel_button)    )
Packit b099d7
	{   ++boxPtr ;
Packit b099d7
	  } 
Packit b099d7
      if(    _XmGeoSetupKid( boxPtr, mb->message_box.help_button)    )
Packit b099d7
	{   ++boxPtr ;
Packit b099d7
	  } 
Packit b099d7
    }
Packit b099d7
Packit b099d7
    if(    has_buttons    )
Packit b099d7
    {   layoutPtr->fill_mode = XmGEO_CENTER ;
Packit b099d7
        layoutPtr->fit_mode = XmGEO_WRAP ;
Packit b099d7
        if(    !mb->message_box.minimize_buttons    )
Packit b099d7
        {   layoutPtr->even_width = 1 ;
Packit b099d7
            } 
Packit b099d7
        layoutPtr->even_height = 1 ;
Packit b099d7
        layoutPtr->space_above = BB_MarginHeight( mb) ;
Packit b099d7
	++layoutPtr ;
Packit b099d7
        } 
Packit b099d7
Packit b099d7
    /* end */
Packit b099d7
Packit b099d7
    layoutPtr->space_above = BB_MarginHeight( mb) ;
Packit b099d7
    layoutPtr->end = TRUE ;
Packit b099d7
    return( geoSpec) ;
Packit b099d7
    }
Packit b099d7
/****************************************************************/
Packit b099d7
Boolean 
Packit b099d7
_XmMessageBoxNoGeoRequest(
Packit b099d7
        XmGeoMatrix geoSpec )
Packit b099d7
{
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    if(    BB_InSetValues( geoSpec->composite)
Packit b099d7
        && (XtClass( geoSpec->composite) == xmMessageBoxWidgetClass)    )
Packit b099d7
    {   
Packit b099d7
        return( TRUE) ;
Packit b099d7
        } 
Packit b099d7
    return( FALSE) ;
Packit b099d7
    }
Packit b099d7

Packit b099d7
Packit b099d7
Packit b099d7
/****************************************************************
Packit b099d7
 * Construct the required captive widgets for the box.  Don't worry about
Packit b099d7
 *   positioning since a layout will happen later on.
Packit b099d7
 ****************/
Packit b099d7
static void 
Packit b099d7
CreateWidgets(
Packit b099d7
        XmMessageBoxWidget w )
Packit b099d7
{
Packit b099d7
    Arg  al[2];
Packit b099d7
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    /* create the symbol label */
Packit b099d7
    if (!(w->message_box.dialog_type == XmDIALOG_TEMPLATE &&
Packit b099d7
	w->message_box.symbol_pixmap == XmUNSPECIFIED_PIXMAP))
Packit b099d7
	SetUpSymbol (w);
Packit b099d7
Packit b099d7
    /* create the message label, after symbol is created */
Packit b099d7
    if (!(w->message_box.dialog_type == XmDIALOG_TEMPLATE &&
Packit b099d7
	w->message_box.message_string == NULL))
Packit b099d7
	SetUpMessage (w);
Packit b099d7
Packit b099d7
    /* create the separator */
Packit b099d7
    XtSetArg (al[0], XmNhighlightThickness, 0);
Packit b099d7
    w->message_box.separator = XmCreateSeparatorGadget( (Widget) w,
Packit b099d7
                                                           "Separator", al, 1);
Packit b099d7
    
Packit b099d7
    /* create all pushbuttons, user can unmanage if they don't want them */
Packit b099d7
Packit b099d7
    /* "Ok" button... if no label, use default localized "OK" string from 
Packit b099d7
       message catalog, or "OK" if no message catatlog, for label */
Packit b099d7
    if (!(w->message_box.dialog_type == XmDIALOG_TEMPLATE &&
Packit b099d7
	w->message_box.ok_label_string == NULL &&
Packit b099d7
	w->message_box.ok_callback == NULL))
Packit b099d7
    {
Packit b099d7
	w->message_box.ok_button = _XmBB_CreateButtonG( (Widget) w,
Packit b099d7
                                        w->message_box.ok_label_string, "OK",
Packit b099d7
					XmOkStringLoc) ;
Packit b099d7
	w->message_box.ok_label_string = NULL;
Packit b099d7
	XtAddCallback( w->message_box.ok_button, XmNactivateCallback, 
Packit b099d7
                                              MessageCallback, (XtPointer) w) ;
Packit b099d7
    }
Packit b099d7
    /* "Cancel" button... if no label, use default localized "Cancel" string from 
Packit b099d7
       message catalog, or "Cancel" if no message catalog, for label */
Packit b099d7
    if (!(w->message_box.dialog_type == XmDIALOG_TEMPLATE &&
Packit b099d7
	w->message_box.cancel_label_string == NULL &&
Packit b099d7
	w->message_box.cancel_callback == NULL))
Packit b099d7
    {
Packit b099d7
	w->bulletin_board.cancel_button = _XmBB_CreateButtonG( (Widget) w,
Packit b099d7
                                w->message_box.cancel_label_string, "Cancel", 
Packit b099d7
				XmCancelStringLoc) ;
Packit b099d7
	w->message_box.cancel_label_string = NULL;
Packit b099d7
	XtAddCallback( w->bulletin_board.cancel_button, XmNactivateCallback, 
Packit b099d7
                                              MessageCallback, (XtPointer) w) ;
Packit b099d7
    }
Packit b099d7
    /* "Help" button... if no label, use default localized "Help" string from 
Packit b099d7
       message catalog, or "Help" if no message catalog, for label */
Packit b099d7
    if (!(w->message_box.dialog_type == XmDIALOG_TEMPLATE &&
Packit b099d7
	w->message_box.help_label_string == NULL &&
Packit b099d7
	w->manager.help_callback == NULL))
Packit b099d7
    {
Packit b099d7
	w->message_box.help_button = _XmBB_CreateButtonG( (Widget) w,
Packit b099d7
                                    w->message_box.help_label_string, "Help",
Packit b099d7
				    XmHelpStringLoc) ;
Packit b099d7
	w->message_box.help_label_string = NULL;
Packit b099d7
Packit b099d7
	/* Remove BulletinBoard Unmanage callback from help button.
Packit b099d7
	*/
Packit b099d7
	XtRemoveAllCallbacks( w->message_box.help_button, XmNactivateCallback) ;
Packit b099d7
	XtAddCallback( w->message_box.help_button, XmNactivateCallback, 
Packit b099d7
                                              MessageCallback, (XtPointer) w) ;
Packit b099d7
    }
Packit b099d7
    /* Now manage all my children.
Packit b099d7
    */
Packit b099d7
    XtManageChildren (w->composite.children, w->composite.num_children);
Packit b099d7
    return ;
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/****************************************************************
Packit b099d7
 * Common create routine for message dialogs...
Packit b099d7
 *   it will create the shell and widgets, and set the dialog_type to
Packit b099d7
 *   whatever has been passed in...
Packit b099d7
 ****************/
Packit b099d7
static Widget 
Packit b099d7
CreateDialog(
Packit b099d7
        Widget parent,
Packit b099d7
        char *name,
Packit b099d7
        ArgList al,
Packit b099d7
        int ac,
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
        unsigned int type )
Packit b099d7
#else
Packit b099d7
        unsigned char type )        /* type of dialog being created */
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
{
Packit b099d7
    Widget w;
Packit b099d7
    ArgList  argsNew;
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
     /* add dialogType to arglist and force to type passed in... */
Packit b099d7
Packit b099d7
    /*  allocate arglist, copy args, add dialog type arg */
Packit b099d7
    argsNew = (ArgList) XtMalloc (sizeof(Arg) * (ac + 1));
Packit b099d7
    memcpy( argsNew, al, sizeof(Arg) * ac);
Packit b099d7
    XtSetArg (argsNew[ac], XmNdialogType, type);  ac++;
Packit b099d7
Packit b099d7
    /*  create MessageBoxDialog free argsNew, return */
Packit b099d7
    w = XmeCreateClassDialog (xmMessageBoxWidgetClass,
Packit b099d7
			      parent, name, argsNew, ac) ;
Packit b099d7
    XtFree((char*)argsNew);
Packit b099d7
    return w ;
Packit b099d7
}
Packit b099d7

Packit b099d7
/****************************************************************/
Packit b099d7
Widget 
Packit b099d7
XmCreateMessageBox(
Packit b099d7
        Widget parent,
Packit b099d7
        char *name,
Packit b099d7
        ArgList al,
Packit b099d7
        Cardinal ac )
Packit b099d7
{
Packit b099d7
    return XtCreateWidget (name, xmMessageBoxWidgetClass, parent, al, ac);
Packit b099d7
}
Packit b099d7

Packit b099d7
Widget 
Packit b099d7
XmVaCreateMessageBox(
Packit b099d7
        Widget parent,
Packit b099d7
        char *name,
Packit b099d7
        ...)
Packit b099d7
{
Packit b099d7
    register Widget w;
Packit b099d7
    va_list var;
Packit b099d7
    int count;
Packit b099d7
    
Packit b099d7
    Va_start(var,name);
Packit b099d7
    count = XmeCountVaListSimple(var);
Packit b099d7
    va_end(var);
Packit b099d7
Packit b099d7
    
Packit b099d7
    Va_start(var, name);
Packit b099d7
    w = XmeVLCreateWidget(name, 
Packit b099d7
                         xmMessageBoxWidgetClass,
Packit b099d7
                         parent, False, 
Packit b099d7
                         var, count);
Packit b099d7
    va_end(var);   
Packit b099d7
    return w;
Packit b099d7
}
Packit b099d7

Packit b099d7
Widget
Packit b099d7
XmVaCreateManagedMessageBox(
Packit b099d7
        Widget parent,
Packit b099d7
        char *name,
Packit b099d7
        ...)
Packit b099d7
{
Packit b099d7
    Widget w = NULL;
Packit b099d7
    va_list var;
Packit b099d7
    int count;
Packit b099d7
    
Packit b099d7
    Va_start(var, name);
Packit b099d7
    count = XmeCountVaListSimple(var);
Packit b099d7
    va_end(var);
Packit b099d7
    
Packit b099d7
    Va_start(var, name);
Packit b099d7
    w = XmeVLCreateWidget(name, 
Packit b099d7
                         xmMessageBoxWidgetClass,
Packit b099d7
                         parent, True, 
Packit b099d7
                         var, count);
Packit b099d7
    va_end(var);   
Packit b099d7
    return w;
Packit b099d7
}
Packit b099d7

Packit b099d7
/****************************************************************/
Packit b099d7
Widget 
Packit b099d7
XmCreateMessageDialog(
Packit b099d7
        Widget parent,
Packit b099d7
        char *name,
Packit b099d7
        ArgList al,
Packit b099d7
        Cardinal ac )
Packit b099d7
{
Packit b099d7
    return CreateDialog (parent, name, al, ac, XmDIALOG_MESSAGE);
Packit b099d7
}
Packit b099d7
/****************************************************************/
Packit b099d7
Widget 
Packit b099d7
XmCreateErrorDialog(
Packit b099d7
        Widget parent,
Packit b099d7
        char *name,
Packit b099d7
        ArgList al,
Packit b099d7
        Cardinal ac )
Packit b099d7
{
Packit b099d7
    return CreateDialog (parent, name, al, ac, XmDIALOG_ERROR);
Packit b099d7
}
Packit b099d7
/****************************************************************/
Packit b099d7
Widget 
Packit b099d7
XmCreateInformationDialog(
Packit b099d7
        Widget parent,
Packit b099d7
        char *name,
Packit b099d7
        ArgList al,
Packit b099d7
        Cardinal ac )
Packit b099d7
{
Packit b099d7
    return CreateDialog (parent, name, al, ac, XmDIALOG_INFORMATION);
Packit b099d7
}
Packit b099d7
/****************************************************************/
Packit b099d7
Widget 
Packit b099d7
XmCreateQuestionDialog(
Packit b099d7
        Widget parent,
Packit b099d7
        char *name,
Packit b099d7
        ArgList al,
Packit b099d7
        Cardinal ac )
Packit b099d7
{
Packit b099d7
    return CreateDialog (parent, name, al, ac, XmDIALOG_QUESTION);
Packit b099d7
}
Packit b099d7
/****************************************************************/
Packit b099d7
Widget 
Packit b099d7
XmCreateWarningDialog(
Packit b099d7
        Widget parent,
Packit b099d7
        char *name,
Packit b099d7
        ArgList al,
Packit b099d7
        Cardinal ac )
Packit b099d7
{
Packit b099d7
    return CreateDialog (parent, name, al, ac, XmDIALOG_WARNING);
Packit b099d7
}
Packit b099d7
/****************************************************************/
Packit b099d7
Widget 
Packit b099d7
XmCreateWorkingDialog(
Packit b099d7
        Widget parent,
Packit b099d7
        char *name,
Packit b099d7
        ArgList al,
Packit b099d7
        Cardinal ac )
Packit b099d7
{
Packit b099d7
    return CreateDialog (parent, name, al, ac, XmDIALOG_WORKING);
Packit b099d7
}
Packit b099d7

Packit b099d7
/****************************************************************/
Packit b099d7
Widget 
Packit b099d7
XmCreateTemplateDialog(
Packit b099d7
        Widget parent,
Packit b099d7
        char *name,
Packit b099d7
        ArgList al,
Packit b099d7
        Cardinal ac )
Packit b099d7
{
Packit b099d7
    return CreateDialog (parent, name, al, ac, XmDIALOG_TEMPLATE);
Packit b099d7
}
Packit b099d7

Packit b099d7
/****************************************************************/
Packit b099d7
Widget 
Packit b099d7
XmMessageBoxGetChild(
Packit b099d7
        Widget widget,
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
        unsigned int child )
Packit b099d7
#else
Packit b099d7
        unsigned char child )
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
{
Packit b099d7
    XmMessageBoxWidget  w = (XmMessageBoxWidget)widget;
Packit b099d7
    Widget child_widget = NULL;
Packit b099d7
    _XmWidgetToAppContext(widget);
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    _XmAppLock(app);
Packit b099d7
    switch (child) {
Packit b099d7
        case XmDIALOG_DEFAULT_BUTTON: 
Packit b099d7
		child_widget =  w->bulletin_board.default_button;
Packit b099d7
		break;
Packit b099d7
        case XmDIALOG_SYMBOL_LABEL:   
Packit b099d7
		child_widget = w->message_box.symbol_wid;
Packit b099d7
		break;
Packit b099d7
        case XmDIALOG_MESSAGE_LABEL:  
Packit b099d7
		child_widget = w->message_box.message_wid;
Packit b099d7
		break;
Packit b099d7
        case XmDIALOG_OK_BUTTON:      
Packit b099d7
		child_widget = w->message_box.ok_button;
Packit b099d7
		break;
Packit b099d7
        case XmDIALOG_CANCEL_BUTTON:  
Packit b099d7
		child_widget = w->bulletin_board.cancel_button;
Packit b099d7
		break;
Packit b099d7
        case XmDIALOG_HELP_BUTTON:    
Packit b099d7
		child_widget = w->message_box.help_button;
Packit b099d7
		break;
Packit b099d7
        case XmDIALOG_SEPARATOR:      
Packit b099d7
		child_widget = w->message_box.separator;
Packit b099d7
		break;
Packit b099d7
        default: 
Packit b099d7
		XmeWarning( (Widget) w, WARNING4); break ;
Packit b099d7
		break;
Packit b099d7
    }
Packit b099d7
    _XmAppUnlock(app);
Packit b099d7
    return child_widget ;
Packit b099d7
}
Packit b099d7
/****************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static void 
Packit b099d7
GetMessageString(
Packit b099d7
        Widget wid,
Packit b099d7
        int resource_offset,	/* unused */
Packit b099d7
        XtArgVal *value )
Packit b099d7
{
Packit b099d7
            XmMessageBoxWidget w = (XmMessageBoxWidget) wid ;
Packit b099d7
    XmString  data;
Packit b099d7
    Arg       al[1];
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    if (w->message_box.message_wid) {
Packit b099d7
        XtSetArg (al[0], XmNlabelString, &data);
Packit b099d7
        XtGetValues (w->message_box.message_wid, al, 1);
Packit b099d7
        *value = (XtArgVal) data;
Packit b099d7
    }
Packit b099d7
    else *value = (XtArgVal) NULL;
Packit b099d7
    return ;
Packit b099d7
}
Packit b099d7
/****************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static void 
Packit b099d7
GetSymbolPixmap(
Packit b099d7
        Widget wid,
Packit b099d7
        int resource_offset,	/* unused */
Packit b099d7
        XtArgVal *value )
Packit b099d7
{
Packit b099d7
            XmMessageBoxWidget w = (XmMessageBoxWidget) wid ;
Packit b099d7
    Pixmap  data;
Packit b099d7
    Arg     al[1];
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    if (w->message_box.symbol_wid) {
Packit b099d7
        XtSetArg (al[0], XmNlabelPixmap, &data);
Packit b099d7
        XtGetValues (w->message_box.symbol_wid, al, 1);
Packit b099d7
        *value = (XtArgVal) data;
Packit b099d7
    }
Packit b099d7
    else *value = (XtArgVal) NULL;
Packit b099d7
    return ;
Packit b099d7
}
Packit b099d7
/****************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static void 
Packit b099d7
GetOkLabelString(
Packit b099d7
        Widget wid,
Packit b099d7
        int resource_offset,	/* unused */
Packit b099d7
        XtArgVal *value )
Packit b099d7
{
Packit b099d7
            XmMessageBoxWidget w = (XmMessageBoxWidget) wid ;
Packit b099d7
    XmString  data;
Packit b099d7
    Arg       al[1];
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    if (w->message_box.ok_button) {
Packit b099d7
        XtSetArg (al[0], XmNlabelString, &data);
Packit b099d7
        XtGetValues (w->message_box.ok_button, al, 1);
Packit b099d7
        *value = (XtArgVal) data;
Packit b099d7
    }
Packit b099d7
    else *value = (XtArgVal) NULL;
Packit b099d7
    return ;
Packit b099d7
}
Packit b099d7
/****************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static void 
Packit b099d7
GetCancelLabelString(
Packit b099d7
        Widget wid,
Packit b099d7
        int resource_offset,	/* unused */
Packit b099d7
        XtArgVal *value )
Packit b099d7
{
Packit b099d7
            XmMessageBoxWidget w = (XmMessageBoxWidget) wid ;
Packit b099d7
    XmString  data;
Packit b099d7
    Arg       al[1];
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    if (w->bulletin_board.cancel_button) {
Packit b099d7
        XtSetArg (al[0], XmNlabelString, &data);
Packit b099d7
        XtGetValues (w->bulletin_board.cancel_button, al, 1);
Packit b099d7
        *value = (XtArgVal) data;
Packit b099d7
    }
Packit b099d7
    else *value = (XtArgVal) NULL;
Packit b099d7
    return ;
Packit b099d7
}
Packit b099d7
/****************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static void 
Packit b099d7
GetHelpLabelString(
Packit b099d7
        Widget wid,
Packit b099d7
        int resource_offset,	/* unused */
Packit b099d7
        XtArgVal *value )
Packit b099d7
{
Packit b099d7
            XmMessageBoxWidget w = (XmMessageBoxWidget) wid ;
Packit b099d7
    XmString  data;
Packit b099d7
    Arg       al[1];
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    if (w->message_box.help_button) {
Packit b099d7
        XtSetArg (al[0], XmNlabelString, &data);
Packit b099d7
        XtGetValues (w->message_box.help_button, al, 1);
Packit b099d7
        *value = (XtArgVal) data;
Packit b099d7
    }
Packit b099d7
    else *value = (XtArgVal) NULL;
Packit b099d7
    return ;
Packit b099d7
}
Packit b099d7
/****************************************************************/
Packit b099d7
static void 
Packit b099d7
GetMsgBoxPixmap(
Packit b099d7
        XmMessageBoxWidget mBox )
Packit b099d7
{
Packit b099d7
    Pixmap          tmpPix = XmUNSPECIFIED_PIXMAP ;
Packit b099d7
    char *          fileName ;
Packit b099d7
    char *          defaultName ;
Packit b099d7
    XmAccessColorDataRec acc_color_rec;
Packit b099d7
   
Packit b099d7
    /* Try to get pixmap from bitmap file or default.
Packit b099d7
    */
Packit b099d7
    switch(    mBox->message_box.dialog_type    ) {   
Packit b099d7
        case XmDIALOG_ERROR: 
Packit b099d7
        {   fileName = "xm_error" ; 
Packit b099d7
            defaultName = "default_xm_error" ;
Packit b099d7
            break ;
Packit b099d7
            } 
Packit b099d7
        case XmDIALOG_INFORMATION:
Packit b099d7
        {   fileName = "xm_information" ;
Packit b099d7
            defaultName = "default_xm_information" ;
Packit b099d7
            break ;
Packit b099d7
            }
Packit b099d7
        case XmDIALOG_QUESTION:
Packit b099d7
        {   fileName = "xm_question" ;
Packit b099d7
            defaultName = "default_xm_question" ;
Packit b099d7
            break ;
Packit b099d7
            }
Packit b099d7
        case XmDIALOG_WARNING:
Packit b099d7
        {   fileName = "xm_warning" ;
Packit b099d7
            defaultName = "default_xm_warning" ;
Packit b099d7
            break ;
Packit b099d7
            }
Packit b099d7
        case XmDIALOG_WORKING:
Packit b099d7
        {   fileName = "xm_working" ;
Packit b099d7
            defaultName = "default_xm_working" ;
Packit b099d7
            break ;
Packit b099d7
            }
Packit b099d7
        default: 
Packit b099d7
        {   fileName = NULL ;
Packit b099d7
            defaultName = NULL ;
Packit b099d7
            break ;
Packit b099d7
            }
Packit b099d7
        }
Packit b099d7
Packit b099d7
    if(    fileName    ){
Packit b099d7
	int depth ;
Packit b099d7
Packit b099d7
	if (_XmGetBitmapConversionModel(XtScreen((Widget)mBox))
Packit b099d7
	    == XmMATCH_DEPTH)
Packit b099d7
	    /* we want pixmap out of xbm, use the plain depth*/
Packit b099d7
	    depth = mBox->core.depth ;
Packit b099d7
	else
Packit b099d7
	    /* we want bitmap out of xbm, use the private convention */
Packit b099d7
	    depth = -mBox->core.depth ;
Packit b099d7
    
Packit b099d7
Packit b099d7
    /* use full color spec, so that one can take advantage of
Packit b099d7
	   symbolic shadow in the symbol pixmap */
Packit b099d7
	acc_color_rec.foreground = mBox->manager.foreground ;
Packit b099d7
	acc_color_rec.background = mBox->core.background_pixel ;
Packit b099d7
	acc_color_rec.top_shadow_color = mBox->manager.top_shadow_color ;
Packit b099d7
	acc_color_rec.bottom_shadow_color = mBox->manager.bottom_shadow_color ;
Packit b099d7
	acc_color_rec.highlight_color = mBox->manager.highlight_color ;
Packit b099d7
	acc_color_rec.select_color = XmUNSPECIFIED_PIXEL ;
Packit b099d7
					
Packit b099d7
	tmpPix = _XmGetScaledPixmap(mBox->core.screen, (Widget)mBox,
Packit b099d7
				    fileName, 
Packit b099d7
				    &acc_color_rec, depth, FALSE, 0) ;
Packit b099d7
 	if(    tmpPix == XmUNSPECIFIED_PIXMAP    ) {   
Packit b099d7
	    tmpPix = _XmGetScaledPixmap(mBox->core.screen,  (Widget)mBox,
Packit b099d7
					 defaultName,
Packit b099d7
					 &acc_color_rec, depth, FALSE, 0) ;
Packit b099d7
	} 
Packit b099d7
    }
Packit b099d7
Packit b099d7
    mBox->message_box.symbol_pixmap = tmpPix ;
Packit b099d7
    mBox->message_box.internal_pixmap = TRUE ;
Packit b099d7
Packit b099d7
    return ;
Packit b099d7
}
Packit b099d7
/****************************************************************/