
ButtonBox

This is a simple Button Panel widget.  Notable features are:

A) The buttons have four visible states (occupied-by-pointer/not-occupied
   combined with on/off).
B) Buttons can be given different functions (one-shot, radio-buttons,
   toggle buttons, help-about-this-button, etc).  One button may have
   several different response functions (within logic) depending on
   the pointer button and event state.  The conditions under which a
   button selection occurs are application selectable with button and
   state masks for each response.
C) Buttons can interact with each other in different ways (radio button being
   an obvius example).
D) Buttons can have submenus of buttons which appear when the parent button
   is selected (similar to 'pull-down-menus' in function but different in
   that they appear in an existing window, and remain until replaced).
   Submenus can be cascaded (submenus of submenu buttons, ...).
E) All calls are Xlib calls.  The design minimizes server interactions for
   efficient operation, even over a network.
F) Buttons are pre-processed with data structures largely filled at compile
   time to reduce start-up time and eliminate any reliance on server font
   resources at run-time.  (The pre-processor is in the tool sub-directory).
   (My preferred font is X10's helv12 which is different from that provided
   with X11 - both X10 and X11 pre-processing is available).
G) The button appearance is specifiable (copied from a sample bit-map of its
   border pattern).  It can be made runtime selectable to match the user's
   preferred "look-and-feel".
H) Buttons are run-time sized (and resized) to fit their windows.  When the
   text label must be clipped to fit a small button, characters are dropped
   and the remaining text is centered.
I) Text labels can be rotated in the pre-processor, allowing vertical
   text labels.
J) The interface can accept UNIX socket masks to return on non-X11
   UNIX select signals.


The organization of the code is outlined in ROADMAP.
