link button
August 14, 1996; Gregg M. Townsend
Requires: Version 9 graphics
See also: evmux.icn
This file is in the public domain.
These procedures implement pushbuttons using the "evmux" event
multiplexor instead of the usual vidget library.
button(win, label, proc, arg, x, y, w, h)
establishes a pushbutton.
buttonrow(win,x,y,w,h,dx,dy, label,proc,arg, label,proc,arg, ...)
establishes a row of buttons.
buttonlabel(handle, label) changes a button label.
____________________________________________________________
It is assumed that buttons do not overlap, and that fg, bg, and font
do not change beyond the initial call. These restrictions can be
accommodated if necessary by using a window clone.
button(win, label, proc, arg, x, y, w, h)
establishes a button of size (w,h) at (x,y) and returns a handle.
"label" is displayed as the text of the button.
When the button is pushed, proc(win, arg) is called.
If proc is null, the label is drawn with no surrounding box, and
the button is not sensitive to mouse events. This can be used to
insert a label in a row of buttons.
buttonlabel(handle, label)
changes the label on a button.
buttonrow(win,x,y,w,h,dx,dy, label,proc,arg, label,proc,arg, ...)
establishes a row (or column) of buttons and returns a list of handles.
Every button has size (w,h) and is offset from its predecessor by
(dx,dy).
(x,y) give the "anchor point" for the button row, which is a corner
of the first button. x specifies the left edge of that button unless
dx is negative, in which case it specifies the right edge. Similarly,
y is the top edge, or the bottom if dy is negative.
One button is created for each argument triple of label,proc,arg.
An extra null argument is accepted to allow regularity in coding as
shown in the example below.
If all three items of the triple are null, a half-button-sized
gap is inserted instead of a button.
Example:
Draw a pushbutton at (x,y) of size (w,h);
then change its label from "Slow" to "Reluctant"
When the button is pushed, call setspeed (win, -3).
b := button (win, "Slow", setspeed, -3, x, y, w, h)
buttonlabel (b, "Reluctant")
Make a set of buttons extending to the left from (490,10)
blist := buttonrow(win, 490, 10, 50, 20, -60, 0,
"fast", setspeed, +3,
"med", setspeed, 0,
"slow", setspeed, -3,
)