term% cat index.txt PLBUTTON(2) System Calls Manual PLBUTTON(2)
NAME
plbutton, plcanvas, plcheckbutton, pledit, plentry, plframe, plgroup,
plidollist, pllabel, pllist, plmenu, plmenubar, plmessage, plpopup,
plpulldown, plradiobutton, plscrollbar, plslider, pltextview - panel-
creation functions
SYNOPSIS
#include <u.h>
#include <libg.h>
#include <panel.h>
Panel *plbutton(Panel *parent, int flags, Icon *label,
void (*hit)(Panel *pl, int))
Panel *plcanvas(Panel *parent, int flags,
void (*draw)(Panel*), void (*hit)(Panel*, Mouse*))
Panel *plcheckbutton(Panel *parent, int flags, Icon *label,
void (hit*)(Panel*, int, int))
Panel *pledit(Panel *parent, int flags, Point size, Rune *text,
int ntext, void (*hit)(Panel*))
Panel *plentry(Panel *parent, int flags, int width, char *text,
void (*enter)(Panel*, char*))
Panel *plframe(Panel *parent, int flags)
Panel *plgroup(Panel *parent, int flags)
Panel *pllabel(Panel *parent, int flags, Icon *label)
Panel *pllist(Panel *parent, int flags, char *(*gen)(int),
int length, void(*hit)(Panel*, int, int))
Panel *plmenu(Panel *parent, int flags, Icon **items,
int itemflags, void (*hit)(int, int))
Panel *plmenubar(Panel *parent, int flags, int itemflags,
Icon *label1, Panel *p1, Icon *label2, ...)
Panel *plmessage(Panel *parent, int flags, int width, char *text)
Panel *plpopup(Panel *parent, int flags,
Panel *left, Panel *middle, Panel *right)
Panel *plpulldown(Panel *parent, int flags,
Icon *label, Panel *pull, int side)
Panel *plradiobutton(Panel *parent, int flags, Icon *label,
void (*hit)(Panel*, int, int))
Panel *plscrollbar(Panel *parent, int flags)
Panel *plslider(Panel *parent, int flags, Point size,
void(*hit)(Panel*, int, int, int))
Panel *pltextview(Panel *parent, int flags, Point size,
Rtext *text, void (*hit)(Panel*, int, Rtext*))
DESCRIPTION
Each of these functions creates and initializes a new node of a Panel
tree and returns a pointer to the newly created panel. Existing panels
may be reinitialized (for example to change the label on a button) by
functions enumerated in plinitbutton(2).
The first two arguments of each panel-creation function are a pointer
to the new panel's parent and the flags that control plpack (see
plinit(2)). Arguments of type Icon* (a synonym for void*) are either
Bitmap or text labels. If the BITMAP bit of the flag word is set, they
are of type Bitmap*. Otherwise, their type is char*.
plbutton
plcheckbutton
plradiobutton
These three functions create pushbuttons. Plbutton creates an
ordinary button. Plcheckbutton creates a button with a check
mark that toggles on and off when the button is hit. Plra‐
diobutton likewise creates a button with a check mark, but with
the additional feature that toggling the check mark on toggles
off the checks of its siblings in the Panel tree. All three
take similar arguments: label is the text or bitmap drawn on the
button, and hit is the function called when a hit is registered
on the button. Its arguments are a pointer to the button and
the mouse buttons active when the hit occurred. The hit func‐
tions of plcheckbutton and plradiobutton take a third argument
that indicates the state of the button's check mark.
Occasionally, a button or other panel may wish to take no action
on sensing a hit. This is indicated by passing a null hit func‐
tion pointer to the creation function.
plframe
plgroup
These two functions create compound panels that enclose their
children in a rectangular area. The difference is that plframe
draws a frame around its children, but plgroup does not.
pllabel
plmessage
These two functions create passive (insensitive to mouse or key‐
board events) panels. The pllabel entry draws a label contain‐
ing a text string or a Bitmap. Plmessage draws longer messages.
Its arguments are the desired width of the panel, in pixels, and
a pointer to the text to be drawn. The text is displayed on
multiple lines, wrapping around at word boundaries.
plcanvas
creates an empty rectangle in a panel tree. The draw argument
is a function to be called by the panel library to redraw the
panel. Draw's argument points to the canvas to be drawn on.
The hit argument is a function called whenever a mouse event is
registered in the panel. Its arguments are a pointer to the
panel and a pointer to the mouse event. Hit receives all mouse
events with points within the canvas's rectangle and with a but‐
ton down. In addition, an event is sent when the buttons are
released over the canvas, or when the mouse moves out of the
canvas's rectangle. In the latter case, the mouse event's but‐
tons field has the OUT bit set.
pledit creates a panel that displays editable single-font text. Argu‐
ments are the minimum acceptable size for the panel, a pointer
to an array of Runes that initializes the panel, the number of
runes in the array, and a function to be called every time a se‐
lection is swept out with the mouse. The functions pleget, ple‐
len, plegetsel, plepaste, plesel, plescroll, and pleshowsel, de‐
scribed in plinit(2), manipulate the contents of edit panels.
plentry
creates a single-line text entry panel. Arguments are the mini‐
mum acceptable width of the panel, in pixels, a string that is
the initial contents of the panel, and a hit function to be
called whenever a newline is typed in the panel. The hit func‐
tion's arguments are a pointer to the panel and a pointer to the
string entered. Clicking the mouse over an entry makes it the
keyboard focus (the recipient of typed characters), as does
calling plgrabkb (described in plinit(2)).
pllist creates a panel containing a scrollable list of text items. Its
arguments are gen, a pointer to a function that, when passed an
integer argument, returns the text of the appropriate list item,
length, the minimum acceptable number of items to be displayed
on the screen, and hit, a function to be called when an item is
selected with the mouse. Hit's arguments are a pointer to the
panel, which mouse buttons were used to make the selection, and
the number of the item selected.
plmenu calls plgroup and plbutton to create an array of buttons. The
items argument points to an array of strings or Bitmap pointers,
one per button. A null pointer ends the list. Itemflags is the
flag argument used to create each button. The hit function's
arguments are the mouse buttons pressed to register the hit and
the button's index in items.
plpopup
creates a group, as in plgroup, except that where plgroup always
passes mouse events on to its children, plpopup may instead tem‐
porarily pop up a new panel and divert mouse events to it. The
arguments left, middle, and right are pointers to panels to be
popped up when the corresponding mouse button is pushed. A null
pointer causes events to pass through to plpopup's children.
plpulldown
plmenubar
Plpulldown creates a button that, when triggered by a mouse but‐
ton push, temporarily pops up a new panel. The label argument
points to a Bitmap or text label, pull points to the panel that
appears when the button is pushed, and side is a flag whose
value is one of PACKN, PACKE, PACKS, or PACKW, indicating the
side of the button on which the pulled-down menu should appear.
The plmenubar entry calls plgroup and plpulldown to create an
array of pull-down buttons. Its itemflags argument gives the
flags to be used when creating each pull-down button. Then fol‐
low an indefinite number of pairs giving the labels and pulled-
down panels of the buttons. The list ends with a null label
pointer.
plslider
creates a continuously variable slider. The size argument gives
the smallest acceptable size. If size.x>size.y the slider is
drawn horizontally, otherwise vertically. The hit function is
called whenever a mouse event changes the slider's value. Its
arguments are a pointer to the slider, the mouse buttons, the
slider's value, and the possible range of values. The value is
always between 0 and the range.
plscrollbar
creates a scroll bar. If the flags argument has PACKE or PACKW
set, the scroll bar slides vertically, otherwise horizontally.
Scroll bars are associated with the panels that they scroll by a
call to plscroll, described in plinit(2).
pltextview
creates a panel containing hit-sensitive formatted multi-font
text with bitmap illustrations. Its arguments are the minimum
acceptable size of the panel, in pixels, a pointer to a data
structure describing the text to be displayed, and a function to
be called upon registering a mouse hit. The arguments of the
hit function are a pointer to the panel, the mouse buttons that
caused the hit, and a pointer to the text element that the mouse
pointed at. The functions plrtstring and plrtbitmap, which cre‐
ate the Rtext data structure that describes the text, are de‐
scribed in plinit(2).
SOURCE
/sys/src/libpanel
SEE ALSO
plinit(2), plinitbutton(2), graphics(2)
Tom Duff, ‘‘A quick introduction to the panel library''.
PLBUTTON(2)