hedman@cernvax.UUCP (fredrik hedman) (12/07/89)
Hi !
I would like to use the Xaw scrollbar to implement a valuator.
However, when I try to read the 'final' value directly from the
scrollbar widget instance using the routine XtGetValues() I always
get back 0.0. ( See GetFinalValue routine below )
Is this normal ?
If so, why is the value 0.0 and if not why does XtGetValues not work?
The version which I'm using is Apollo Domain/X11 which is somewhere
between X11.R2 and X11.R3. I'm running on an DN3000 under 9.7.
Please answer to me by e-mail and I'll post a summary.
Thanks in advance.
Fredrik Hedman
Below is sample program using Xaw widgets which will clarify the problem.
------ BEGIN CUT HERE -----
#ifndef lint
static char rcsid[] = "$Header: xscroll.c,v 1.6 88/02/14 15:13:11 rws Exp $";
#endif lint
#include <X11/Intrinsic.h>
#include <X11/Form.h>
#include <X11/Command.h>
#include <X11/Scroll.h>
#include <X11/StringDefs.h>
#include <X11/Cardinals.h>
#include <stdio.h>
/* Command line options table. Only resources are entered here...there is a
pass over the remaining options after XtParseCommand is let loose. */
static XrmOptionDescRec options[] = {
{"-label", "label", XrmoptionSepArg, NULL},
{"-horiz", "scrollbar.orientation", XrmoptionNoArg, "horizontal"}
};
char *ProgramName;
/*
* Report the syntax for calling xcommand
*/
Syntax()
{
fprintf( stderr, "Usage: %s\n", ProgramName );
}
void Thumbed(w, closure, top)
Widget w;
caddr_t closure;
float top;
{
printf( "thumbed to %f%%\n", 1.0 - top );
}
void Scrolled(w, closure, call_data)
Widget w;
caddr_t closure; /* Not used */
int call_data; /* Not used*/
{
/* Do nothing */
}
void GetFinalValue(widget, closure, callData)
Widget widget;
caddr_t closure; /* Scrollbar widget */
caddr_t callData; /* Not Used */
{
Arg arg[1];
float top = 0.5;
/*
This seems to mean XtNtop is really = 0.0
Why do I not get the value which Thumbed
gives me?
*/
printf("Top before: %.2f ", top);
XtSetArg(arg[0],XtNtop,(XtArgVal)&top);
XtGetValues((Widget)closure, arg, ONE);
printf("Top after: %.2f\n", top);
}
void main(argc, argv)
unsigned int argc;
char **argv;
{
Widget top, form, bar, com;
Arg arglist[10];
Cardinal i;
ProgramName = argv[0];
top = XtInitialize(NULL,"Demo",options,XtNumber(options),&argc,argv);
if (argc != 1) Syntax ();
form = XtCreateManagedWidget("form",formWidgetClass,top,NULL,NULL);
i = ZERO;
XtSetArg(arglist[0],XtNlength,(XtArgVal)200); ++i;
bar = XtCreateManagedWidget( "scrollbar", scrollbarWidgetClass, form,
arglist, i );
XtAddCallback(bar,XtNscrollProc,Scrolled,NULL);
XtAddCallback(bar,XtNthumbProc,Thumbed,NULL);
XtScrollBarSetThumb( bar, 0.5, 1.0 );
i = ZERO;
XtSetArg(arglist[0],XtNfromHoriz,bar); ++i;
com = XtCreateManagedWidget("Get Value",commandWidgetClass,form,
arglist, i );
XtAddCallback(com,XtNcallback,GetFinalValue,(caddr_t)bar);
XtRealizeWidget(top);
XtMainLoop();
}
------ END CUT HERE -----