Blame tests/I18N/InputMethod2.c

Packit b099d7
/* $XConsortium: InputMethod2.c /main/5 1995/07/15 21:00:40 drk $ */
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
/*
Packit b099d7
 * HISTORY
Packit b099d7
 */
Packit b099d7
Packit b099d7
#include <testlib.h>
Packit b099d7
Packit b099d7
#include <X11/bitmaps/star>
Packit b099d7
#include <X11/bitmaps/xlogo16>
Packit b099d7
Packit b099d7
/*
Packit b099d7
 *  Declare local functions.
Packit b099d7
 */
Packit b099d7
Packit b099d7
static Boolean GetSupportedStyle(XIMStyle supported_style, unsigned short i);
Packit b099d7
static void PrintSupportedStyle(XIMStyle supported_style);
Packit b099d7
static void CreatePanel(void );
Packit b099d7
static Boolean FindIfSupported(int style);
Packit b099d7
static Widget CreatePushButton(Widget parent, char *label);
Packit b099d7
static Pixmap MakePixmap(Widget toplevel, char bits[], int width, int height);
Packit b099d7
static void BackgroundCB(Widget w, XtPointer client_data, XtPointer call_data);
Packit b099d7
static void BackPixmapCB(Widget w, XtPointer client_data, XtPointer call_data);
Packit b099d7
static void ForegroundCB(Widget w, XtPointer client_data, XtPointer call_data);
Packit b099d7
static void ChoiceCB(Widget w, XtPointer client_data, XtPointer call_data);
Packit b099d7
Packit b099d7
/*
Packit b099d7
 *  Declare global variables.
Packit b099d7
 */
Packit b099d7
#define MY_OFFSET 30
Packit b099d7
#define OVERTHESPOT 1
Packit b099d7
#define OFFTHESPOT 2
Packit b099d7
#define ROOT 3
Packit b099d7
Packit b099d7
Widget Text1, Text2, TextField1;
Packit b099d7
Widget current_text;
Packit b099d7
unsigned short IM_style_count;
Packit b099d7
XIMStyle IM_style[10];
Packit b099d7
int InputStyle[10];
Packit b099d7
int test_style;
Packit b099d7
XmFontList small_fontlist, medium_fontlist, big_fontlist;
Packit b099d7
Pixmap star_pixmap, xlogo_pixmap;
Packit b099d7
Packit b099d7
typedef struct {
Packit b099d7
    String small_font, medium_font, big_font;
Packit b099d7
} ApplicationData, *ApplicationDataPtr;
Packit b099d7
Packit b099d7
static XtResource resources[] = {
Packit b099d7
   {"small_font", "Small_font", XtRString, sizeof (String),
Packit b099d7
    XtOffset(ApplicationDataPtr, small_font), XtRString, "*medium*-14-*"},
Packit b099d7
   {"medium_font", "Medium_font", XtRString, sizeof (String),
Packit b099d7
    XtOffset(ApplicationDataPtr, medium_font), XtRString, "*medium*-16-*,*18*"},
Packit b099d7
   {"big_font", "Big_font", XtRString, sizeof (String),
Packit b099d7
    XtOffset(ApplicationDataPtr, big_font), XtRString, "*medium*-24-*"},
Packit b099d7
};
Packit b099d7
Packit b099d7
static char *BackgroundColor[4] = {
Packit b099d7
    "black", 
Packit b099d7
    "yellow", 
Packit b099d7
    "green", 
Packit b099d7
    "blue"
Packit b099d7
};
Packit b099d7
Packit b099d7
static char *ForegroundColor[3] = {
Packit b099d7
    "white", 
Packit b099d7
    "red", 
Packit b099d7
    "grey"
Packit b099d7
};
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 *  Main
Packit b099d7
 */
Packit b099d7
void  main (argc, argv)
Packit b099d7
    int     argc;
Packit b099d7
    char  **argv;
