/************************************************************************ ** ** 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 #include #include #include #include #include #include #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); }