Beispiel #1
0
int
main(int argc, char **argv)
{
  Widget toplevel, widget, bb, list;
  XtAppContext app;
  XmString item;
  Arg args[10];
  int n = 0;

  XtSetLanguageProc(NULL, NULL, NULL);

  toplevel = XtVaAppInitialize(&app, "ComBox", NULL, 0, &argc, argv, NULL, NULL);

  bb = XmCreateBulletinBoard(toplevel, "bb", NULL, 0);
  XtManageChild(bb);

  XtSetArg(args[n], XmNwidth, 100); n++;
  XtSetArg(args[n], XmNheight, 100); n++;
  widget = XmCreateDrawnButton(bb, "drawnButton", args, n);

  XtAddCallback(widget, XmNexposeCallback, (XtCallbackProc) onExpose,
                (XtPointer)bb);

  XtManageChild(widget);

  XtRealizeWidget(toplevel);

  LessTifTestMainLoop(toplevel);

  exit(0);
}
Beispiel #2
0
/*********************************************************************
 * Function: CreateDA
 *
 *    CreateDA creates a Text Graphic area with the appropriate scroll bars.
 *
 *********************************************************************/
static XtPointer
HelpCreateDA(
    Widget	 parent,
    char	*name,
    short	 vert_flag,
    short	 horz_flag,
    Boolean	 traversal_flag,
    _DtCvValue   honor_size,
    _DtCvRenderType render_type,
    int          rows,
    int          columns,
    unsigned short media_resolution,
    void	(*hyperTextCB)(),
    void	(*resizeCB)(),
    int		(*exec_ok_routine)(),
    XtPointer	 client_data,
    XmFontList	 default_list )
{
    DtHelpDispAreaStruct *pDAS;
    DAArgs DA_args;
    Arg args[20];
    int n;
    int maxFontAscent;
    int maxFontDescent;
    int maxFontCharWidth;
  
    short margin_width;
    short margin_height;
    short shadowThick, highThick;
    Dimension hBarHeight = 0;
    Dimension vBarWidth  = 0;
    Dimension width;
    Boolean   value;

    Widget form;
    Display *dpy = XtDisplay(parent);
    Screen      *retScr = XtScreen(parent);
    int          screen = XScreenNumberOfScreen(retScr);

    Colormap colormap;

    Pixmap		 tile;
    XGCValues		 gcValues;
    unsigned long	 gcMask;

    unsigned long char_width;

    Atom xa_ave_width;

    XFontStruct *tmpFont = NULL;
    XtPointer	 default_font = NULL;
    XRectangle   rectangle[1];

    XmFontContext	fontContext;
    XmFontListEntry	fontEntry;
    XmFontType		fontType;

    /* Allocate the Display Area. */
    pDAS = (DtHelpDispAreaStruct *) XtMalloc(sizeof(DtHelpDispAreaStruct));

   /*
     * get the resources
     */
    XtGetSubresources(parent, &DA_args, name, "XmDrawnButton",
		    Resources, XtNumber(Resources), NULL, 0);

    if (rows <= 0)
	rows = 1;
    if (columns <= 0)
	columns = 1;

    /*
     * initialize the structure variables.
     */
    pDAS->text_selected = False;
    pDAS->primary       = False;
    pDAS->select_state  = _DtHelpNothingDoing;
    pDAS->toc_y         = 0;
    pDAS->toc_base      = 0;
    pDAS->toc_flag      = 0;
    if (traversal_flag)
        pDAS->toc_flag  = _DT_HELP_SHADOW_TRAVERSAL | _DT_HELP_NOT_INITIALIZED;

    pDAS->max_spc       = 0;
    pDAS->cur_spc       = 0;
    pDAS->maxX          = 0;
    pDAS->virtualX      = 0;
    pDAS->firstVisible  = 0;
    pDAS->visibleCount  = rows;
    pDAS->maxYpos       = 0;
    pDAS->neededFlags   = 0;
    pDAS->vert_init_scr = DA_args.initialDelay;
    pDAS->vert_rep_scr  = DA_args.repeatDelay;
    pDAS->horz_init_scr = DA_args.initialDelay;
    pDAS->horz_rep_scr  = DA_args.repeatDelay;
    pDAS->moveThreshold = DA_args.moveThreshold;
    pDAS->marginWidth   = DA_args.marginWidth;
    pDAS->marginHeight  = DA_args.marginHeight;
    pDAS->searchColor   = DA_args.search_color;
    pDAS->depth		= 0;
    pDAS->spc_chars     = NULL;
    pDAS->scr_timer_id  = 0;
    pDAS->def_pix       = 0;
    pDAS->context       = NULL;
    pDAS->vertIsMapped  = False;
    pDAS->horzIsMapped  = False;
    pDAS->lst_topic     = NULL;
    pDAS->nextNonVisible = 0;
    pDAS->media_resolution = media_resolution;
    pDAS->honor_size = honor_size;
    pDAS->render_type = render_type;
    pDAS->dtinfo = 0;
    pDAS->stipple = None;

    /*
     * locale dependant information
     */
    pDAS->nl_to_space      = 1;
    pDAS->cant_begin_chars = NULL;
    pDAS->cant_end_chars   = NULL;
    if (1 < MB_CUR_MAX)
	_DtHelpLoadMultiInfo (&(pDAS->cant_begin_chars),
				&(pDAS->cant_end_chars), &(pDAS->nl_to_space));

    /*
     * initialize the hypertext callback pointer
     */
    pDAS->exec_filter = exec_ok_routine;
    pDAS->hyperCall   = hyperTextCB;
    pDAS->resizeCall  = resizeCB;
    pDAS->clientData  = client_data;

    /*
     * zero out other callback fields
     */
    pDAS->vScrollNotify = NULL ;
    pDAS->armCallback = NULL ;

    /*
     * create the atoms needed
     */
    xa_ave_width = XmInternAtom(dpy, "AVERAGE_WIDTH"     , False);

    /*
     * Malloc for the default font.
     */
    (void) XmeRenderTableGetDefaultFont(DA_args.userFont, &tmpFont);
    if (default_list != NULL &&
		XmFontListInitFontContext (&fontContext, default_list))
      {
	fontEntry = XmFontListNextEntry (fontContext);
	if (fontEntry != NULL)
	    default_font = XmFontListEntryGetFont (fontEntry, &fontType);

	XmFontListFreeFontContext (fontContext);
      }

    /*
     * fake out the next call by using the parent as the display widget
     */
    pDAS->dispWid = parent;
    __DtHelpFontDatabaseInit (pDAS, default_font, fontType, tmpFont);

    /*
     * Get the base font meterics.
     */
    __DtHelpFontMetrics (pDAS->font_info, __DtHelpDefaultFontIndexGet(pDAS),
			&maxFontAscent, &maxFontDescent, &maxFontCharWidth,
			NULL, NULL);

    pDAS->leading    = DA_args.leading;
    pDAS->fontAscent = maxFontAscent;
    pDAS->lineHeight = maxFontAscent + maxFontDescent + pDAS->leading + 1;

    n = __DtHelpDefaultFontIndexGet(pDAS);
    if (n < 0)
        value = get_fontsetproperty(__DtHelpFontSetGet(pDAS->font_info, n),
			xa_ave_width, ((unsigned long *) &(pDAS->charWidth)));
    else
	value = XGetFontProperty(__DtHelpFontStructGet(pDAS->font_info, n),
			xa_ave_width, ((unsigned long *) &(pDAS->charWidth)));

    if (False == value || 0 == pDAS->charWidth)
      {
	int len = maxFontCharWidth;

	if (n < 0)
	    len += XmbTextEscapement(
				__DtHelpFontSetGet(pDAS->font_info,n),"1",1);
	else
	    len += XTextWidth(__DtHelpFontStructGet(pDAS->font_info, n),"1",1);

        pDAS->charWidth = 10 * len / 2;
      }

    /*
     * Create the form to manage the window and scroll bars.
     */
    n = 0;
    XtSetArg(args[n], XmNresizePolicy      , XmRESIZE_ANY);		++n;
    XtSetArg(args[n], XmNshadowType	, XmSHADOW_OUT);		++n;
    form = XmCreateForm(parent, "DisplayAreaForm", args, n);
    XtManageChild(form);

    /*
     * force the shadowThickness to zero. The XmManager will try to set
     * this to one.
     */
    n = 0;
    XtSetArg(args[n], XmNshadowThickness   , 0);			++n;
    XtSetArg(args[n], XmNhighlightThickness, 0);			++n;
    XtSetValues (form, args, n);

    /*
     * get the colors and margin widths and heights
     */
    n = 0;
    XtSetArg (args[n], XmNmarginWidth , &margin_width);		++n;
    XtSetArg (args[n], XmNmarginHeight, &margin_height);	++n;
    XtSetArg (args[n], XmNcolormap    , &colormap);		++n;
    XtGetValues(form, args, n);

    /* Create the vertical scrollbar. */
    pDAS->vertScrollWid = NULL;
    if (vert_flag != _DtHelpNONE)
      {
	if (vert_flag == _DtHelpSTATIC)
	    pDAS->vertIsMapped = True;

	n = 0;
	XtSetArg(args[n], XmNtopAttachment     , XmATTACH_FORM);	++n;
	XtSetArg(args[n], XmNtopOffset         , 0);			++n;
	XtSetArg(args[n], XmNbottomAttachment  , XmATTACH_FORM);	++n;
	XtSetArg(args[n], XmNbottomOffset      , margin_height);	++n;
	XtSetArg(args[n], XmNrightAttachment   , XmATTACH_FORM);	++n;
	XtSetArg(args[n], XmNrightOffset       , 0);			++n;
	XtSetArg(args[n], XmNorientation       , XmVERTICAL);		++n;
	XtSetArg(args[n], XmNtraversalOn       , True);			++n;
	XtSetArg(args[n], XmNhighlightThickness, 1);			++n;
	XtSetArg(args[n], XmNshadowType        , XmSHADOW_IN);		++n;
	XtSetArg(args[n], XmNvalue             , 0);			++n;
	XtSetArg(args[n], XmNminimum           , 0);			++n;
	/* fake out the scrollbar manager, who will init dims to 100 */
	XtSetArg(args[n], XmNheight            , 1);			++n;
	XtSetArg(args[n], XmNmaximum           , 1);			++n;
	XtSetArg(args[n], XmNincrement         , 1);			++n;
	XtSetArg(args[n], XmNpageIncrement     , 1);			++n;
	XtSetArg(args[n], XmNsliderSize        , 1);			++n;
	XtSetArg(args[n], XtNmappedWhenManaged , pDAS->vertIsMapped);	++n;
	pDAS->vertScrollWid = XmCreateScrollBar(form,
					"DisplayDtHelpVertScrollBar", args, n);

	XtManageChild(pDAS->vertScrollWid);
	if (vert_flag != _DtHelpSTATIC)
	    pDAS->neededFlags = _DtHelpSET_AS_NEEDED (pDAS->neededFlags,
						_DtHelpVERTICAL_SCROLLBAR);
  
	XtAddCallback(pDAS->vertScrollWid, XmNdragCallback,
					_DtHelpVertScrollCB, (XtPointer) pDAS);
	XtAddCallback(pDAS->vertScrollWid, XmNincrementCallback,
					_DtHelpVertScrollCB, (XtPointer) pDAS);
	XtAddCallback(pDAS->vertScrollWid, XmNdecrementCallback,
					_DtHelpVertScrollCB, (XtPointer) pDAS);
	XtAddCallback(pDAS->vertScrollWid, XmNpageIncrementCallback,
					_DtHelpVertScrollCB, (XtPointer) pDAS);
	XtAddCallback(pDAS->vertScrollWid, XmNpageDecrementCallback,
					_DtHelpVertScrollCB, (XtPointer) pDAS);
	XtAddCallback(pDAS->vertScrollWid, XmNtoBottomCallback,
					_DtHelpVertScrollCB, (XtPointer) pDAS);
	XtAddCallback(pDAS->vertScrollWid, XmNtoTopCallback,
					_DtHelpVertScrollCB, (XtPointer) pDAS);
	XtAddCallback(pDAS->vertScrollWid, XmNvalueChangedCallback,
					_DtHelpVertScrollCB, (XtPointer) pDAS);

	XtAddEventHandler (pDAS->vertScrollWid, ButtonPressMask, True,
			(XtEventHandler)_DtHelpMoveBtnFocusCB,(XtPointer) pDAS);

      }

    /* Create the horizontal scrollbar. */
    pDAS->horzScrollWid = NULL;
    if (horz_flag != _DtHelpNONE)
      {
	if (horz_flag == _DtHelpSTATIC)
	    pDAS->horzIsMapped = True;

	n = 0;
	XtSetArg(args[n], XmNbottomAttachment  , XmATTACH_FORM);	++n;
	XtSetArg(args[n], XmNbottomOffset      , 0);			++n;
	XtSetArg(args[n], XmNrightAttachment   , XmATTACH_FORM);	++n;
	XtSetArg(args[n], XmNrightOffset       , margin_width);		++n;
	XtSetArg(args[n], XmNleftAttachment    , XmATTACH_FORM);	++n;
	XtSetArg(args[n], XmNleftOffset        , 0);			++n;
	XtSetArg(args[n], XmNorientation       , XmHORIZONTAL);		++n;
	XtSetArg(args[n], XmNtraversalOn       , True);			++n;
	XtSetArg(args[n], XmNhighlightThickness, 1);			++n;
	XtSetArg(args[n], XmNshadowType        , XmSHADOW_IN);		++n;
	XtSetArg(args[n], XmNvalue             , 0);			++n;
	XtSetArg(args[n], XmNminimum           , 0);			++n;
	XtSetArg(args[n], XmNmaximum           , (pDAS->charWidth/10));	++n;
	/* fake out the scrollbar manager, who will init dims to 100 */
	XtSetArg(args[n], XmNwidth             , 1);			++n;
	XtSetArg(args[n], XmNincrement         , (pDAS->charWidth/10));	++n;
	XtSetArg(args[n], XmNpageIncrement     , (pDAS->charWidth/10));	++n;
	XtSetArg(args[n], XmNsliderSize        , (pDAS->charWidth/10));	++n;
	XtSetArg(args[n], XtNmappedWhenManaged , pDAS->horzIsMapped);	++n;
	pDAS->horzScrollWid = XmCreateScrollBar(form,
					"DisplayHorzScrollBar", args, n);
	XtManageChild(pDAS->horzScrollWid);
	if (horz_flag != _DtHelpSTATIC)
	    pDAS->neededFlags = _DtHelpSET_AS_NEEDED (pDAS->neededFlags,
						_DtHelpHORIZONTAL_SCROLLBAR);
  
	XtAddCallback(pDAS->horzScrollWid, XmNdragCallback,
					_DtHelpHorzScrollCB, (XtPointer) pDAS);
	XtAddCallback(pDAS->horzScrollWid, XmNincrementCallback,
					_DtHelpHorzScrollCB, (XtPointer) pDAS);
	XtAddCallback(pDAS->horzScrollWid, XmNdecrementCallback,
					_DtHelpHorzScrollCB, (XtPointer) pDAS);
	XtAddCallback(pDAS->horzScrollWid, XmNpageIncrementCallback,
					_DtHelpHorzScrollCB, (XtPointer) pDAS);
	XtAddCallback(pDAS->horzScrollWid, XmNpageDecrementCallback,
					_DtHelpHorzScrollCB, (XtPointer) pDAS);
	XtAddCallback(pDAS->horzScrollWid, XmNtoBottomCallback,
					_DtHelpHorzScrollCB, (XtPointer) pDAS);
	XtAddCallback(pDAS->horzScrollWid, XmNtoTopCallback,
					_DtHelpHorzScrollCB, (XtPointer) pDAS);
	XtAddCallback(pDAS->horzScrollWid, XmNvalueChangedCallback,
					_DtHelpHorzScrollCB, (XtPointer) pDAS);
      }

    /*
     * check for the horizontal attachments
     */
    n = 0;
    if (horz_flag == _DtHelpSTATIC)
      {
	XtSetArg(args[n], XmNbottomAttachment  , XmATTACH_WIDGET);	++n;
	XtSetArg(args[n], XmNbottomWidget      , pDAS->horzScrollWid);	++n;
      }
    else
      {
	XtSetArg(args[n], XmNbottomAttachment  , XmATTACH_FORM);	++n;
      }

    /*
     * check for the vertical attachments
     */
    if (vert_flag == _DtHelpSTATIC)
      {
	XtSetArg(args[n], XmNrightAttachment   , XmATTACH_WIDGET);	++n;
	XtSetArg(args[n], XmNrightWidget       , pDAS->vertScrollWid);	++n;
      }
    else
      {
	XtSetArg(args[n], XmNrightAttachment  , XmATTACH_FORM);		++n;
      }

    /*
     * do the rest of the arguments
     */
    XtSetArg(args[n], XmNbottomOffset      , margin_height);		++n;
    XtSetArg(args[n], XmNrightOffset       , margin_width);		++n;
    XtSetArg(args[n], XmNtopAttachment     , XmATTACH_FORM);		++n;
    XtSetArg(args[n], XmNtopOffset	   , 0);			++n;
    XtSetArg(args[n], XmNleftAttachment    , XmATTACH_FORM);		++n;
    XtSetArg(args[n], XmNleftOffset	   , 0);			++n;
    XtSetArg(args[n], XmNrecomputeSize     , False);			++n;
    XtSetArg(args[n], XmNpushButtonEnabled , False);			++n;
    XtSetArg(args[n], XmNtraversalOn       , True);			++n;
    XtSetArg(args[n], XmNhighlightThickness, 1);			++n;
    XtSetArg(args[n], XmNshadowType        , XmSHADOW_IN);		++n;
    XtSetArg(args[n], XmNmultiClick	   , XmMULTICLICK_DISCARD);	++n;
    XtSetArg(args[n], XmNuserData  	   , pDAS);			++n;
    pDAS->dispWid = XmCreateDrawnButton(form, name, args, n);
    XtManageChild(pDAS->dispWid);
  
    XtAddCallback(pDAS->dispWid, XmNexposeCallback, _DtHelpExposeCB,
						(XtPointer) pDAS);
    XtAddCallback(pDAS->dispWid, XmNresizeCallback, _DtHelpResizeCB,
						(XtPointer) pDAS);
    XtAddCallback(pDAS->dispWid, XmNarmCallback, _DtHelpClickOrSelectCB,
						(XtPointer) pDAS);
    XtAddCallback(pDAS->dispWid, XmNdisarmCallback, _DtHelpEndSelectionCB,
						(XtPointer) pDAS);

    XtAddEventHandler (pDAS->dispWid, Button1MotionMask, True,
			(XtEventHandler)_DtHelpMouseMoveCB, (XtPointer) pDAS);

    /*
     * add my actions
     * parse the translations.
     */
    _DtHelpProcessLock();
    if (DrawnBTrans == NULL)
        DrawnBTrans = XtParseTranslationTable(DrawnBTransTable);

     /*
     * override the translations
    XtSetArg(args[n], XmNtranslations	   , DrawnBTrans);		++n;
     */
    if (DrawnBTrans != NULL)
	XtOverrideTranslations(pDAS->dispWid, DrawnBTrans);
    _DtHelpProcessUnlock();
  
    if (_XmGetFocusPolicy(parent) == XmPOINTER)
      {
	XtAddEventHandler (pDAS->dispWid, EnterWindowMask, True,
			(XtEventHandler)_DtHelpEnterLeaveCB, (XtPointer) pDAS);
	XtAddEventHandler (pDAS->dispWid, LeaveWindowMask, True,
			(XtEventHandler)_DtHelpEnterLeaveCB, (XtPointer) pDAS);
      }
    else
	XtAddEventHandler (pDAS->dispWid, FocusChangeMask, True,
			(XtEventHandler)_DtHelpFocusCB, (XtPointer) pDAS);

    XtAddEventHandler (pDAS->dispWid, VisibilityChangeMask, True,
			(XtEventHandler)_DtHelpVisibilityCB, (XtPointer) pDAS);
  

    /* Add a destroy callback so that the display area can clean up prior to
     * the help widget getting destroyed (e.g. display area's parent) 
     */
    XtAddCallback(pDAS->dispWid, XmNdestroyCallback,
				_DtHelpDisplayAreaDestroyCB, (XtPointer) pDAS);
  
    n = 0;
    XtSetArg(args[n], XmNshadowThickness   , &shadowThick);	++n;
    XtSetArg(args[n], XmNhighlightThickness, &highThick);	++n;
    XtSetArg(args[n], XmNforeground    , &(pDAS->foregroundColor)); ++n;
    XtSetArg(args[n], XmNbackground    , &(pDAS->backgroundColor)); ++n;
    XtSetArg(args[n], XmNhighlightColor, &(pDAS->traversalColor) ); ++n;
    XtSetArg(args[n], XmNdepth         , &(pDAS->depth)          ); ++n;
    XtGetValues(pDAS->dispWid, args, n);
    pDAS->decorThickness = shadowThick + highThick;

    /*
     * Get the underline information
     */
    GetUnderLineInfo (dpy, pDAS, &(pDAS->lineThickness));

    /*
     * get the tiling pattern.
     */
    tile = XmGetPixmap (XtScreen(pDAS->dispWid), "50_foreground",
				pDAS->foregroundColor, pDAS->backgroundColor);

    /*
     * Get the data for the graphics contexts and create the GC's.
     */
    gcMask = (GCFunction   | GCPlaneMask   | GCForeground  |
		GCBackground  | GCLineWidth   | GCLineStyle   |
		GCClipXOrigin | GCClipYOrigin | GCClipMask);

    gcValues.function      = GXcopy;
    gcValues.plane_mask    = AllPlanes;
    gcValues.foreground    = pDAS->foregroundColor;
    gcValues.background    = pDAS->backgroundColor;
    gcValues.line_style    = LineSolid;
    gcValues.line_width    = pDAS->lineThickness;
    gcValues.clip_x_origin = 0;
    gcValues.clip_y_origin = 0;
    gcValues.clip_mask     = None;
    if (tile)
      {
	gcMask |= GCTile;
	gcValues.tile = tile;
      }
 
    pDAS->normalGC = XCreateGC(dpy,
		RootWindowOfScreen(XtScreen(pDAS->dispWid)), gcMask, &gcValues);

    gcMask &= (~GCTile);
    pDAS->pixmapGC = XCreateGC(dpy,
		RootWindowOfScreen(XtScreen(pDAS->dispWid)), gcMask, &gcValues);
  
    gcValues.foreground = pDAS->backgroundColor;
    gcValues.background = pDAS->foregroundColor;
    pDAS->invertGC = XCreateGC(dpy,
		RootWindowOfScreen(XtScreen(pDAS->dispWid)), gcMask, &gcValues);
  
    /*
     * Set the size of the text view area to the requested
     * number of columns and lines.
     */
    char_width          = pDAS->charWidth * columns;

    /*
     * Make sure the margins include enough room for a traversal line
     */
    if (((int) pDAS->marginWidth) < pDAS->lineThickness)
	pDAS->marginWidth = pDAS->lineThickness;
    if (((int) pDAS->marginHeight) < pDAS->lineThickness)
	pDAS->marginHeight = pDAS->lineThickness;
    if (pDAS->leading < pDAS->lineThickness)
	pDAS->leading = pDAS->lineThickness;

    /*
     * get the scrollbar widths.
     */
    if (NULL != pDAS->horzScrollWid)
      {
	n = 0;
	XtSetArg(args[n], XmNheight      , &hBarHeight); n++;
	XtSetArg(args[n], XmNinitialDelay, &(pDAS->horz_init_scr)); n++;
	XtSetArg(args[n], XmNrepeatDelay , &(pDAS->horz_rep_scr));  n++;
	XtGetValues(pDAS->horzScrollWid, args, n);
      }

    if (NULL != pDAS->vertScrollWid)
      {
	n = 0;
	XtSetArg(args[n], XmNwidth       , &vBarWidth);             n++;
	XtSetArg(args[n], XmNinitialDelay, &(pDAS->vert_init_scr)); n++;
	XtSetArg(args[n], XmNrepeatDelay , &(pDAS->vert_rep_scr));  n++;
	XtGetValues(pDAS->vertScrollWid, args, n);
      }

    /*
     * calculate the display area height/width
     */
    pDAS->dispUseWidth  = ((int) (char_width / 10 + (char_width % 10 ? 1 : 0)))
					      + 2 * pDAS->marginWidth;
    if (vert_flag != _DtHelpSTATIC && pDAS->dispUseWidth < vBarWidth)
	pDAS->dispUseWidth = vBarWidth;
    pDAS->dispWidth     = pDAS->dispUseWidth  + 2 * pDAS->decorThickness;

    pDAS->dispUseHeight = pDAS->lineHeight * rows;
    if (horz_flag != _DtHelpSTATIC && pDAS->dispUseHeight < hBarHeight)
	pDAS->dispUseHeight = hBarHeight;
    pDAS->dispHeight    = pDAS->dispUseHeight + 2 * pDAS->decorThickness;

    /*
     * Truncate the width and height to the size of the display.
     * This will prevent an X protocal error when it is asked for
     * a too large size. Besides, any decent window manager will
     * force the overall size to the height and width of the display.
     * This simply refines the size down to a closer (but not perfect)
     * fit.
     */
    if (((int) pDAS->dispWidth) > XDisplayWidth (dpy, screen)) {
	pDAS->dispWidth = XDisplayWidth (dpy, screen);
    }
    if (((int) pDAS->dispHeight) > XDisplayHeight (dpy, screen)) {
	pDAS->dispHeight = XDisplayHeight (dpy, screen);
    }

    n = 0;
    pDAS->formWidth  = 0;
    pDAS->formHeight = 0;
    XtSetArg(args[n], XmNwidth, pDAS->dispWidth);		++n;
    XtSetArg(args[n], XmNheight, pDAS->dispHeight);		++n;
    XtSetValues(pDAS->dispWid, args, n);

    /*
     * set the scroll bar values
     */
    if (pDAS->vertScrollWid != NULL)
      {
        n = 0;
        XtSetArg(args[n], XmNmaximum           , pDAS->dispUseHeight);	++n;
        XtSetArg(args[n], XmNincrement         , pDAS->lineHeight);	++n;
        XtSetArg(args[n], XmNpageIncrement     , pDAS->lineHeight);	++n;
        XtSetArg(args[n], XmNsliderSize        , pDAS->dispUseHeight);	++n;
        XtSetValues(pDAS->vertScrollWid, args, n);
      }
  
    if (pDAS->resizeCall)
	(*(pDAS->resizeCall)) (pDAS->clientData);

    /*
     * calculate the offset for the right edge of the
     * horizontal scrollbar.
     */
    if (vert_flag == _DtHelpSTATIC && pDAS->horzScrollWid)
      {
	width = vBarWidth + margin_width;

	XtSetArg(args[0], XmNrightOffset , width);
	XtSetValues(pDAS->horzScrollWid, args, 1);
      }

    /*
     * calculate the offset for the bottom end of the
     * vertical scrollbar.
     */
    if (horz_flag == _DtHelpSTATIC && pDAS->vertScrollWid)
      {
	width = hBarHeight + margin_height;

	XtSetArg(args[0], XmNbottomOffset , width);
	XtSetValues(pDAS->vertScrollWid, args, 1);
      }

    rectangle[0].x      = pDAS->decorThickness;
    rectangle[0].y      = pDAS->decorThickness;
    rectangle[0].width  = pDAS->dispUseWidth;
    rectangle[0].height = pDAS->dispUseHeight;
    XSetClipRectangles(XtDisplay(pDAS->dispWid), pDAS->normalGC, 0, 0,
						rectangle, 1, Unsorted);
    XSetClipRectangles(XtDisplay(pDAS->dispWid), pDAS->invertGC, 0, 0,
						rectangle, 1, Unsorted);

    /*
     * get the colormap and the visual
     */
    if (!XtIsShell(parent) && XtParent(parent) != NULL)
	parent = XtParent(parent);

    pDAS->visual = NULL;

    n = 0;
    XtSetArg (args[n], XmNcolormap, &(pDAS->colormap)); n++;
    XtSetArg (args[n], XmNvisual  , &(pDAS->visual  )); n++;
    XtGetValues (parent, args, n);

    if (pDAS->visual == NULL)
	pDAS->visual = XDefaultVisualOfScreen(XtScreen(pDAS->dispWid));

    /*
     * set up the canvas
     */
    _DtHelpProcessLock();
    DefVirtFunctions.exec_cmd_filter = exec_ok_routine;

    pDAS->canvas = _DtCanvasCreate (DefVirtFunctions, (_DtCvPointer) pDAS);
    _DtHelpProcessUnlock();

    return (XtPointer) pDAS;

}  /* End _DtHelpCreateDA */
Beispiel #3
0
Widget XmCreateDrawnButton_TNK(Widget parent, String name, ArgList arglist,Cardinal argcount) { return XmCreateDrawnButton(parent, name, arglist, argcount);}
Beispiel #4
0
Widget CreatePcpTools (Widget FM)
/************************************************************************
*
*_Title CreatePcpTools - Create PCP tools at bottom of display window.
*
*_Args  Type   Variable                 I/O     Description
*_Parm  Widget  FM                      I       Main Form id 
*_Parm  Widget  CreatePcpTools          O       Output PCP tool widget id
 
*_Hist  Nov 10 2001 Janet Barrett, USGS Flagstaff, Original Version
*
*_End
***********************************************************************/