Packit b099d7
{
Packit b099d7
    Widget           Form1;
Packit b099d7
    Arg              args[20];
Packit b099d7
    int              n;
Packit b099d7
    char             TestName[20], test_char;
Packit b099d7
    XIM              XIM_object;
Packit b099d7
    XIMStyles        *XIM_styles;
Packit b099d7
    XIC              XIC_Text1, XIC_Text2, XIC_TextField1;
Packit b099d7
    ApplicationData  my_data;
Packit b099d7
Packit b099d7
    TestName[0] = '\0';
Packit b099d7
    test_style = OVERTHESPOT;
Packit b099d7
    test_char = 'a';
Packit b099d7
Packit b099d7
    CommonTestI18NInit(argc, argv, NULL, NULL);
Packit b099d7
Packit b099d7
    if (UserData != NULL) {
Packit b099d7
Packit b099d7
	n = 0;
Packit b099d7
Packit b099d7
	if (strcmp(UserData, "a") == 0) {
Packit b099d7
               test_style = OVERTHESPOT;
Packit b099d7
	       XtSetArg(args[n], XmNpreeditType, "OverTheSpot"); n++;
Packit b099d7
	} else if (strcmp(UserData, "b") == 0) {
Packit b099d7
               test_style = OFFTHESPOT;
Packit b099d7
	       XtSetArg(args[n], XmNpreeditType, "OffTheSpot"); n++;
Packit b099d7
        } else if (strcmp(UserData, "c") == 0) {
Packit b099d7
               test_style = ROOT;
Packit b099d7
	       XtSetArg(args[n], XmNpreeditType, "Root"); n++;
Packit b099d7
        }
Packit b099d7
	
Packit b099d7
	XtSetArg(args[n], XmNinputPolicy, XmPER_WIDGET); n++;
Packit b099d7
	XtSetValues(Shell1, args, n);
Packit b099d7
       
Packit b099d7
	test_char = *UserData;
Packit b099d7
Packit b099d7
	free(UserData);
Packit b099d7
    }
Packit b099d7
    
Packit b099d7
    sprintf(TestName, "InputMethod2%c", test_char);
Packit b099d7
Packit b099d7
    CommonPause();
Packit b099d7
Packit b099d7
    /* Testing XmImGetXIM */
Packit b099d7
Packit b099d7
    XIM_object = (XIM) 0;
Packit b099d7
    XIM_object = XmImGetXIM(Shell1);
Packit b099d7
Packit b099d7
    if (XIM_object == (XIM) 0) {
Packit b099d7
	printf("\nCannot open input method.\n");
Packit b099d7
	exit(0);
Packit b099d7
    }
Packit b099d7
    else
Packit b099d7
	printf("\nInput method opened successfully for locale %s.\n\n",
Packit b099d7
	       XLocaleOfIM(XIM_object));
Packit b099d7
    
Packit b099d7
    CommonPause();
Packit b099d7
Packit b099d7
    /* Query the input method to see what input styles it supports. */
Packit b099d7
Packit b099d7
    XIM_styles = (XIMStyles *) 0;
Packit b099d7
    IM_style_count = (unsigned short) 0;
Packit b099d7
Packit b099d7
    if (XGetIMValues(XIM_object, XNQueryInputStyle, &XIM_styles, NULL)!=NULL) {
Packit b099d7
	printf("Query on input styles failed.\n\n");
Packit b099d7
	printf("No reason to continue this test.\n");
Packit b099d7
	exit(0);
Packit b099d7
    }
Packit b099d7
Packit b099d7
    else {
Packit b099d7
	unsigned short i;
Packit b099d7
	Boolean proceed = FALSE;
Packit b099d7
Packit b099d7
	printf("Number of supported input styles: %d\n\n", 
Packit b099d7
	       XIM_styles->count_styles);
Packit b099d7
Packit b099d7
	IM_style_count = (unsigned short) 0;
Packit b099d7
	for (i = 0; i < XIM_styles->count_styles; i++) 
Packit b099d7
	    proceed = proceed || 
Packit b099d7
		      GetSupportedStyle(XIM_styles->supported_styles[i], i);
Packit b099d7
	
Packit b099d7
	XFree(XIM_styles);
Packit b099d7
	if (!proceed) {
Packit b099d7
	    printf("No known styles supported by this input method.\n");
Packit b099d7
	    printf("No reason to continue this test.\n");
Packit b099d7
	    exit(0);
Packit b099d7
        }
Packit b099d7
Packit b099d7
	if (FindIfSupported(test_style))
Packit b099d7
	    printf("Input Method and Application support the same input style.\n");
Packit b099d7
	else {
Packit b099d7
	    printf("Input Method and Application don't support the same input style.\n");
Packit b099d7
	    printf("No reason to continue this test.\n");
Packit b099d7
	    exit(0);	
Packit b099d7
        }    
Packit b099d7
    }
Packit b099d7
Packit b099d7
    CommonPause();
Packit b099d7
Packit b099d7
    /* get resources and do conversions */
Packit b099d7
Packit b099d7
    XtGetApplicationResources(Shell1, &my_data, resources,
Packit b099d7
			      XtNumber(resources), NULL, 0);
Packit b099d7
Packit b099d7
    small_fontlist = XmFontListAppendEntry(NULL, 
Packit b099d7
			    XmFontListEntryLoad(XtDisplay(Shell1), 
Packit b099d7
						my_data.small_font,
Packit b099d7
						XmFONT_IS_FONTSET, 
Packit b099d7
						XmFONTLIST_DEFAULT_TAG));
Packit b099d7
/*
Packit b099d7
    medium_fontlist = XmFontListAppendEntry(NULL, 
Packit b099d7
			    XmFontListEntryLoad(XtDisplay(Shell1),
Packit b099d7
						my_data.medium_font,
Packit b099d7
						XmFONT_IS_FONTSET, 
Packit b099d7
						XmFONTLIST_DEFAULT_TAG));
Packit b099d7
Packit b099d7
    big_fontlist = XmFontListAppendEntry(NULL, 
Packit b099d7
			    XmFontListEntryLoad(XtDisplay(Shell1),
Packit b099d7
						my_data.big_font,
Packit b099d7
						XmFONT_IS_FONTSET, 
Packit b099d7
						XmFONTLIST_DEFAULT_TAG));
Packit b099d7
*/
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNmarginHeight, 15); n++;
Packit b099d7
    XtSetArg(args[n], XmNmarginWidth, 15); n++;
