Blame tests/Performance/SpinBox/SpinBoxPerf3.c

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
}