/*
* Motif
*
* Copyright (c) 1987-2012, The Open Group. All rights reserved.
*
* These libraries and programs are free software; you can
* redistribute them and/or modify them under the terms of the GNU
* Lesser General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* These libraries and programs are distributed in the hope that
* they will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with these librararies and programs; if not, write
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA 02110-1301 USA
*/
/*
* HISTORY
*/
#ifdef REV_INFO
#ifndef lint
static char rcsid[] = "$XConsortium: TextField1.c /main/9 1995/07/13 19:33:54 drk $"
#endif
#endif
/*
* (c) Copyright 1987, 1988, 1989 HEWLETT-PACKARD COMPANY */
#include <testlib.h>
#include "TextField1.h"
int n;
Arg args[MAX_ARGS];
void main (argc, argv)
int argc;
char **argv;
{
XmString tcs, ItemList[NITEMS];
XmFontList newfontlist;
CommonTestInit(argc, argv);
newfontlist = CommonGetFontList("variable");
n = 0;
XtSetArg(args[n], XmNmarginHeight, 15); n++;
XtSetArg(args[n], XmNmarginWidth, 15); n++;
Form = XmCreateForm(Shell1, "Form", args, n);
XtManageChild (Form);
/* build the list of Functions Label and List */
tcs = XmStringCreateLtoR("Functions:", XmSTRING_DEFAULT_CHARSET);
n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNtopOffset, 15); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNleftOffset, 15); n++;
XtSetArg(args[n], XmNfontList, newfontlist); n++;
XtSetArg(args[n], XmNlabelString, tcs); n++;
Label1 = XmCreateLabel(Form, "Label1", args, n);
XtManageChild(Label1);
XmStringFree(tcs);
n = 0;
/* convert the plain strings to Xstrings */
for (n = 0; n < NITEMS; n++)
ItemList[n] = XmStringLtoRCreate(Istrings[n],
XmSTRING_DEFAULT_CHARSET);
n = 0;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNleftOffset, 15); n++;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, Label1); n++;
XtSetArg(args[n], XmNtopOffset, 15); n++;
XtSetArg(args[n], XmNresizable, True); n++;
XtSetArg(args[n], XmNselectionPolicy, XmBROWSE_SELECT); n++;
XtSetArg(args[n], XmNhighlightOnEnter, False); n++;
XtSetArg(args[n], XmNfontList, newfontlist); n++;
XtSetArg(args[n], XmNitems, ItemList); n++;
XtSetArg(args[n], XmNitemCount, NITEMS); n++;
XtSetArg(args[n], XmNforeground, CommonGetColor("white")); n++;
XtSetArg(args[n], XmNbackground, CommonGetColor("darkorchid")); n++;
List1 = XmCreateScrolledList(Form, "List1", args, n);
XtManageChild(List1);
XtAddCallback(List1, XmNbrowseSelectionCallback, SSelCB_List1, NULL);
/* build the Action Label and Text */
tcs = XmStringCreateLtoR("Action TextField:", XmSTRING_DEFAULT_CHARSET);
n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNtopOffset, 15); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNleftWidget, List1); n++;
XtSetArg(args[n], XmNleftOffset, 15); n++;
XtSetArg(args[n], XmNfontList, newfontlist); n++;
XtSetArg(args[n], XmNlabelString, tcs); n++;
Label3 = XmCreateLabel(Form, "Label3", args, n);
XtManageChild(Label3);
XmStringFree(tcs);
n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopOffset, 15); n++;
XtSetArg(args[n], XmNtopWidget, Label3); n++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNrightOffset, 15); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNleftWidget, List1); n++;
XtSetArg(args[n], XmNleftOffset, 15); n++;
XtSetArg(args[n], XmNhighlightThickness, 2); n++;
XtSetArg(args[n], XmNfontList, newfontlist); n++;
XtSetArg(args[n], XmNcolumns, 32); n++;
XtSetArg(args[n], XmNvalue, starting_string_text); n++;
XtSetArg(args[n], XmNmaxLength, strlen(starting_string_text)); n++;
XtSetArg(args[n], XmNbackground, CommonGetColor("wheat")); n++;
TextF1 = XmCreateTextField(Form, "TextF1", args, n);
XtManageChild(TextF1);
/* build the Control Panel Label */
tcs = XmStringCreateLtoR("Control Panel:", XmSTRING_DEFAULT_CHARSET);
n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, TextF1); n++;
XtSetArg(args[n], XmNtopOffset, 25); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNleftWidget, List1); n++;
XtSetArg(args[n], XmNleftOffset, 15); n++;
XtSetArg(args[n], XmNfontList, newfontlist); n++;
XtSetArg(args[n], XmNlabelString, tcs); n++;
Label5 = XmCreateLabel(Form, "Label5", args, n);
XtManageChild(Label5);
XmStringFree(tcs);
/* build the Call Function pushbutton */
tcs = XmStringCreateLtoR("Call Function", XmSTRING_DEFAULT_CHARSET);
n = 0;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNleftWidget, List1); n++;
XtSetArg(args[n], XmNleftOffset, 15); n++;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, Label5); n++;
XtSetArg(args[n], XmNtopOffset, 15); n++;
XtSetArg(args[n], XmNfontList, newfontlist); n++;
XtSetArg(args[n], XmNlabelString, tcs); n++;
ApplyB = XmCreatePushButton(Form, "ApplyB", args, n);
XtManageChild(ApplyB);
XtAddCallback(ApplyB, XmNactivateCallback, ApplyCB, NULL);
XmStringFree(tcs);
/* build the Clear Args pushbutton */
tcs = XmStringCreateLtoR("Clear Args", XmSTRING_DEFAULT_CHARSET);
n = 0;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNleftWidget, ApplyB); n++;
XtSetArg(args[n], XmNleftOffset, 15); n++;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, Label5); n++;
XtSetArg(args[n], XmNtopOffset, 15); n++;
XtSetArg(args[n], XmNfontList, newfontlist); n++;
XtSetArg(args[n], XmNlabelString, tcs); n++;
ClearB = XmCreatePushButton(Form, "ClearB", args, n);
XtManageChild(ClearB);
XtAddCallback(ClearB, XmNactivateCallback, ClearCB, NULL);
XmStringFree(tcs);
/* build the Num Arg 1 Scale */
tcs = XmStringLtoRCreate("Num Arg 1", XmSTRING_DEFAULT_CHARSET);
n = 0;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNleftWidget, List1); n++;
XtSetArg(args[n], XmNleftOffset, 15); n++;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, ApplyB); n++;
XtSetArg(args[n], XmNtopOffset, 15); n++;
XtSetArg(args[n], XmNfontList, newfontlist); n++;
XtSetArg(args[n], XmNorientation, XmHORIZONTAL); n++;
XtSetArg(args[n], XmNprocessingDirection, XmMAX_ON_RIGHT); n++;
XtSetArg(args[n], XmNtitleString, tcs); n++;
XtSetArg(args[n], XmNshowValue, True); n++;
XtSetArg(args[n], XmNmaximum, 40); n++;
Scale1 = XmCreateScale(Form, "Scale1", args, n);
XtManageChild(Scale1);
XtAddCallback(Scale1, XmNvalueChangedCallback, Scale1CB, NULL);
XmStringFree(tcs);
/* build the Num Arg 2 Scale */
tcs = XmStringLtoRCreate("Num Arg 2", XmSTRING_DEFAULT_CHARSET);
n = 0;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNleftWidget, List1); n++;
XtSetArg(args[n], XmNleftOffset, 15); n++;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, Scale1); n++;
XtSetArg(args[n], XmNfontList, newfontlist); n++;
XtSetArg(args[n], XmNorientation, XmHORIZONTAL); n++;
XtSetArg(args[n], XmNprocessingDirection, XmMAX_ON_RIGHT); n++;
XtSetArg(args[n], XmNtitleString, tcs); n++;
XtSetArg(args[n], XmNshowValue, True); n++;
XtSetArg(args[n], XmNmaximum, 40); n++;
Scale2 = XmCreateScale(Form, "Scale2", args, n);
XtManageChild(Scale2);
XtAddCallback(Scale2, XmNvalueChangedCallback, Scale2CB, NULL);
XmStringFree(tcs);
/* build the True/False Label and ToggleButton */
tcs = XmStringCreateLtoR("True", XmSTRING_DEFAULT_CHARSET);
n = 0;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNleftWidget, List1); n++;
XtSetArg(args[n], XmNleftOffset, 15); n++;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, Scale2); n++;
XtSetArg(args[n], XmNtopOffset, 15); n++;
XtSetArg(args[n], XmNlabelString, tcs); n++;
XtSetArg(args[n], XmNselectColor, CommonGetColor("darkorchid")); n++;
XtSetArg(args[n], XmNset, True); n++;
XtSetArg(args[n], XmNfontList, newfontlist); n++;
ToggleB = XmCreateToggleButton(Form, "ToggleB", args, n);
XtManageChild(ToggleB);
XtAddCallback(ToggleB, XmNvalueChangedCallback, TorFCB, NULL);
XmStringFree(tcs);
tcs = XmStringCreateLtoR("True/False Arg", XmSTRING_DEFAULT_CHARSET);
n = 0;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNleftWidget, List1); n++;
XtSetArg(args[n], XmNleftOffset, 15); n++;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, ToggleB); n++;
XtSetArg(args[n], XmNtopOffset, 0); n++;
XtSetArg(args[n], XmNfontList, newfontlist); n++;
XtSetArg(args[n], XmNlabelString, tcs); n++;
Label2 = XmCreateLabel(Form, "Label2", args, n);
XtManageChild(Label2);
XmStringFree(tcs);
/* build the Status/Input Label and Text */
n = 0;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNleftWidget, List1); n++;
XtSetArg(args[n], XmNleftOffset, 15); n++;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, Label2); n++;
XtSetArg(args[n], XmNtopOffset, 15); n++;
XtSetArg(args[n], XmNcolumns, 20); n++;
XtSetArg(args[n], XmNrows, 1); n++;
XtSetArg(args[n], XmNeditMode, XmSINGLE_LINE_EDIT); n++;
XtSetArg(args[n], XmNbackground, CommonGetColor("yellow")); n++;
XtSetArg(args[n], XmNfontList, newfontlist); n++;
StatText = XmCreateText(Form, "StatText", args, n);
XtManageChild(StatText);
tcs = XmStringCreateLtoR("Status/Input", XmSTRING_DEFAULT_CHARSET);
n = 0;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNleftWidget, List1); n++;
XtSetArg(args[n], XmNleftOffset, 15); n++;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, StatText); n++;
XtSetArg(args[n], XmNtopOffset, 0); n++;
XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNbottomOffset, 15); n++;
XtSetArg(args[n], XmNfontList, newfontlist); n++;
XtSetArg(args[n], XmNlabelString, tcs); n++;
Label4 = XmCreateLabel(Form, "Label4", args, n);
XtManageChild(Label4);
XmStringFree(tcs);
XtRealizeWidget(Shell1);
/* test of:
XmTextFieldGetEditable()
XmTextFieldSetEditable()
*/
n = 0;
XtSetArg(args[n], XmNvisibleItemCount, 2); n++;
XtSetArg(args[n], XmNtopItemPosition, 1); n++;
XtSetValues(List1, args, n);
CommonPause();
/* test of:
XmTextFieldGetMaxLength()
XmTextFieldSetMaxLength()
XmTextFieldGetLastPosition()
*/
n = 0;
XtSetArg(args[n], XmNvisibleItemCount, 3); n++;
XtSetArg(args[n], XmNtopItemPosition, 3); n++;
XtSetValues(List1, args, n);
CommonPause();
/* test of:
XmTextFieldSetInsertionPosition()
*/
n = 0;
XtSetArg(args[n], XmNvisibleItemCount, 1); n++;
XtSetArg(args[n], XmNtopItemPosition, 6); n++;
XtSetValues(List1, args, n);
CommonPause();
/* test of:
XmTextFieldGetBaseline()
XmTextFieldXYToPos()
XmTextFieldPosToXY()
*/
n = 0;
XtSetArg(args[n], XmNvisibleItemCount, 3); n++;
XtSetArg(args[n], XmNtopItemPosition, 7); n++;
XtSetValues(List1, args, n);
CommonPause();
XtAppMainLoop(app_context);
}
static void Scale1CB(Widget w, XtPointer client_data,
XtPointer call_data)
{
scale1_val = ((XmScaleCallbackStruct*)call_data)->value;
}
static void Scale2CB(Widget w, XtPointer client_data,
XtPointer call_data)
{
scale2_val = ((XmScaleCallbackStruct*)call_data)->value;
}
static void SSelCB_List1(Widget w, XtPointer client_data,
XtPointer call_data)
{
function = ((XmListCallbackStruct*)call_data)->item_position;
switch (function) {
/* these don't use any controls */
case GetEditable:
case GetMaxLength:
case GetLastPosition:
case GetBaseline:
n = 0;
XtSetArg(args[n], XmNsensitive, False); n++;
XtSetValues(Scale1, args, n);
XtSetValues(Scale2, args, n);
XtSetValues(ToggleB, args, n);
break;
/* these use only the Scale1 control */
case SetMaxLength:
case PosToXY:
case SetInsertionPosition:
n = 0;
XtSetArg(args[n], XmNsensitive, True); n++;
XtSetValues(Scale1, args, n);
n = 0;
XtSetArg(args[n], XmNsensitive, False); n++;
XtSetValues(Scale2, args, n);
XtSetValues(ToggleB, args, n);
break;
/* these use the Scale1 and Scale2 controls */
case XYToPos:
n = 0;
XtSetArg(args[n], XmNsensitive, True); n++;
XtSetValues(Scale1, args, n);
XtSetValues(Scale2, args, n);
n = 0;
XtSetArg(args[n], XmNsensitive, False); n++;
XtSetValues(ToggleB, args, n);
break;
/* these use only the ToggleB control */
case SetEditable:
n = 0;
XtSetArg(args[n], XmNsensitive, True); n++;
XtSetValues(ToggleB, args, n);
n = 0;
XtSetArg(args[n], XmNsensitive, False); n++;
XtSetValues(Scale1, args, n);
XtSetValues(Scale2, args, n);
break;
default:
printf("Not a valid function\n");
}
}
static void ClearCB(Widget w, XtPointer client_data,
XtPointer call_data)
{
XmString tcs;
XmListDeselectAllItems(List1);
function = -1;
n = 0;
XtSetArg(args[n], XmNvalue, 0); n++;
XtSetValues(Scale1, args, n);
XtSetValues(Scale2, args, n);
tcs = XmStringCreateLtoR("True", XmSTRING_DEFAULT_CHARSET);
n = 0;
XtSetArg(args[n], XmNlabelString, tcs); n++;
XtSetArg(args[n], XmNset, True); n++;
XtSetValues(ToggleB, args, n);
XmStringFree(tcs);
torf = True;
XmTextSetString(StatText, "");
}
static void ApplyCB(Widget w, XtPointer client_data,
XtPointer call_data)
{
char stat_str[25];
int left, right;
Position x, y;
char *tmp_str;
XmAnyCallbackStruct *c_d;
c_d = (XmAnyCallbackStruct *) call_data;
switch (function) {
case GetEditable:
if (XmTextFieldGetEditable(TextF1))
XmTextSetString(StatText, "GetEditable: True");
else
XmTextSetString(StatText, "GetEditable: False");
break;
case SetEditable:
XmTextFieldSetEditable(TextF1, torf);
break;
case GetMaxLength:
sprintf(stat_str, "MaxLength = %d",
XmTextFieldGetMaxLength(TextF1));
XmTextSetString(StatText, stat_str);
break;
case SetMaxLength:
XmTextFieldSetMaxLength(TextF1, scale1_val);
break;
case XYToPos:
sprintf(stat_str, "Position = %d",
XmTextFieldXYToPos(TextF1, scale1_val, scale2_val));
XmTextSetString(StatText, stat_str);
break;
case PosToXY:
if (XmTextFieldPosToXY(TextF1, (XmTextPosition)scale1_val,
&x, &y))
{
sprintf(stat_str, "x = %d, y = %d", x, y);
XmTextSetString(StatText, stat_str);
}
else
XmTextSetString(StatText, "Position not found");
break;
case GetLastPosition:
sprintf(stat_str, "last position = %d",
XmTextFieldGetLastPosition(TextF1));
XmTextSetString(StatText, stat_str);
break;
case SetInsertionPosition:
XmTextFieldSetInsertionPosition(TextF1,
(XmTextPosition)scale1_val);
break;
case GetBaseline:
sprintf(stat_str, "baseline = %d",
XmTextFieldGetBaseline(TextF1));
XmTextSetString(StatText, stat_str);
break;
default:
printf("Please select a valid function.\n");
};
}
static void TorFCB(Widget w, XtPointer client_data,
XtPointer call_data)
{
XmString tcs;
torf = ((XmToggleButtonCallbackStruct*)call_data)->set;
if (torf)
tcs = XmStringCreateLtoR("True", XmSTRING_DEFAULT_CHARSET);
else
tcs = XmStringCreateLtoR("False", XmSTRING_DEFAULT_CHARSET);
n = 0;
XtSetArg(args[n], XmNlabelString, tcs); n++;
XtSetValues(w, args, n);
XmStringFree(tcs);
}