Packit b099d7
    Form1 = XmCreateForm(Shell1, TestName, args, n);
Packit b099d7
    XtManageChild (Form1);
Packit b099d7
Packit b099d7
    /*
Packit b099d7
     *  Creates Text1 and Text2.
Packit b099d7
     */
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
Packit b099d7
    XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM );        n++;
Packit b099d7
    XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM );       n++;
Packit b099d7
    XtSetArg(args[n], XmNcolumns, 15);                          n++;
Packit b099d7
    XtSetArg(args[n], XmNrows, 5);			        n++;
Packit b099d7
    XtSetArg(args[n], XmNscrollVertical, True);                 n++;
Packit b099d7
    XtSetArg(args[n], XmNscrollHorizontal, True);               n++;
Packit b099d7
    XtSetArg(args[n], XmNeditMode, XmMULTI_LINE_EDIT); 		n++;
Packit b099d7
    XtSetArg(args[n], XmNwordWrap, True); 			n++;
Packit b099d7
    XtSetArg(args[n], XmNvalue, "Testing");                     n++;
Packit b099d7
    XtSetArg(args[n], XmNfontList, small_fontlist);             n++; 
Packit b099d7
    Text1 = XmCreateScrolledText(Form1, "Text1", args, n);
Packit b099d7
Packit b099d7
    XtManageChild(Text1);
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
Packit b099d7
    XtSetArg(args[n], XmNcolumns, 20);                          n++;
Packit b099d7
    XtSetArg(args[n], XmNrows, 5);			        n++;
Packit b099d7
    XtSetArg(args[n], XmNeditMode, XmMULTI_LINE_EDIT); 		n++;
Packit b099d7
    XtSetArg(args[n], XmNwordWrap, True); 			n++;
Packit b099d7
    XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM );        n++;
Packit b099d7
    XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET );     n++;
Packit b099d7
    XtSetArg(args[n], XmNleftWidget, Text1);                    n++;
Packit b099d7
    XtSetArg(args[n], XmNleftOffset, MY_OFFSET );               n++;
Packit b099d7
    XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM );      n++;
Packit b099d7
    XtSetArg(args[n], XmNvalue, "Input Method with ");          n++;
Packit b099d7
/*    XtSetArg(args[n], XmNfontList, medium_fontlist);            n++;  */
Packit b099d7
    XtSetArg(args[n], XmNfontList, small_fontlist);             n++; 
Packit b099d7
    Text2 = XmCreateText(Form1, "Text2", args, n);
Packit b099d7
Packit b099d7
    XtManageChild(Text2);
Packit b099d7
Packit b099d7
    /*
Packit b099d7
     *  Creates TextField1.
Packit b099d7
     */
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET );      n++;
Packit b099d7
    XtSetArg(args[n], XmNtopWidget, Text1);                     n++;
Packit b099d7
    XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM );       n++;
Packit b099d7
    XtSetArg(args[n], XmNcolumns, 40);                          n++;
Packit b099d7
    XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM );      n++;
Packit b099d7
    XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM );     n++;
Packit b099d7
    XtSetArg(args[n], XmNvalue, "per widget Input Context.");   n++;
