/************************************************************************
**
** FILE  : askwin.c
**
** ZWECK : - Enthaelt alles was die AskWin-Funktionen benoetigen:
**	      - Widget und Subwidgets
**	      - Funktionen 
**		    AskWinPopup
**		    AskWinPopdown
**
** AUTOR : Michael C. Ancutici
**	   Universitaet Stuttgart, Fakultaet Informatik
**
** DATUM : 14.03.93
**									
*************************************************************************/
#include 	<X11/Intrinsic.h>
#include 	<X11/StringDefs.h>
#include	<X11/Shell.h>
#include 	<X11/Xaw/Label.h>
#include 	<X11/Xaw/Form.h>
#include 	<X11/StringDefs.h>
#include 	<X11/Xaw/Command.h>
#include	"misc.h"
#include	"askwin.h"


#define YES_LABEL	"  Yes "
#define NO_LABEL	"  No  "

Widget		AskShell;		/* Shell 			*/
Widget 		AskForm;		/* Form				*/
Widget		AskLabel1;		/* Text 1			*/
Widget		AskLabel2;		/* Text 2			*/
Widget		AskYesCom;		/* JA Button			*/
Widget		AskNoCom;		/* NEIN Button			*/


static Dimension	AskMax;		/* maxBreite( AskLabel1, AskLabe2) */


/*************************************************************************
** FUNKTION:	AskWinPopdown
** ZWECK:	blendet AskShell aus und zerstoert sie
*************************************************************************/
void AskWinPopdown()
{
  XtPopdown( AskShell);
  XtDestroyWidget( AskShell);
}



/*************************************************************************
** FUNKTION:	AskWinPopup
** ZWECK:	Erzeugt AskShell und zeigt sie exclusiv an.
**		AskShell wird im Zentrum des Eltern-Widgets angezeigt.
** INPUT:	Parent	  - Eltern-Widget
**		Text1	  - Text 1. Zeile
**		Text2	  - Text 2. Zeile
**		AskSayYes - Funktion, die bei JA aufgerufen wird
**		AskSayNo  - Funktion, die bei NEIN aufgerufen wird
** ANMERK:	konnte die Hoehe des Form-Widgets nicht bestimmen (?).
**		daher schaetze ich mal eine feste Hoehe.
*************************************************************************/
#define ASK_SHELL_HOEHE	110

void AskWinPopup( Parent, Text1, Text2, AskSayYes, AskSayNo)
  Widget	Parent;
  char 		*Text1;
  char 		*Text2;
  void		AskSayYes();
  void		AskSayNo();
{
  Dimension	w1, h1;
  Position	x, y;

  AskShell = XtVaCreatePopupShell(
	"AskShell",
	transientShellWidgetClass,
	Parent,
	NULL);

  AskForm = XtVaCreateManagedWidget(
	"AskForm", 		/* widget name 			*/
	formWidgetClass,	/* widget class 		*/
	AskShell,		/* parent widget		*/
	NULL);			/* terminate argument list	*/

  AskLabel1 = XtVaCreateManagedWidget(
	"AskLabel1", 		/* widget name 			*/
	labelWidgetClass,	/* widget class 		*/
	AskForm,		/* parent widget		*/
	XtNlabel, Text1,	/* 1. Text			*/
	XtNheight, 40,		/* Label-Hoehe			*/
	NULL);			/* terminate argument list	*/

  XtVaGetValues( AskLabel1,	/* holt Label-Breite Text1	*/
  	XtNwidth, &w1,
  	NULL);

  AskLabel2 = XtVaCreateManagedWidget(
	"AskLabel2", 		/* widget name 			*/
	labelWidgetClass,	/* widget class 		*/
	AskForm,		/* parent widget		*/
	XtNlabel, Text2,	/* 2. Text			*/
	XtNheight, 40,		/* Label-Hoehe			*/
	NULL);			/* terminate argument list	*/

  XtVaGetValues( AskLabel2,	/* holt Label-Breite Text2	*/
  	XtNwidth, &AskMax,
  	NULL);

  if (AskMax > w1) 		/* ermittelt Maximum der Label-	*/
    XtVaSetValues( AskLabel1,	/* Breiten. Das weniger breite	*/
    	XtNwidth, AskMax,	/* Label wird nach dem breiteren*/
    	NULL);			/* ausgerichtet, damit der 	*/
  else {			/* Inhalt des ersteren zentriert*/
    AskMax = w1;		/* wird.			*/
    XtVaSetValues( AskLabel2,
    	XtNwidth, AskMax,
    	NULL);
  }    
  
  AskYesCom = XtVaCreateManagedWidget( "AskYesCom", 		
	commandWidgetClass,	/* widget class 		*/
	AskForm,		/* parent widget		*/
	XtNlabel, YES_LABEL,
	NULL);			/* terminate argument list	*/

  AskNoCom = XtVaCreateManagedWidget( "AskNoCom", 
	commandWidgetClass,	/* widget class 		*/
	AskForm,		/* parent widget		*/
	XtNlabel, NO_LABEL,
	NULL);			/* terminate argument list	*/

  XtVaGetValues( AskNoCom,
  	XtNwidth, &w1,
  	NULL);

  XtVaSetValues( AskYesCom,
	XtNhorizDistance, AskMax/2-w1,
  	NULL);

  XtAddCallback( AskYesCom, XtNcallback, AskSayYes, 0);
  XtAddCallback( AskNoCom, XtNcallback, AskSayNo, 0);

  XtVaGetValues( Parent,	/* hole Dimensionen des Eltern-	*/
  	XtNwidth, &w1,		/* Widgets.			*/
	XtNheight, &h1,
  	NULL);

  w1 = (w1>AskMax) ? (w1-AskMax)/2 : 0;
  h1 = (h1-ASK_SHELL_HOEHE)	? (h1-110)/2 : 0;
  
  XtTranslateCoords( Parent, 	/* berechne absolute Koordinaten*/
	(Position) w1,
	(Position) h1, 
	&x, &y);     
  	  	
  XtVaSetValues( AskShell,	/* Positioniere AskShell	*/
	XtNx, x,
	XtNy, y,
	NULL);
	
  XtPopup( AskShell, XtGrabExclusive);	
}
