/* Written by Dan Heller and Paula Ferguson.
* Copyright 1994, O'Reilly & Associates, Inc.
* Permission to use, copy, and modify this program without
* restriction is hereby granted, as long as this copyright
* notice appears in each copy of the program source code.
* This program is freely distributable without licensing fees and
* is provided without guarantee or warrantee expressed or implied.
* This program is -not- in the public domain.
*/
/* monitor_sb.c -- demonstrate the ScrollBar callback routines by
* monitoring the ScrollBar for a ScrolledList. Functionally, this
* program does nothing. However, by tinkering with the Scrolled
* List and watching the output from the ScrollBar's callback routine,
* you'll see some interesting behavioral patterns. By interacting
* with the *List* widget to cause scrolling, the ScrollBar's callback
* routine is never called. Thus, monitoring the scrolling actions
* of a ScrollBar should not be used to keep tabs on exactly when
* the ScrollBar's value changes!
*/
#include <Xm/List.h>
/* print the interesting resource values of a scrollbar */
void
scroll_action(scrollbar, client_data, call_data)
Widget scrollbar;
XtPointer client_data;
XtPointer call_data;
{
XmScrollBarCallbackStruct *cbs =
(XmScrollBarCallbackStruct *) call_data;
printf ("cbs->reason: %s, cbs->value = %d, cbs->pixel = %d\n",
cbs->reason == XmCR_DRAG? "drag" :
cbs->reason == XmCR_VALUE_CHANGED? "value changed" :
cbs->reason == XmCR_INCREMENT? "increment" :
cbs->reason == XmCR_DECREMENT? "decrement" :
cbs->reason == XmCR_PAGE_INCREMENT? "page increment" :
cbs->reason == XmCR_PAGE_DECREMENT? "page decrement" :
cbs->reason == XmCR_TO_TOP? "top" :
cbs->reason == XmCR_TO_BOTTOM? "bottom" : "unknown",
cbs->value, cbs->pixel);
}
main(argc, argv)
int argc;
char *argv[];
{
Widget toplevel, list_w, sb;
XtAppContext app;
char *items = "choice0, choice1, choice2, choice3, choice4, \
choice5, choice6, choice7, choice8, choice9, \
choice10, choice11, choice12, choice13, choice14";
XtSetLanguageProc (NULL, NULL, NULL);
toplevel = XtAppInitialize(&app, "Demos",
NULL, 0, &argc, argv, NULL, NULL, 0);
list_w = XmCreateScrolledList (toplevel, "list_w", NULL, 0);
XtVaSetValues (list_w,
/* Rather than convert the entire list of items into an array
* of compound strings, let's just let Motif's type converter
* do it for us and save lots of effort (altho not much time).
*/
XtVaTypedArg, XmNitems, XmRString, items, strlen (items)+1,
XmNitemCount, 15,
XmNvisibleItemCount, 5,
NULL);
XtManageChild (list_w);
/* get the scrollbar from ScrolledWindow associated with Text widget */
XtVaGetValues (XtParent (list_w), XmNverticalScrollBar, &sb, NULL);
XtAddCallback (sb, XmNvalueChangedCallback, scroll_action, NULL);
XtAddCallback (sb, XmNdragCallback, scroll_action, NULL);
XtAddCallback (sb, XmNincrementCallback, scroll_action, NULL);
XtAddCallback (sb, XmNdecrementCallback, scroll_action, NULL);
XtAddCallback (sb, XmNpageIncrementCallback, scroll_action, NULL);
XtAddCallback (sb, XmNpageDecrementCallback, scroll_action, NULL);
XtAddCallback (sb, XmNtoTopCallback, scroll_action, NULL);
XtAddCallback (sb, XmNtoBottomCallback, scroll_action, NULL);
XtRealizeWidget (toplevel);
XtAppMainLoop (app);
}