Packit b099d7
/*    XtSetArg(args[n], XmNfontList, big_fontlist);               n++;  */
Packit b099d7
    XtSetArg(args[n], XmNfontList, small_fontlist);             n++; 
Packit b099d7
    TextField1 = XmCreateTextField(Form1, "TextField1", args, n);
Packit b099d7
Packit b099d7
    XtManageChild(TextField1);
Packit b099d7
Packit b099d7
    XtRealizeWidget(Shell1);
Packit b099d7
Packit b099d7
    /* Test Input Context with different attributes */
Packit b099d7
Packit b099d7
    CreatePanel();
Packit b099d7
    
Packit b099d7
    CommonPause();
Packit b099d7
    CommonPause();
Packit b099d7
Packit b099d7
    /* Test that we really have different Input Context */
Packit b099d7
Packit b099d7
    XIC_Text1 = XmImGetXIC(Text1, XmINHERIT_POLICY, NULL, (Cardinal) 0);
Packit b099d7
    XIC_Text2 = XmImGetXIC(Text2, XmINHERIT_POLICY, NULL, (Cardinal) 0);
Packit b099d7
    XIC_TextField1 = XmImGetXIC(TextField1, XmINHERIT_POLICY, NULL, 
Packit b099d7
				(Cardinal) 0);
Packit b099d7
Packit b099d7
    if ((XIC_Text1 != XIC_Text2) && (XIC_Text1 != XIC_TextField1)
Packit b099d7
	&& (XIC_Text2 != XIC_TextField1))
Packit b099d7
	printf("\nEach Text widget has its own Input Context\n");
Packit b099d7
    else
Packit b099d7
        printf("\nERROR: Text widgets are sharing the Input Context\n");
Packit b099d7
Packit b099d7
    CommonPause();
Packit b099d7
Packit b099d7
    /* Text XmImUnregister */
Packit b099d7
Packit b099d7
    XmImUnregister(Text1);
Packit b099d7
    CommonPause();
Packit b099d7
Packit b099d7
    CommonPause();
Packit b099d7
 
Packit b099d7
    XtAppMainLoop(app_context);
