|
Packit |
b099d7 |
/* $XConsortium: SpinBoxPerf3.c /main/5 1995/07/15 21:02:17 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 |
|
|
Packit |
b099d7 |
/* Test program for SpinBox*/
|
|
Packit |
b099d7 |
#define SYSV 1
|
|
Packit |
b099d7 |
#define MARGIN 10
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <stdio.h>
|
|
Packit |
b099d7 |
#include <testlib.h>
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define NUM_MONTHS 12
|
|
Packit |
b099d7 |
#define NUM_LETTERS 10
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define SPIN1_MIN 0
|
|
Packit |
b099d7 |
#define SPIN1_MAX 6
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static
|
|
Packit |
b099d7 |
setMonths();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
setMaxDay(Widget monthWidget, int nextMM);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
changedSpinB(Widget w, XtPointer client, XtPointer call);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
main(int argc, char **argv);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
int thisMM = 1;
|
|
Packit |
b099d7 |
int thisDD = 1;
|
|
Packit |
b099d7 |
int thisYY = 89;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static char *months[NUM_MONTHS] =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
"January",
|
|
Packit |
b099d7 |
"February",
|
|
Packit |
b099d7 |
"March",
|
|
Packit |
b099d7 |
"April",
|
|
Packit |
b099d7 |
"May",
|
|
Packit |
b099d7 |
"June",
|
|
Packit |
b099d7 |
"July",
|
|
Packit |
b099d7 |
"August",
|
|
Packit |
b099d7 |
"September",
|
|
Packit |
b099d7 |
"October",
|
|
Packit |
b099d7 |
"November",
|
|
Packit |
b099d7 |
"December"
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmString monthValues[NUM_MONTHS];
|
|
Packit |
b099d7 |
XmString letterValues[NUM_LETTERS];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/***** SpinBox Widgets *****/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget SpinBox;
|
|
Packit |
b099d7 |
Widget TextField1, TextField2, TextField3;
|
|
Packit |
b099d7 |
Widget Decoration1, Decoration2;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/***** *****/
|
|
Packit |
b099d7 |
/***** Utility Functions *****/
|
|
Packit |
b099d7 |
/***** *****/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*****
|
|
Packit |
b099d7 |
***** setMonths - create XmString array of month names
|
|
Packit |
b099d7 |
*****/
|
|
Packit |
b099d7 |
static
|
|
Packit |
b099d7 |
setMonths()
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmString tempString;
|
|
Packit |
b099d7 |
int monthLoop;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (monthLoop = 0; monthLoop < NUM_MONTHS; monthLoop++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
tempString = XmStringCreate(months[monthLoop], XmFONTLIST_DEFAULT_TAG);
|
|
Packit |
b099d7 |
monthValues[monthLoop] = tempString;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*****
|
|
Packit |
b099d7 |
***** setMaxDay - set maximumValue for day widget
|
|
Packit |
b099d7 |
*****/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
setMaxDay(Widget monthWidget, int nextMM)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Cardinal n;
|
|
Packit |
b099d7 |
Arg argList[5];
|
|
Packit |
b099d7 |
int lastDay;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
lastDay = 10;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNmaximumValue, lastDay);
|
|
Packit |
b099d7 |
n++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetValues(monthWidget, argList, n);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/***** *****/
|
|
Packit |
b099d7 |
/***** Callback Functions *****/
|
|
Packit |
b099d7 |
/***** *****/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
changedSpinB(Widget w, XtPointer client, XtPointer call)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmSpinBoxCallbackStruct *user;
|
|
Packit |
b099d7 |
Cardinal n;
|
|
Packit |
b099d7 |
Arg argList[5];
|
|
Packit |
b099d7 |
int saveMM;
|
|
Packit |
b099d7 |
int saveDD;
|
|
Packit |
b099d7 |
int saveYY;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
user = (XmSpinBoxCallbackStruct *)call;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (user->widget == TextField1)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
thisMM = user->position + 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (thisDD <=3 )
|
|
Packit |
b099d7 |
setMaxDay(TextField2, thisMM -1);
|
|
Packit |
b099d7 |
else if (thisDD > 27)
|
|
Packit |
b099d7 |
setMaxDay(TextField2, thisMM);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
saveYY = thisYY;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (user->crossed_boundary)
|
|
Packit |
b099d7 |
if (user->reason == XmCR_SPIN_NEXT)
|
|
Packit |
b099d7 |
thisYY++;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
thisYY--;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (thisYY != saveYY)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (thisYY < 89)
|
|
Packit |
b099d7 |
thisYY = 99;
|
|
Packit |
b099d7 |
else if (thisYY > 99)
|
|
Packit |
b099d7 |
thisYY %= 100;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNposition, thisYY);
|
|
Packit |
b099d7 |
n++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetValues(TextField3, argList, n);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if (user->widget == TextField2)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
thisDD = user->position + 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (thisDD <=3 && user->reason == XmCR_SPIN_PRIOR)
|
|
Packit |
b099d7 |
setMaxDay(TextField2, thisMM -1);
|
|
Packit |
b099d7 |
else if (thisDD > 27 && user->reason == XmCR_SPIN_NEXT)
|
|
Packit |
b099d7 |
setMaxDay(TextField2, thisMM);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
saveMM = thisMM;
|
|
Packit |
b099d7 |
saveYY = thisYY;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (user->crossed_boundary)
|
|
Packit |
b099d7 |
if (user->reason == XmCR_SPIN_NEXT)
|
|
Packit |
b099d7 |
thisMM++;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
thisMM--;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (thisMM != saveMM)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (thisMM < 1)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
thisMM = 10;
|
|
Packit |
b099d7 |
thisYY--;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if (thisMM > 10)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
thisMM = 1;
|
|
Packit |
b099d7 |
thisYY++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNposition, thisMM - 1);
|
|
Packit |
b099d7 |
n++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetValues(TextField1, argList, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (thisYY != saveYY)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNposition, thisYY);
|
|
Packit |
b099d7 |
n++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetValues(TextField3, argList, n);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if (user->widget == TextField3)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
thisYY = user->position;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (user->reason == XmCR_OK)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (thisDD <= 3)
|
|
Packit |
b099d7 |
setMaxDay(TextField2, thisMM - 1);
|
|
Packit |
b099d7 |
else if (thisDD > 27)
|
|
Packit |
b099d7 |
setMaxDay(TextField2, thisMM);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/***** *****/
|
|
Packit |
b099d7 |
/***** Main Function *****/
|
|
Packit |
b099d7 |
/***** *****/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
main (int argc, char **argv)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XFontStruct *font;
|
|
Packit |
b099d7 |
XmFontList fontlist;
|
|
Packit |
b099d7 |
Cardinal n;
|
|
Packit |
b099d7 |
XmString decoString;
|
|
Packit |
b099d7 |
Widget parent;
|
|
Packit |
b099d7 |
Arg argList[25];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/***** Application initialization *****/
|
|
Packit |
b099d7 |
CommonTestInit( argc, argv );
|
|
Packit |
b099d7 |
XtRealizeWidget(Shell1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/***** Create Font List *****/
|
|
Packit |
b099d7 |
font = XLoadQueryFont(display, "-*-courier-bold-r-*--18-*");
|
|
Packit |
b099d7 |
fontlist = XmFontListCreate(font, "charset1");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/***** Create BulletinBoard parent for SpinBox widgets *****/
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNwidth, 250); n++;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNheight, 100); n++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
parent = XmCreateBulletinBoard(Shell1, "Parent", argList, n);
|
|
Packit |
b099d7 |
XtManageChild(parent);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/****************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/****************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*****
|
|
Packit |
b099d7 |
***** Create SpinBox
|
|
Packit |
b099d7 |
*****
|
|
Packit |
b099d7 |
***** This example has multiple children, including two
|
|
Packit |
b099d7 |
***** decoration children. In addition, this SpinBox
|
|
Packit |
b099d7 |
***** includes 'chaining', the process where a change
|
|
Packit |
b099d7 |
***** in one child causes values to change in the child
|
|
Packit |
b099d7 |
***** of one more other children. Chaining is performed
|
|
Packit |
b099d7 |
***** by the valueChanged callback.
|
|
Packit |
b099d7 |
*****
|
|
Packit |
b099d7 |
***** Choices: spin6_text1 1 to 12 (months)
|
|
Packit |
b099d7 |
***** spin6_deco1 '/' decoration
|
|
Packit |
b099d7 |
***** spin6_text2 1 to 28-31 (max days varies by month)
|
|
Packit |
b099d7 |
***** spin6_deco2 '/' decoration
|
|
Packit |
b099d7 |
***** spin6_text3 0 to 99 (years)
|
|
Packit |
b099d7 |
*****
|
|
Packit |
b099d7 |
***** Callbacks:
|
|
Packit |
b099d7 |
***** - changedSpin6 sets maximum days in month. The month field
|
|
Packit |
b099d7 |
***** is chained to the day field, and the year field is
|
|
Packit |
b099d7 |
***** chained to the month field. (When the day child
|
|
Packit |
b099d7 |
***** wraps, the month child is also changed. When the
|
|
Packit |
b099d7 |
***** month child wraps, the year child is also changed.)
|
|
Packit |
b099d7 |
*****
|
|
Packit |
b099d7 |
*****/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/***** Create SpinBox parent *****/
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNx, MARGIN); n++;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNy, MARGIN); n++;
|
|
Packit |
b099d7 |
SpinBox = XmCreateSpinBox( parent,
|
|
Packit |
b099d7 |
"SpinBox",
|
|
Packit |
b099d7 |
argList,
|
|
Packit |
b099d7 |
n );
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/***** Create SpinBox child *****/
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNwidth, 30); n++;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNposition, thisMM - 1); n++;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNminimumValue, 1); n++;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNmaximumValue, 10); n++;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNspinBoxChildType, XmNUMERIC); n++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
TextField1 = XmCreateTextField( SpinBox,
|
|
Packit |
b099d7 |
"TextField1",
|
|
Packit |
b099d7 |
argList,
|
|
Packit |
b099d7 |
n );
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/***** Create SpinBox decoration child *****/
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
decoString = XmStringCreateLtoR("/", XmSTRING_DEFAULT_CHARSET);
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNlabelString, decoString); n++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Decoration1 = XmCreateLabel( SpinBox,
|
|
Packit |
b099d7 |
"Decoration1",
|
|
Packit |
b099d7 |
argList,
|
|
Packit |
b099d7 |
n );
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/***** Create SpinBox child *****/
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNwidth, 30); n++;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNposition, thisDD - 1); n++;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNminimumValue, 1); n++;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNmaximumValue, 10); n++;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNspinBoxChildType, XmNUMERIC); n++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
TextField2 = XmCreateTextField( SpinBox,
|
|
Packit |
b099d7 |
"TextField2",
|
|
Packit |
b099d7 |
argList,
|
|
Packit |
b099d7 |
n );
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/***** Create SpinBox decoration child *****/
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
decoString = XmStringCreateLtoR("/", XmSTRING_DEFAULT_CHARSET);
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNlabelString, decoString); n++;
|
|
Packit |
b099d7 |
Decoration2 = XmCreateLabel( SpinBox,
|
|
Packit |
b099d7 |
"Decoration2",
|
|
Packit |
b099d7 |
argList,
|
|
Packit |
b099d7 |
n );
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmStringFree(decoString);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/***** Create SpinBox child *****/
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNwidth, 30); n++;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNposition, thisYY); n++;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNmaximumValue, 89); n++;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNmaximumValue, 99); n++;
|
|
Packit |
b099d7 |
XtSetArg(argList[n], XmNspinBoxChildType, XmNUMERIC); n++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
TextField3 = XmCreateTextField( SpinBox,
|
|
Packit |
b099d7 |
"TextField3",
|
|
Packit |
b099d7 |
argList,
|
|
Packit |
b099d7 |
n );
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/***** Manage SpinBox *****/
|
|
Packit |
b099d7 |
XtManageChild(SpinBox);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/***** Call changedSpinB AFTER displayed value has changed *****/
|
|
Packit |
b099d7 |
XtAddCallback(SpinBox, XmNvalueChangedCallback, changedSpinB, (XtPointer) 0);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/***** Manage SpinBox children *****/
|
|
Packit |
b099d7 |
XtManageChild(TextField1);
|
|
Packit |
b099d7 |
XtManageChild(Decoration1);
|
|
Packit |
b099d7 |
XtManageChild(TextField2);
|
|
Packit |
b099d7 |
XtManageChild(Decoration2);
|
|
Packit |
b099d7 |
XtManageChild(TextField3);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CommonPause();
|
|
Packit |
b099d7 |
CommonPause();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/**** Main Loop *****/
|
|
Packit |
b099d7 |
XtAppMainLoop(app_context);
|
|
Packit |
b099d7 |
}
|