#include "bool.h"
#include "res.h"
#include "ArgPack.h"
#include <X11/Shell.h>
#include <X11/Command.h>
#include <Xw/Form.h>
#include <Xw/SText.h>
#include <Xw/TextEdit.h>

/*=================================== REQUEST GLOBALS ==*/
Bool TF_Request_GR;
char *String_Request_GR=NULL;

Bool TF_DONE_GR=Bool_FALSE;
Widget ShellW=NULL;
/*=======================================================*/


/*--------------------------------*/
void request_TF_CB(w,f,c)
Widget w;
int  f;
caddr_t c;
{
  TF_Request_GR=f;
  TF_DONE_GR=TRUE;
  XtPopdown(ShellW);
  XtDestroyWidget(ShellW);
}

static Arg shellArgs[]= {
  { XtNallowShellResize , (XtArgVal) FALSE },
  { XtNwidth, (XtArgVal) 200 },
  { XtNheight, (XtArgVal) 100 },
  { XtNwmTimeout, (XtArgVal) 3 },     /* wait only 3 seconds for the window
					 manager to respond */
};

#define  REQUEST_Y_PADDING 3
#define  REQUEST_X_PADDING 3
static Arg request_FormArgs[]={
  { XtNyResizable, (XtArgVal) FALSE },
  { XtNxResizable, (XtArgVal) FALSE },
  { XtNborderWidth, (XtArgVal) 1 },
  { XtNxOffset, (XtArgVal) REQUEST_X_PADDING },
  { XtNyOffset, (XtArgVal) REQUEST_Y_PADDING },
  { XtNxAttachOffset, (XtArgVal) REQUEST_X_PADDING },
  { XtNyAttachOffset, (XtArgVal) REQUEST_Y_PADDING },
  { XtNheight, (XtArgVal) 0 },
  { NULL, NULL },
};

Arg request_STextArgs[]={
  { XtNalignment, (XtArgVal) XwALIGN_CENTER },
  { XtNwidth, (int) 100 },
  { XtNheight, (int) 15 },
  { XtNwrap, (XtArgVal) FALSE },
  { XtNstrip, (XtArgVal) FALSE },
  { XtNborderWidth, (XtArgVal) 0 },
  { NULL, (XtArgVal) NULL },
};

Arg request_YesArgs[]={
  { XtNjustify, (XtArgVal) XtJustifyCenter },
  { XtNwidth, (int) 40 },
  { XtNheight, (int) 15 },
  { XtNlabel, (XtArgVal) "Yes"},
  { NULL, NULL},
};

Arg request_NoArgs[]={
  { XtNjustify, (XtArgVal) XtJustifyCenter },
  { XtNwidth, (int) 40 },
  { XtNheight, (int) 15 },
  { XtNlabel, (XtArgVal) "No"},
  { NULL, NULL},
};


/*--------------------------------------*/
Bool Request_get_tf(ParentW,text)
Widget ParentW;
char *text;
{
  Widget  FormW, TextW, YesW, NoW;
  ArgPack AP;

  TF_Request_GR=3;
  String_Request_GR=NULL;

  ShellW=XtCreatePopupShell("RTFR",
			    overrideShellWidgetClass,
			    ParentW,
			    shellArgs,XtNumber(shellArgs));

  
  AP=GetArgPack();

  AP=DuplicateArgList(request_FormArgs);
  FormW=XtCreateManagedWidget(NULL,
				  XwformWidgetClass,
				  ShellW,
				  TheArgs(AP),NumArgs(AP));  
  DeleteArgPack(AP);

  
  AP=GetArgPack();
  AP=DuplicateArgList(request_STextArgs);
  AddArg(AP,XtNstring, (XtArgVal) text);
  TextW=XtCreateManagedWidget(NULL,
			      XwstatictextWidgetClass,
			      FormW,
			      TheArgs(AP),NumArgs(AP));
  DeleteArgPack(AP);

  
  AP=GetArgPack();
  AP=DuplicateArgList(request_YesArgs);
  AddArg(AP,XtNstring, (XtArgVal) text);
  AddArg(AP,XtNyRefWidget, (XtArgVal) TextW);
  AddArg(AP,XtNyAddHeight, (XtArgVal) TRUE);
  AddArg(AP,XtNxRefWidget, (XtArgVal) FormW);
  AddArg(AP,XtNxAddWidth, (XtArgVal) FALSE);
  YesW=XtCreateManagedWidget(NULL,
			      commandWidgetClass,
			      FormW,
			      TheArgs(AP),NumArgs(AP));
  XtAddCallback(YesW, XtNcallback, request_TF_CB, FALSE);
  DeleteArgPack(AP);
  
  AP=GetArgPack();
  AP=DuplicateArgList(request_NoArgs);
  AddArg(AP,XtNyRefWidget, (XtArgVal) YesW);
  AddArg(AP,XtNxRefWidget, (XtArgVal) FormW);
  AddArg(AP,XtNyAddHeight, (XtArgVal) FALSE);
  AddArg(AP,XtNxAttachRight, (XtArgVal) TRUE);
  AddArg(AP,XtNxVaryOffset, (XtArgVal) FALSE);
  NoW=XtCreateManagedWidget(NULL,
			      commandWidgetClass,
			      FormW,
			      TheArgs(AP),NumArgs(AP));
  XtAddCallback(NoW, XtNcallback, request_TF_CB, FALSE);
  DeleteArgPack(AP);


  XtCallbackExclusive(ParentW,ShellW,NULL);
/*
  XtPopup(ShellW, XtGrabExclusive);
  while(TF_DONE_GR==FALSE);
  TF_DONE_GR=FALSE;
  return(TF_Request_GR);
*/
}