Packit b099d7
}
Packit b099d7
Packit b099d7
static Boolean
Packit b099d7
GetSupportedStyle(XIMStyle supported_style, unsigned short i)
Packit b099d7
{
Packit b099d7
    Boolean return_status = FALSE;
Packit b099d7
Packit b099d7
    printf("Style %d: ", i + 1);
Packit b099d7
Packit b099d7
    if ((supported_style & XIMPreeditPosition) &&
Packit b099d7
	(supported_style & (XIMStatusArea|XIMStatusNothing|XIMStatusNone))) {
Packit b099d7
	printf("Over-the-spot\n");
Packit b099d7
	InputStyle[IM_style_count] = OVERTHESPOT;
Packit b099d7
	IM_style[IM_style_count] = supported_style;
Packit b099d7
	return_status = TRUE;
Packit b099d7
	IM_style_count++;
Packit b099d7
    }
Packit b099d7
Packit b099d7
    else if ((supported_style & XIMPreeditArea) &&
Packit b099d7
	(supported_style & (XIMStatusArea|XIMStatusNothing|XIMStatusNone))) {
Packit b099d7
	printf("Off-the-spot\n");
Packit b099d7
	InputStyle[IM_style_count] = OFFTHESPOT;
Packit b099d7
	IM_style[IM_style_count] = supported_style;
Packit b099d7
	return_status = TRUE;
Packit b099d7
	IM_style_count++;
Packit b099d7
    }
Packit b099d7
Packit b099d7
    else if ((supported_style & XIMPreeditNothing) &&
Packit b099d7
	(supported_style & (XIMStatusNothing|XIMStatusNone))) {
Packit b099d7
	printf("Root-window\n");
Packit b099d7
	InputStyle[IM_style_count] = ROOT;
Packit b099d7
	IM_style[IM_style_count] = supported_style;
Packit b099d7
	return_status = TRUE;
Packit b099d7
	IM_style_count++;
Packit b099d7
    }
Packit b099d7
Packit b099d7
    else if ((supported_style & XIMPreeditNone) &&
Packit b099d7
	(supported_style & XIMStatusNone)) {
Packit b099d7
	printf("None\n"); 
Packit b099d7
	return_status = FALSE;    
Packit b099d7
    }
Packit b099d7
    else {
Packit b099d7
	printf("Unknown composed of: ");
Packit b099d7
	PrintSupportedStyle(supported_style);
Packit b099d7
	return_status = FALSE;
Packit b099d7
    }
Packit b099d7
Packit b099d7
    return (return_status);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
static void
Packit b099d7
PrintSupportedStyle(XIMStyle supported_style)
Packit b099d7
{
Packit b099d7
    if (supported_style & XIMPreeditArea) 
Packit b099d7
	printf("XIMPreeditArea ");
Packit b099d7
    if (supported_style & XIMPreeditCallbacks) 
Packit b099d7
	printf("XIMPreeditCallbacks ");
Packit b099d7
    if (supported_style & XIMPreeditPosition) 
Packit b099d7
	printf("XIMPreeditPosition ");
Packit b099d7
    if (supported_style & XIMPreeditNothing) 
Packit b099d7
	printf("XIMPreeditNothing ");
Packit b099d7
    if (supported_style & XIMPreeditNone) 
Packit b099d7
	printf("XIMPreeditNone ");
Packit b099d7
Packit b099d7
    if (supported_style & XIMStatusArea) 
Packit b099d7
	printf("XIMStatusArea ");
Packit b099d7
    if (supported_style & XIMStatusCallbacks) 
Packit b099d7
	printf("XIMStatusCallbacks ");
Packit b099d7
    if (supported_style & XIMStatusNothing) 
Packit b099d7
	printf("XIMStatusNothing ");
Packit b099d7
    if (supported_style & XIMStatusNone) 
Packit b099d7
	printf("XIMStatusNone ");
Packit b099d7
Packit b099d7
    return;
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
CreatePanel(void )
Packit b099d7
{
Packit b099d7
    Arg		args[15];
Packit b099d7
    Cardinal	n;
Packit b099d7
    XmString	tcs;
Packit b099d7
    Widget	FormDialog;
Packit b099d7
    Widget      InputStyleLabel;
Packit b099d7
    Widget      Background_Pulldown, Background_Option;
Packit b099d7
    Widget      Black, Yellow, Green, Blue;
Packit b099d7
    Widget      BackPixmap_Pulldown, BackPixmap_Option;
Packit b099d7
    Widget      Pix_star, Pix_xlogo16;
Packit b099d7
    Widget      Foreground_Pulldown, Foreground_Option;
Packit b099d7
    Widget      White, Red, Grey;
Packit b099d7
    Widget      Separator;
Packit b099d7
    Widget      ChoiceLabel, ChoiceRadioBox, STextTB, TextTB, TextFTB;
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNhorizontalSpacing, 5); n++;
Packit b099d7
    XtSetArg(args[n], XmNverticalSpacing, 5); n++;    
Packit b099d7
    FormDialog = XmCreateFormDialog(Shell1, "FormDialog", args, n);
Packit b099d7
    XtManageChild(FormDialog);
Packit b099d7
Packit b099d7
    if (test_style == OVERTHESPOT)
Packit b099d7
	tcs = XmStringCreateLtoR("Input Style: Over The Spot", 
Packit b099d7
				 XmFONTLIST_DEFAULT_TAG);
Packit b099d7
    else if (test_style == OFFTHESPOT)
Packit b099d7
	tcs = XmStringCreateLtoR("Input Style: Off The Spot", 
Packit b099d7
				 XmFONTLIST_DEFAULT_TAG);
Packit b099d7
    else if (test_style == ROOT)
Packit b099d7
	tcs = XmStringCreateLtoR("Input Style: Root", 
Packit b099d7
				 XmFONTLIST_DEFAULT_TAG);
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNlabelString, tcs); n++;
Packit b099d7
    XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
Packit b099d7
    XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
Packit b099d7
    InputStyleLabel = XmCreateLabelGadget(FormDialog, "InputStyleLabel", 
Packit b099d7
					  args, n);
Packit b099d7
    XtManageChild(InputStyleLabel);
Packit b099d7
    XmStringFree(tcs);
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    Background_Pulldown = XmCreatePulldownMenu(FormDialog, 
Packit b099d7
					       "Background_Pulldown",
Packit b099d7
					       args, n);
Packit b099d7
    Black = CreatePushButton(Background_Pulldown, "Black");
Packit b099d7
    Yellow = CreatePushButton(Background_Pulldown, "Yellow");
Packit b099d7
    Green = CreatePushButton(Background_Pulldown, "Green");
Packit b099d7
    Blue = CreatePushButton(Background_Pulldown, "Blue");
Packit b099d7
Packit b099d7
    XtAddCallback(Black, XmNactivateCallback, BackgroundCB, 
Packit b099d7
		  (XtPointer) BackgroundColor[0]);
Packit b099d7
    XtAddCallback(Yellow, XmNactivateCallback, BackgroundCB, 
Packit b099d7
		  (XtPointer) BackgroundColor[1]);
Packit b099d7
    XtAddCallback(Green, XmNactivateCallback, BackgroundCB, 
Packit b099d7
		  (XtPointer) BackgroundColor[2]);
Packit b099d7
    XtAddCallback(Blue, XmNactivateCallback, BackgroundCB, 
Packit b099d7
		  (XtPointer) BackgroundColor[3]);
Packit b099d7
Packit b099d7
    tcs = XmStringCreateLtoR("Background ", XmFONTLIST_DEFAULT_TAG);
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
Packit b099d7
    XtSetArg(args[n], XmNtopWidget, InputStyleLabel); n++;
Packit b099d7
    XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
Packit b099d7
    XtSetArg(args[n], XmNlabelString, tcs); n++;
Packit b099d7
    XtSetArg(args[n], XmNmenuHistory, Black); n++;    
Packit b099d7
    XtSetArg(args[n], XmNsubMenuId, Background_Pulldown); n++;
Packit b099d7
    Background_Option = XmCreateOptionMenu(FormDialog, "Background_Option",
Packit b099d7
					   args, n);    
Packit b099d7
    XtManageChild(Background_Option);
Packit b099d7
    XmStringFree(tcs);
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    BackPixmap_Pulldown = XmCreatePulldownMenu(FormDialog, 
Packit b099d7
					       "BackPixmap_Pulldown",
Packit b099d7
					       args, n);
Packit b099d7
    star_pixmap = MakePixmap(Shell1, (char *) star_bits,
Packit b099d7
			     star_width, star_height);
Packit b099d7
    xlogo_pixmap = MakePixmap(Shell1, (char *) xlogo16_bits, 
Packit b099d7
			      xlogo16_width, xlogo16_height);
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNlabelType, XmPIXMAP); n++;
Packit b099d7
    XtSetArg(args[n], XmNlabelPixmap, star_pixmap); n++;