{
  Widget liteClue;
  Widget FM2;
  Widget RC,RC1,RC2,RC3,RC4,RC5,RC6,RC7;
  Widget PB;
  Widget RB;
  Widget LB;
  Widget FR1,FR2,FR,FRL,FRR;
  static Widget pcplist[15];
  Pixmap pmap;
  unsigned long fg,bg;
  unsigned long fg2,bg2;
  XmString xstring;
  char *sptr;
  XFontStruct *font1;
  XmFontList fontlist;
  XColor closest;
  XColor exact;

  font1 = XLoadQueryFont (xinfo.display,
          "-adobe-courier-medium-r-normal--12-100-100-100-m-90-iso8859-1");
  fontlist = XmFontListCreate (font1,"charset1");

  sptr = (char *) GBLwork.work[0];

  bg2 = WhitePixelOfScreen (xinfo.screen);
  fg2 = BlackPixelOfScreen (xinfo.screen);

  liteClue = XtCreatePopupShell("popup_shell",xcgLiteClueWidgetClass,
             xinfo.topShell,NULL,0);
  XAllocNamedColor(xinfo.display,xinfo.cmap,"lightyellow",
                   &closest,&exact);
  XtVaSetValues (liteClue,XmNbackground,closest.pixel,NULL);
  XtVaSetValues (liteClue,XmNforeground,fg2,NULL);

/**************************************************************************
* Get the background and foreground colors used by the parent widget and
* then create the row/column for the tool bar
**************************************************************************/

  XtVaGetValues (FM,XmNbackground,&bg,
                    XmNforeground,&fg,
                    NULL);

  FM2 = XmCreateForm (FM,"PcpTools",NULL,0);

  FRL = XmCreateFrame (FM2,"FRL",NULL,0);
  XtVaSetValues (FRL,XmNshadowType,XmSHADOW_ETCHED_IN,
                    XmNtopAttachment,XmATTACH_FORM,
                    XmNbottomAttachment,XmATTACH_FORM,
                    XmNleftAttachment,XmATTACH_FORM,
/*		    XmNmarginHeight,5,
		    XmNmarginWidth,5,*/
		    NULL);
  XtManageChild (FRL);

  FRR = XmCreateFrame (FM2,"FRR",NULL,0);
  XtVaSetValues (FRR,XmNshadowType,XmSHADOW_ETCHED_IN,
                    XmNtopAttachment,XmATTACH_FORM,
                    XmNbottomAttachment,XmATTACH_FORM,
                    XmNleftAttachment,XmATTACH_WIDGET,
		    XmNleftWidget,FRL,
                    XmNrightAttachment,XmATTACH_FORM,
/*		    XmNmarginHeight,5,
		    XmNmarginWidth,5,*/
		    NULL);
  XtManageChild (FRR);

  RC = XmCreateRowColumn (FRL,"RC",NULL,0);
  XtVaSetValues (RC,XmNorientation,XmHORIZONTAL,
                 NULL);
  XtManageChild (RC);

  RC1 = XmCreateRowColumn (RC,"RC1",NULL,0);
  XtVaSetValues (RC1,XmNorientation,XmVERTICAL,
/*		 XmNspacing,5,*/
		 XmNtopAttachment,XmATTACH_WIDGET,
		 XmNtopWidget,RC,
		 XmNbottomAttachment,XmATTACH_WIDGET,
		 XmNbottomWidget,RC,
		 XmNleftAttachment,XmATTACH_WIDGET,
		 XmNleftWidget,RC,
/*		 XmNmarginHeight,5,
		 XmNmarginWidth,25,*/
                 NULL);
  XtManageChild (RC1);

  RC2 = XmCreateRowColumn (RC1,"RC2",NULL,0);
  XtVaSetValues (RC2,XmNorientation,XmHORIZONTAL,
		 XmNspacing,6,
		 XmNtopAttachment,XmATTACH_WIDGET,
		 XmNtopWidget,RC1,
		 XmNleftAttachment,XmATTACH_WIDGET,
		 XmNleftWidget,RC1,
		 XmNrightAttachment,XmATTACH_WIDGET,
		 XmNrightWidget,RC1,
                 NULL);
  XtManageChild (RC2);

  RC3 = XmCreateRowColumn (RC1,"RC3",NULL,0);
  XtVaSetValues (RC3,XmNorientation,XmHORIZONTAL,
/*		 XmNspacing,120,*/
		 XmNspacing,13,
		 XmNtopAttachment,XmATTACH_WIDGET,
		 XmNtopWidget,RC2,
		 XmNleftAttachment,XmATTACH_WIDGET,
		 XmNleftWidget,RC1,
		 XmNbottomAttachment,XmATTACH_WIDGET,
		 XmNbottomWidget,RC1,
		 XmNrightAttachment,XmATTACH_WIDGET,
		 XmNrightWidget,RC1,
                 NULL);
  XtManageChild (RC3);

  FR = XmCreateFrame (RC1,"FR",NULL,0);
  XtVaSetValues (FR,XmNshadowType,XmSHADOW_ETCHED_IN,
                    XmNtopAttachment,XmATTACH_WIDGET,
		    XmNtopWidget,RC3,
                    XmNbottomAttachment,XmATTACH_WIDGET,
		    XmNbottomWidget,RC1,
                    XmNleftAttachment,XmATTACH_WIDGET,
		    XmNleftWidget,RC1,
                    XmNrightAttachment,XmATTACH_WIDGET,
		    XmNrightWidget,RC1,
/*		    XmNmarginHeight,5,
		    XmNmarginWidth,5,*/
		    NULL);
  XtManageChild (FR);

  RC4 = XmCreateRowColumn (FR,"RC4",NULL,0);
  XtVaSetValues (RC4,XmNorientation,XmHORIZONTAL,
		 XmNradioBehavior,True,
		 XmNradioAlwaysOne,True,
                 NULL);
  XtManageChild (RC4);

  RC5 = XmCreateRowColumn (FRR,"RC5",NULL,0);
  XtVaSetValues (RC5,XmNorientation,XmVERTICAL,
/*		 XmNspacing,10,*/
		 XmNtopAttachment,XmATTACH_WIDGET,
		 XmNtopWidget,FRR,
		 XmNleftAttachment,XmATTACH_WIDGET,
		 XmNleftWidget,FRR,
		 XmNrightAttachment,XmATTACH_WIDGET,
		 XmNrightWidget,FRR,
		 XmNbottomAttachment,XmATTACH_WIDGET,
		 XmNbottomWidget,FRR,
/*		 XmNmarginHeight,5,
		 XmNmarginWidth,35,*/
                 NULL);
  XtManageChild (RC5);

  RC7 = XmCreateRowColumn (RC5,"RC7",NULL,0);
  XtVaSetValues (RC7,XmNorientation,XmHORIZONTAL,
                 NULL);
  XtManageChild (RC7);

/*  FR1 = XmCreateFrame (RC7,"FR1",NULL,0);
  XtVaSetValues (FR1,XmNshadowType,XmSHADOW_ETCHED_IN,
                    XmNbottomAttachment,XmATTACH_WIDGET,
		    XmNbottomWidget,RC7,
                    XmNleftAttachment,XmATTACH_WIDGET,
		    XmNleftWidget,RC7,
                    XmNtopAttachment,XmATTACH_WIDGET,
		    XmNtopWidget,RC7,
		    NULL);
  XtManageChild (FR1);*/

  FR2 = XmCreateFrame (RC7,"FR2",NULL,0);
  XtVaSetValues (FR2,XmNshadowType,XmSHADOW_ETCHED_IN,
                    XmNbottomAttachment,XmATTACH_WIDGET,
		    XmNbottomWidget,RC7,
/*                    XmNleftAttachment,XmATTACH_WIDGET,
		    XmNleftWidget,FR1,*/
                    XmNtopAttachment,XmATTACH_WIDGET,
		    XmNtopWidget,RC7,
                    XmNrightAttachment,XmATTACH_WIDGET,
		    XmNrightWidget,RC7,
		    NULL);
  XtManageChild (FR2);

/*  RC6 = XmCreateRowColumn (FR1,"RC6",NULL,0);
  XtVaSetValues (RC6,XmNorientation,XmHORIZONTAL,
		 XmNradioBehavior,True,
		 XmNradioAlwaysOne,True,
                 NULL);
  XtManageChild (RC6);*/

  RC7 = XmCreateRowColumn (FR2,"RC7",NULL,0);
  XtVaSetValues (RC7,XmNorientation,XmHORIZONTAL,
		 XmNradioBehavior,True,
		 XmNradioAlwaysOne,True,
                 NULL);
  XtManageChild (RC7);

/**************************************************************************
* Create the go pushbutton
**************************************************************************/

  XAllocNamedColor(xinfo.display,xinfo.cmap,"green",
                   &closest,&exact);

  pmap = XCreatePixmapFromBitmapData (xinfo.display,xinfo.root,
                              (char *)go_bits,go_width,go_height,
                              closest.pixel,bg,xinfo.depth);
/*                              fg,bg,xinfo.depth);*/

  PB = XmCreateDrawnButton (RC2,"goPB",NULL,0);
  XtVaSetValues (PB,XmNlabelPixmap,pmap,
                    XmNlabelType,XmPIXMAP,
                    XmNpushButtonEnabled,True,
                    XmNuserData,((int) V_GO_BTN),
		    XmNalignment,XmALIGNMENT_CENTER,
		    XmNwidth,31,
		    XmNheight,31,
                    NULL);
  XtManageChild (PB);
  
  XtAddCallback (PB,XmNactivateCallback,CBtoolPcpPB,(XtPointer) pcplist);
  XcgLiteClueAddWidget(liteClue,PB,"Start NR Iteration",0,0);

  pcplist[1] = PB;

/**************************************************************************
* Create the go 1 step pushbutton
**************************************************************************/

  XAllocNamedColor(xinfo.display,xinfo.cmap,"green",
                   &closest,&exact);

  pmap = XCreatePixmapFromBitmapData (xinfo.display,xinfo.root,
                              (char *)go1_bits,go1_width,go1_height,
                              closest.pixel,bg,xinfo.depth);
/*                              fg,bg,xinfo.depth);*/

  PB = XmCreateDrawnButton (RC2,"go1PB",NULL,0);
  XtVaSetValues (PB,XmNlabelPixmap,pmap,
                    XmNlabelType,XmPIXMAP,
                    XmNpushButtonEnabled,True,
                    XmNuserData,((int) V_GO1_BTN),
		    XmNalignment,XmALIGNMENT_CENTER,
		    XmNwidth,31,
		    XmNheight,31,
                    NULL);
  XtManageChild (PB);
  
  XtAddCallback (PB,XmNactivateCallback,CBtoolPcpPB,(XtPointer) pcplist);
  XcgLiteClueAddWidget(liteClue,PB,"Do 1 NR Step",0,0);
  pcplist[2] = PB;

/**************************************************************************
* Create the pause pushbutton
**************************************************************************/

  pmap = XCreatePixmapFromBitmapData (xinfo.display,xinfo.root,
                              (char *)pause_bits,pause_width,pause_height,
                              fg,bg,xinfo.depth);

  PB = XmCreateDrawnButton (RC2,"pausePB",NULL,0);
  XtVaSetValues (PB,XmNlabelPixmap,pmap,
                    XmNlabelType,XmPIXMAP,
                    XmNpushButtonEnabled,True,
                    XmNuserData,((int) V_PAUSE_BTN),
		    XmNalignment,XmALIGNMENT_CENTER,
 		    XmNwidth,31,
		    XmNheight,31,
                    NULL);
  XtManageChild (PB);

  XtAddCallback (PB,XmNactivateCallback,CBtoolPcpPB,(XtPointer) pcplist);
  XcgLiteClueAddWidget(liteClue,PB,"Stop NR Iteration",0,0);
  pcplist[3] = PB;

/**************************************************************************
* Create the resolution down pushbutton
**************************************************************************/

  XAllocNamedColor(xinfo.display,xinfo.cmap,"lightgoldenrod1",
                   &closest,&exact);

  pmap = XCreatePixmapFromBitmapData (xinfo.display,xinfo.root,
                              (char *)resdn_bits,resdn_width,resdn_height,
                              closest.pixel,bg,xinfo.depth);
/*                              fg,bg,xinfo.depth);*/

  PB = XmCreateDrawnButton (RC2,"resdnPB",NULL,0);
  XtVaSetValues (PB,XmNlabelPixmap,pmap,
                    XmNlabelType,XmPIXMAP,
                    XmNpushButtonEnabled,True,
                    XmNuserData,((int) V_RESDN_BTN),
		    XmNalignment,XmALIGNMENT_CENTER,
		    XmNwidth,31,
		    XmNheight,31,
                    NULL);
  XtManageChild (PB);

  XtAddCallback (PB,XmNactivateCallback,CBtoolPcpPB,(XtPointer) pcplist);
  XcgLiteClueAddWidget(liteClue,PB,"Decrease Res",0,0);
  pcplist[4] = PB;

/**************************************************************************
* Create the resolution up pushbutton
**************************************************************************/

  XAllocNamedColor(xinfo.display,xinfo.cmap,"lightskyblue",
                   &closest,&exact);

  pmap = XCreatePixmapFromBitmapData (xinfo.display,xinfo.root,
                              (char *)resup_bits,resup_width,resup_height,
                              closest.pixel,bg,xinfo.depth);
/*                              fg,bg,xinfo.depth);*/

  PB = XmCreateDrawnButton (RC2,"resupPB",NULL,0);
  XtVaSetValues (PB,XmNlabelPixmap,pmap,
                    XmNlabelType,XmPIXMAP,
                    XmNpushButtonEnabled,True,
                    XmNuserData,((int) V_RESUP_BTN),
		    XmNalignment,XmALIGNMENT_CENTER,
		    XmNwidth,31,
		    XmNheight,31,
                    NULL);
  XtManageChild (PB);

  XtAddCallback (PB,XmNactivateCallback,CBtoolPcpPB,(XtPointer) pcplist);
  XcgLiteClueAddWidget(liteClue,PB,"Increase Res",0,0);
  XtSetSensitive(PB,False);
  pcplist[5] = PB;

/**************************************************************************
* Create the Done pushbutton
**************************************************************************/

  XAllocNamedColor(xinfo.display,xinfo.cmap,"red",&closest,&exact);

  pmap = XCreatePixmapFromBitmapData (xinfo.display,xinfo.root,
                              (char *)stop_bits,stop_width,stop_height,
                              closest.pixel,bg,xinfo.depth);
/*                              fg,bg,xinfo.depth);*/

  PB = XmCreateDrawnButton (RC2,"stopPB",NULL,0);
  XtVaSetValues (PB,XmNlabelPixmap,pmap,
                    XmNlabelType,XmPIXMAP,
                    XmNpushButtonEnabled,True,
                    XmNuserData,((int) V_DONE_BTN),
		    XmNalignment,XmALIGNMENT_CENTER,
		    XmNwidth,31,
		    XmNheight,31,
                    NULL);
  XtManageChild (PB);

  XtAddCallback (PB,XmNactivateCallback,CBtoolPcpPB,(XtPointer) pcplist);
  XcgLiteClueAddWidget(liteClue,PB,"Exit Program",0,0);
  pcplist[6] = PB;

/**************************************************************************
* Create the Back (undo) pushbutton
**************************************************************************/

  pmap = XCreatePixmapFromBitmapData (xinfo.display,xinfo.root,
                              (char *)back_bits,back_width,back_height,
                              fg,bg,xinfo.depth);

  PB = XmCreateDrawnButton (RC2,"backPB",NULL,0);
  XtVaSetValues (PB,XmNlabelPixmap,pmap,
                    XmNlabelType,XmPIXMAP,
                    XmNpushButtonEnabled,True,
                    XmNuserData,((int) V_BACK_BTN),
		    XmNalignment,XmALIGNMENT_CENTER,
 		    XmNwidth,31,
		    XmNheight,31,
                    NULL);
  XtSetSensitive(PB,False);
  XtManageChild (PB);

  XtAddCallback (PB,XmNactivateCallback,CBtoolPcpPB,(XtPointer) pcplist);
  XcgLiteClueAddWidget(liteClue,PB,"Undo 1 NR Step",0,0);
  pcplist[7] = PB;

/**************************************************************************
* Create the Azimuth of Characteristics text field
**************************************************************************/
  charazLB = XmCreateLabel (RC5,"Az of Characteristics=",NULL,0);
  sprintf(sptr,"Az of Characteristics=%f",charazgrid);
  xstring = XmStringCreateSimple(sptr);
  XtVaSetValues (charazLB,XmNfontList,fontlist,
                    XmNlabelString,xstring,
		    XmNtopAttachment,XmATTACH_WIDGET,
		    XmNtopWidget,RC5,
		    XmNleftAttachment,XmATTACH_WIDGET,
		    XmNleftWidget,RC5,
		    XmNrightAttachment,XmATTACH_WIDGET,
		    XmNrightWidget,RC5,
		    XmNmarginHeight,0,
		    XmNmarginWidth,0,
                    NULL);
  XtManageChild (charazLB);
  XmStringFree(xstring);

/**************************************************************************
* Create the Resolution factor text field
**************************************************************************/
  fmagLB = XmCreateLabel (RC5,"Resolution factor=1",NULL,0);
  sprintf(sptr,"Resolution factor=1");
  xstring = XmStringCreateSimple(sptr);
  XtVaSetValues (fmagLB,XmNfontList,fontlist,
                    XmNlabelString,xstring,
		    XmNtopAttachment,XmATTACH_WIDGET,
		    XmNtopWidget,charazLB,
		    XmNleftAttachment,XmATTACH_WIDGET,
		    XmNleftWidget,RC5,
		    XmNrightAttachment,XmATTACH_WIDGET,
		    XmNrightWidget,RC5,
		    XmNmarginHeight,0,
		    XmNmarginWidth,0,
                    NULL);
  XtManageChild (fmagLB);
  XmStringFree(xstring);

/**************************************************************************
* Create the RMS right hand side and B error text field
**************************************************************************/
  rmsrhsberLB = XmCreateLabel (RC5,"RMS righthand side,B error=",NULL,0);
  sprintf(sptr,"RMS righthand side,B error=");
  xstring = XmStringCreateSimple(sptr);
  XtVaSetValues (rmsrhsberLB,XmNfontList,fontlist,
                    XmNlabelString,xstring,
		    XmNtopAttachment,XmATTACH_WIDGET,
		    XmNtopWidget,fmagLB,
		    XmNleftAttachment,XmATTACH_WIDGET,
		    XmNleftWidget,RC5,
		    XmNrightAttachment,XmATTACH_WIDGET,
		    XmNrightWidget,RC5,
		    XmNmarginHeight,0,
		    XmNmarginWidth,0,
                    NULL);
  XtManageChild (rmsrhsberLB);
  XmStringFree(xstring);

/**************************************************************************
* Create the Dip,Az of dip (degrees) text field
**************************************************************************/
  dipLB = XmCreateLabel (RC5,"Dip,Az of dip (degrees)=",NULL,0);
  sprintf(sptr,"Dip,Az of dip (degrees)=");
  xstring = XmStringCreateSimple(sptr);
  XtVaSetValues (dipLB,XmNfontList,fontlist,
                    XmNlabelString,xstring,
		    XmNtopAttachment,XmATTACH_WIDGET,
		    XmNtopWidget,rmsrhsberLB,
		    XmNleftAttachment,XmATTACH_WIDGET,
		    XmNleftWidget,RC5,
		    XmNrightAttachment,XmATTACH_WIDGET,
		    XmNrightWidget,RC5,
		    XmNmarginHeight,0,
		    XmNmarginWidth,0,
                    NULL);
  XtManageChild (dipLB);
  XmStringFree(xstring);

/**************************************************************************
* Create the Slope of plane toward Sun in degrees text field
**************************************************************************/
  plnslpLB = XmCreateLabel (RC5,"Slope of plane toward Sun (degrees)=",NULL,0);
  sprintf(sptr,"Slope of plane toward Sun (degrees)=");
  xstring = XmStringCreateSimple(sptr);
  XtVaSetValues (plnslpLB,XmNfontList,fontlist,
                    XmNlabelString,xstring,
		    XmNtopAttachment,XmATTACH_WIDGET,
		    XmNtopWidget,dipLB,
		    XmNleftAttachment,XmATTACH_WIDGET,
		    XmNleftWidget,RC5,
		    XmNrightAttachment,XmATTACH_WIDGET,
		    XmNrightWidget,RC5,
		    XmNmarginHeight,0,
		    XmNmarginWidth,0,
                    NULL);
  XtManageChild (plnslpLB);
  XmStringFree(xstring);

/**************************************************************************
* Create the RMS residual to fit in meters,pixels text field
**************************************************************************/
  rmsresLB = XmCreateLabel (RC5,"RMS residual to fit (m,pixels)=",NULL,0);
  sprintf(sptr,"RMS residual to fit (m,pixels)=");
  xstring = XmStringCreateSimple(sptr);
  XtVaSetValues (rmsresLB,XmNfontList,fontlist,
                    XmNlabelString,xstring,
		    XmNtopAttachment,XmATTACH_WIDGET,
		    XmNtopWidget,plnslpLB,
		    XmNleftAttachment,XmATTACH_WIDGET,
		    XmNleftWidget,RC5,
		    XmNrightAttachment,XmATTACH_WIDGET,
		    XmNrightWidget,RC5,
		    XmNmarginHeight,0,
		    XmNmarginWidth,0,
                    NULL);
  XtManageChild (rmsresLB);
  XmStringFree(xstring);

/**************************************************************************
* Create the Hints text field
**************************************************************************/
  hintsLB = XmCreateLabel (RC5,"Hints/Errors:",NULL,0);
  sprintf(sptr,"Hints/Errors:");
  xstring = XmStringCreateSimple(sptr);
  XtVaSetValues (hintsLB,XmNfontList,fontlist,
                    XmNlabelString,xstring,
		    XmNtopAttachment,XmATTACH_WIDGET,
		    XmNtopWidget,rmsresLB,
		    XmNbottomAttachment,XmATTACH_WIDGET,
		    XmNbottomWidget,RC5,
		    XmNleftAttachment,XmATTACH_WIDGET,
		    XmNleftWidget,RC5,
		    XmNrightAttachment,XmATTACH_WIDGET,
		    XmNrightWidget,RC5,
		    XmNmarginHeight,0,
		    XmNmarginWidth,0,
                    NULL);
  XtManageChild (hintsLB);
  XmStringFree(xstring);

/**************************************************************************
* Create the Errors text field
**************************************************************************/
/*  errorsLB = XmCreateLabel (RC5,"Errors:",NULL,0);
  sprintf(sptr,"Errors:");
  xstring = XmStringCreateSimple(sptr);
  XtVaSetValues (errorsLB,XmNfontList,fontlist,
                    XmNlabelString,xstring,
		    XmNtopAttachment,XmATTACH_WIDGET,
		    XmNtopWidget,hintsLB,
		    XmNleftAttachment,XmATTACH_WIDGET,
		    XmNleftWidget,RC5,
		    XmNrightAttachment,XmATTACH_WIDGET,
		    XmNrightWidget,RC5,
		    XmNmarginHeight,0,
		    XmNmarginWidth,0,
                    NULL);
  XtManageChild (errorsLB);
  XmStringFree(xstring);
*/
/**************************************************************************
* Create the Smooth (Boxcar) pushbutton
**************************************************************************/

/*  PB = XmCreatePushButton (RC5,"Smooth",NULL,0);
  XtVaSetValues (PB,XmNuserData,((int) V_SMOOTH_BTN),
		    XmNfontList,fontlist,
                    NULL);
  XtManageChild (PB);

  XtAddCallback (PB,XmNactivateCallback,CBtoolPcpPB,(XtPointer) pcplist);
  pcplist[7] = PB;*/

/**************************************************************************
* Create the Parameters pushbutton
**************************************************************************/

/*  PB = XmCreatePushButton (RC5,"Parameters",NULL,0);
  XtVaSetValues (PB,XmNuserData,((int) V_PARAM_BTN),
		    XmNfontList,fontlist,
                    NULL);
  XtManageChild (PB);

  XtAddCallback (PB,XmNactivateCallback,CBtoolPcpPB,(XtPointer) pcplist);
  pcplist[8] = PB;*/

/**************************************************************************
* Create the Relaxation slider bar
**************************************************************************/

  WMAXslider = XmCreateScale (RC3,"relaxSB",NULL,0);
  XtVaSetValues (WMAXslider,XmNminimum,0,
                    XmNmaximum,20,
		    XmNdecimalPoints,1,
		    XmNvalue,10,
		    XmNshowValue,True,
		    XmNorientation,XmHORIZONTAL,
		    XtVaTypedArg,XmNtitleString,XmRString,
		    "Relaxation",11,
		    XmNfontList,fontlist,
		    NULL);
  XtManageChild (WMAXslider);

/**************************************************************************
* Create the Maximum SOR step slider bar
**************************************************************************/

  ITMAXslider = XmCreateScale (RC3,"maxsorSB",NULL,0);
  XtVaSetValues (ITMAXslider,XmNminimum,1,
                    XmNmaximum,30,
		    XmNvalue,15,
		    XmNshowValue,True,
		    XmNorientation,XmHORIZONTAL,
		    XtVaTypedArg,XmNtitleString,XmRString,
		    "Max SOR Steps",14,
		    XmNfontList,fontlist,
		    NULL);
  XtManageChild (ITMAXslider);

/**************************************************************************
* Create the Solution Type label
**************************************************************************/

  LB = XmCreateLabel (RC4,"Solution Type:",NULL,0);
  XtVaSetValues (LB,XmNalignment,XmALIGNMENT_BEGINNING,
		    XmNfontList,fontlist,
                    NULL);
  XtManageChild (LB);

/**************************************************************************
* Create the SOR toggle button
**************************************************************************/

  SORbtn = XmCreateToggleButton (RC4,"SOR",NULL,0);
  XtVaSetValues (SORbtn,XmNuserData,((int) V_SOR_BTN),
		    XmNfontList,fontlist,
                    NULL);
  XmToggleButtonSetState(SORbtn,True,False);
  XtManageChild (SORbtn);
  pcplist[8] = SORbtn;

/**************************************************************************
* Create the DIR toggle button
**************************************************************************/

  DIRbtn = XmCreateToggleButton (RC4,"Direct",NULL,0);
  XtVaSetValues (DIRbtn,XmNuserData,((int) V_DIRECT_BTN),
		    XmNfontList,fontlist,
                    NULL);
  XtSetSensitive(DIRbtn,True);
  XtManageChild (DIRbtn);
  pcplist[9] = DIRbtn;

/**************************************************************************
* Create the CGM toggle button
**************************************************************************/

  CGMbtn = XmCreateToggleButton (RC4,"CGM",NULL,0);
  XtVaSetValues (CGMbtn,XmNuserData,((int) V_CGM_BTN),
		    XmNfontList,fontlist,
                    NULL);
  XtSetSensitive(CGMbtn,False);
  XtManageChild (CGMbtn);
  pcplist[10] = CGMbtn;

/**************************************************************************
* Create the Display label
**************************************************************************/

/*  LB = XmCreateLabel (RC6,"Display:",NULL,0);
  XtVaSetValues (LB,XmNalignment,XmALIGNMENT_BEGINNING,
		    XmNfontList,fontlist,
                    NULL);
  XtManageChild (LB);*/

/**************************************************************************
* Create the Display On toggle button
**************************************************************************/

/*  DSPONbtn = XmCreateToggleButton (RC6,"On",NULL,0);
  XtVaSetValues (DSPONbtn,XmNuserData,((int) V_DSPON_BTN),
		    XmNfontList,fontlist,
                    NULL);
  XmToggleButtonSetState(DSPONbtn,True,False);
  XtManageChild (DSPONbtn);
  pcplist[11] = DSPONbtn;*/

/**************************************************************************
* Create the Display Off toggle button
**************************************************************************/

/*  DSPOFFbtn = XmCreateToggleButton (RC6,"Off",NULL,0);
  XtVaSetValues (DSPOFFbtn,XmNuserData,((int) V_DSPOFF_BTN),
                    XmNfontList,fontlist,
		    NULL);
  XtSetSensitive(DSPOFFbtn,False);
  XtManageChild (DSPOFFbtn);
  pcplist[12] = DSPOFFbtn;*/

/**************************************************************************
* Create the Inject label
**************************************************************************/

  LB = XmCreateLabel (RC7,"Inject:",NULL,0);
  XtVaSetValues (LB,XmNalignment,XmALIGNMENT_BEGINNING,
		    XmNfontList,fontlist,
                    NULL);
  XtManageChild (LB);

/**************************************************************************
* Create the Inject Exact toggle button
**************************************************************************/

  EXACTbtn = XmCreateToggleButton (RC7,"Exact",NULL,0);
  XtVaSetValues (EXACTbtn,XmNuserData,((int) V_EXACT_BTN),
		    XmNfontList,fontlist,
                    NULL);
  XmToggleButtonSetState(EXACTbtn,True,False);
  XtManageChild (EXACTbtn);
  pcplist[13] = EXACTbtn;

/**************************************************************************
* Create the Inject Fast toggle button
**************************************************************************/

  FASTbtn = XmCreateToggleButton (RC7,"Fast",NULL,0);
  XtVaSetValues (FASTbtn,XmNuserData,((int) V_FAST_BTN),
                    XmNfontList,fontlist,
		    NULL);
  XtSetSensitive(FASTbtn,True);
  XtManageChild (FASTbtn);
  pcplist[14] = FASTbtn;

  return FM2;
}