Packit b099d7
    Pix_star = XmCreatePushButton(BackPixmap_Pulldown, "Pix_star", args, n);
Packit b099d7
    XtManageChild(Pix_star);
Packit b099d7
Packit b099d7
    XtAddCallback(Pix_star, XmNactivateCallback, BackPixmapCB, 
Packit b099d7
		  (XtPointer) &star_pixmap);
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNlabelType, XmPIXMAP); n++;
Packit b099d7
    XtSetArg(args[n], XmNlabelPixmap, xlogo_pixmap); n++;
Packit b099d7
    Pix_xlogo16 = XmCreatePushButton(BackPixmap_Pulldown, "Pix_xlogo16", 
Packit b099d7
				     args, n);
Packit b099d7
    XtManageChild(Pix_xlogo16);
Packit b099d7
Packit b099d7
    XtAddCallback(Pix_xlogo16, XmNactivateCallback, BackPixmapCB, 
Packit b099d7
		  (XtPointer) &xlogo_pixmap);
Packit b099d7
Packit b099d7
    tcs = XmStringCreateLtoR("Background Pixmap ", XmFONTLIST_DEFAULT_TAG);
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
Packit b099d7
    XtSetArg(args[n], XmNtopWidget, Background_Option); n++;
Packit b099d7
    XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
Packit b099d7
    XtSetArg(args[n], XmNlabelString, tcs); n++;
Packit b099d7
    XtSetArg(args[n], XmNsubMenuId, BackPixmap_Pulldown); n++;
Packit b099d7
    BackPixmap_Option = XmCreateOptionMenu(FormDialog, "BackPixmap_Option",
Packit b099d7
					args, n);    
Packit b099d7
    XtManageChild(BackPixmap_Option);
Packit b099d7
    XmStringFree(tcs);
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    Foreground_Pulldown = XmCreatePulldownMenu(FormDialog, 
Packit b099d7
					       "Foreground_Pulldown",
Packit b099d7
					       args, n);
Packit b099d7
    White = CreatePushButton(Foreground_Pulldown, "White");
Packit b099d7
    Red = CreatePushButton(Foreground_Pulldown, "Red");
Packit b099d7
    Grey = CreatePushButton(Foreground_Pulldown, "Grey");
Packit b099d7
Packit b099d7
    XtAddCallback(White, XmNactivateCallback, ForegroundCB, 
Packit b099d7
		  (XtPointer) ForegroundColor[0]);
Packit b099d7
    XtAddCallback(Red, XmNactivateCallback, ForegroundCB, 
Packit b099d7
		  (XtPointer) ForegroundColor[1]);
Packit b099d7
    XtAddCallback(Grey, XmNactivateCallback, ForegroundCB, 
Packit b099d7
		  (XtPointer) ForegroundColor[2]);
Packit b099d7
Packit b099d7
    tcs = XmStringCreateLtoR("Foreground ", XmFONTLIST_DEFAULT_TAG);
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
Packit b099d7
    XtSetArg(args[n], XmNtopWidget, BackPixmap_Option); n++;
Packit b099d7
    XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
Packit b099d7
    XtSetArg(args[n], XmNlabelString, tcs); n++;
Packit b099d7
    XtSetArg(args[n], XmNmenuHistory, White); n++;    
Packit b099d7
    XtSetArg(args[n], XmNsubMenuId, Foreground_Pulldown); n++;
Packit b099d7
    Foreground_Option = XmCreateOptionMenu(FormDialog, "Foreground_Option",
Packit b099d7
					   args, n);    
Packit b099d7
    XtManageChild(Foreground_Option);
Packit b099d7
    XmStringFree(tcs);
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
Packit b099d7
    XtSetArg(args[n], XmNtopWidget, Foreground_Option);   n++;
Packit b099d7
    XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM);  n++;
Packit b099d7
    XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
Packit b099d7
    Separator = XmCreateSeparatorGadget(FormDialog, "Separator", args, n);
Packit b099d7
    XtManageChild(Separator);
Packit b099d7
Packit b099d7
    tcs = XmStringCreateLtoR("Apply to ", XmFONTLIST_DEFAULT_TAG);
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
Packit b099d7
    XtSetArg(args[n], XmNtopWidget, Separator);           n++;
Packit b099d7
    XtSetArg(args[n], XmNtopOffset, 20);                  n++;
Packit b099d7
    XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM);  n++;
Packit b099d7
    XtSetArg(args[n], XmNlabelString, tcs);               n++;
Packit b099d7
    ChoiceLabel = XmCreateLabelGadget(FormDialog, "ChoiceLabel", args, n);
Packit b099d7
Packit b099d7
    XtManageChild(ChoiceLabel);
Packit b099d7
    XmStringFree(tcs);
Packit b099d7
    
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET);  n++;
Packit b099d7
    XtSetArg(args[n], XmNtopWidget, Separator);            n++;
Packit b099d7
    XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
Packit b099d7
    XtSetArg(args[n], XmNleftWidget,  ChoiceLabel);        n++;
Packit b099d7
    XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
Packit b099d7
    XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM);  n++;
Packit b099d7
    XtSetArg(args[n], XmNpacking, XmPACK_TIGHT);           n++;
Packit b099d7
    XtSetArg(args[n], XmNorientation, XmHORIZONTAL);       n++;
Packit b099d7
    XtSetArg(args[n], XmNborderWidth, 2);                  n++;
Packit b099d7
    ChoiceRadioBox = XmCreateRadioBox(FormDialog, "ChoiceRadioBox", args, n);
Packit b099d7
    XtManageChild(ChoiceRadioBox);
Packit b099d7
 
Packit b099d7
    tcs = XmStringCreateLtoR("Scrolled Text", XmFONTLIST_DEFAULT_TAG);
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNset, XmSET); n++;
Packit b099d7
    XtSetArg(args[n], XmNlabelString, tcs); n++;
Packit b099d7
    current_text = Text1;
Packit b099d7
    STextTB = XmCreateToggleButtonGadget(ChoiceRadioBox, "STextTB", args, n);
Packit b099d7
Packit b099d7
    XtManageChild(STextTB);
Packit b099d7
    XmStringFree(tcs);
Packit b099d7
    XtAddCallback(STextTB, XmNvalueChangedCallback, ChoiceCB, 
Packit b099d7
		  (XtPointer) &Text1);
Packit b099d7
Packit b099d7
    tcs = XmStringCreateLtoR("Text", XmFONTLIST_DEFAULT_TAG);
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNlabelString, tcs); n++;
Packit b099d7
    TextTB = XmCreateToggleButtonGadget(ChoiceRadioBox, "TextTB", args, n);
Packit b099d7
Packit b099d7
    XtManageChild(TextTB);
Packit b099d7
    XmStringFree(tcs);
Packit b099d7
    XtAddCallback(TextTB, XmNvalueChangedCallback, ChoiceCB, 
Packit b099d7
		  (XtPointer) &Text2);
Packit b099d7
Packit b099d7
Packit b099d7
    tcs = XmStringCreateLtoR("Text Field", XmFONTLIST_DEFAULT_TAG);
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNlabelString, tcs); n++;
Packit b099d7
    TextFTB = XmCreateToggleButtonGadget(ChoiceRadioBox, "TextFTB", args, n);
Packit b099d7
Packit b099d7
    XtManageChild(TextFTB);
Packit b099d7
    XmStringFree(tcs);
Packit b099d7
    XtAddCallback(TextFTB, XmNvalueChangedCallback, ChoiceCB, 
Packit b099d7
		  (XtPointer) &TextField1);
Packit b099d7
Packit b099d7
    return;
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
static Boolean
Packit b099d7
FindIfSupported(int style)
Packit b099d7
{
Packit b099d7
    unsigned short i;
Packit b099d7
Packit b099d7
    for (i = 0; i < IM_style_count; i++)
Packit b099d7
	if (InputStyle[i] == style)
Packit b099d7
	    return(TRUE);
Packit b099d7
Packit b099d7
    return(FALSE);
Packit b099d7
}
Packit b099d7
Packit b099d7
static Widget
Packit b099d7
CreatePushButton(Widget parent, char *label)
Packit b099d7
{
Packit b099d7
Packit b099d7
    Widget          widget;
Packit b099d7
    register int    n;
Packit b099d7
    Arg             args[MAX_ARGS];
Packit b099d7
    XmString        tcs;
Packit b099d7
Packit b099d7
    tcs = XmStringCreateLtoR(label, XmFONTLIST_DEFAULT_TAG);
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNlabelString, tcs); n++;
Packit b099d7
    widget = XmCreatePushButtonGadget(parent, label, args, n);
Packit b099d7
    XtManageChild(widget);
Packit b099d7
Packit b099d7
    XmStringFree(tcs);
Packit b099d7
Packit b099d7
    return(widget);
Packit b099d7
Packit b099d7
}
Packit b099d7
static Pixmap
Packit b099d7
MakePixmap(Widget toplevel, char bits[], int width, int height)
Packit b099d7
{
Packit b099d7
  return (Pixmap)XCreatePixmapFromBitmapData(XtDisplay(toplevel),
Packit b099d7
			   DefaultRootWindow(XtDisplay(toplevel)),
Packit b099d7
                           bits,
Packit b099d7
                           width,
Packit b099d7
                           height,
Packit b099d7
                           BlackPixelOfScreen(XtScreen(toplevel)),
Packit b099d7
                           WhitePixelOfScreen(XtScreen(toplevel)),
Packit b099d7
                           DefaultDepthOfScreen(XtScreen(toplevel)));
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
BackgroundCB(Widget w, XtPointer client_data, XtPointer call_data)
Packit b099d7
{
Packit b099d7
    Arg  args[1];
Packit b099d7
Packit b099d7
    XtSetArg(args[0], XmNbackground, CommonGetColor((char *) client_data));
Packit b099d7
    XtSetValues(current_text, args, 1);
Packit b099d7
Packit b099d7
    return;
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
BackPixmapCB(Widget w, XtPointer client_data, XtPointer call_data)
Packit b099d7
{
Packit b099d7
    Arg  args[1];
Packit b099d7
Packit b099d7
    XtSetArg(args[0], XmNbackgroundPixmap, *((Pixmap *) client_data));
Packit b099d7
    XtSetValues(current_text, args, 1);
Packit b099d7
Packit b099d7
    return;
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
ForegroundCB(Widget w, XtPointer client_data, XtPointer call_data)
Packit b099d7
{
Packit b099d7
    Arg  args[1];
Packit b099d7
Packit b099d7
    XtSetArg(args[0], XmNforeground, CommonGetColor((char *) client_data));
Packit b099d7
    XtSetValues(current_text, args, 1);
Packit b099d7
Packit b099d7
    return;
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
ChoiceCB(Widget w, XtPointer client_data, XtPointer call_data)
Packit b099d7
{
Packit b099d7
    Arg  args[1];
Packit b099d7
    unsigned char value;
Packit b099d7
    
Packit b099d7
    XtSetArg(args[0], XmNset, &value);
Packit b099d7
    XtGetValues(w, args, 1);
Packit b099d7
Packit b099d7
    if (value == XmSET) 
Packit b099d7
	current_text = * (Widget *) client_data;
Packit b099d7
Packit b099d7
    return;
Packit b099d7
}