buttonfly(6D)

buttonfly - a pretty user interface for Silicon Graphics demos

As shipped in IRIX 6.5. First release of IRIX 6.5.

NAME
     buttonfly - a pretty user interface for Silicon Graphics demos

SYNOPSIS
     buttonfly [ menufile ]

DESCRIPTION
     Buttonfly is a user reconfigurable, hierarchical, graphical menu system.

     Buttonfly opens up a window and displays one or more buttons, each with
     its own title.  Moving the mouse pointer over a button and pressing the
     left mouse button selects that button, and will cause it to either exe-
     cute UNIX commands (such as running a program) or fly forward and flip
     over, exposing one or more new buttons.  Each of the newly exposed but-
     tons may also be selected to either execute UNIX commands or expose a new
     level of buttons, and so on.

     To go back to the previous set of buttons move the mouse pointer so it
     isn't over any of the buttons, and press the left mouse button (i.e.
     select the background). The buttons will flip over backwards to bring up
     the previous set.  Selecting the background at the top level does noth-
     ing.

     Using the middle mouse button instead of the left mouse button causes the
     new menu to be displayed immediately, instead of flipping it in to view.

     Pressing the right mouse button will bring up a different pop-up menu
     depending on which button the mouse pointer is over. Each menu has at
     least a 'Do It' entry; selecting this entry has the same effect that
     pressing the left mouse button while it is over the background would.

     Pressing the space bar will toggle between a full-screen version of but-
     tonfly and the window version.  The full-screen version is useful for
     presentations to large audiences, where visibility is important.

     To exit from buttonfly, press the escape key.

RECONFIGURING BUTTONFLY
     Buttonfly's menus were designed to be simple to change with any UNIX text
     editor (such as vi ).  When it is run with no arguments, it looks for
     button descriptions in a file called '.menu' in the current directory.
     If it is given one argument, it will look in that file for button defini-
     tions instead.

     Buttonfly uses a very simple format to describe its buttons.  The format
     has four different kinds of lines: comments, titles, actions, and com-
     mands.

     Any line beginning with a '#' character is considered a comment and is
     ignored.

     Button titles, like comments, always start in the first column of the
     file, and may be anything not starting with a '#'.  Titles may be a max-
     imum of 36 characters long; buttonfly will automatically separate the ti-
     tle into a maximum of three lines of twelve characters, separating words
     in the title at spaces.

     Action lines start with a tab and end with a newline, and may be any UNIX
     command.  Multiple actions may be specified for a button by listing them
     after the button one per line, each starting with a tab.  Actions may not
     span more than one line, but may be any length.  If no actions are speci-
     fied for a button, the button is displayed, but nothing will happen when
     it is selected.

     Commands, like actions, start with a tab character.  Currently, the com-
     mands recognized are '.menu.', '.popup.', '.cd.', '.color.',
     '.backcolor.', and '.highcolor.'.  Everything else is assumed to be an
     action and will be executed as a UNIX command in a shell (see sh(1)).

     The special action called '.menu.' is used to specify a button that has
     several buttons attached to the back of it.  When buttonfly sees '.menu.
     filename' it will create a new set of buttons from the descriptions in
     'filename'.  If it cannot find 'filename' in the current directory, then
     nothing happens.  If 'filename' is '-', then the new set of buttons is
     created from the standard output of the previous actions (see example
     below).  Note that any 'cd' commands in an action list do not affect the
     directory in which buttonfly looks for the filenames specified in
     '.menu.' commands, becuase actions are executed in a sub-shell (see the
     '.cd.' command below).

     Another special actions is '.popup.'.  It is used to define a pop-up menu
     entry attached to a button.  When buttonfly sees '.popop. title' it adds
     an entry 'title' to the button's pop-up menu.  The actions following a
     .popup. command will be executed when that menu entry is chosen.  But-
     tonfly automatically provides a 'Do It' entry, which has the same effect
     as pressing the left mouse button.

     The '.cd.' action is used to change buttonfly's idea of the current work-
     ing directory.  When the button containing the .cd. command is pressed,
     buttonfly will chdir into that directory before executing that button's
     actions, and all buttons underneath that button will also be executed in
     that directory (unless they also have .cd. commands).  Note that execut-
     ing the regular 'cd' shell command in a button does not affect
     buttonfly's idea of the current working directory, since all button ac-
     tions are executed in their own shell environment.

     The command '.color.' followed by three numbers in the range 0.0 ...  1.0
     specifies the red, green and blue components of a button's color, and
     '.highcolor' does the same for the color of the button as it is being
     selected.  '.backcolor.' changes the color of the back of the button,
     which becomes the background color of the next set of buttons (displayed
     when the button flips over).  Note that using color commands at the top
     of a file, before any buttons have been defined, causes the default
     colors to be changed for all subsequent buttons.  To change the back-
     ground color to red for the first button and all subsequent buttons you
     would specify:

          .backcolor. 1.0 0.0 0.0

     in the menu description file before any buttons are defined.

EXAMPLES
     The following are example buttonfly .menu files, with descriptions of
     what they do.

     This is a very simple button called 'First' that has the buttons defined
     in the file '.menu_second' on the back of it.

          First
               .menu. .menu_second

     Here are three buttons.  The 'Parent' button is purple and will flip over
     and display the other two buttons when pressed (they will be displayed on
     a purple background, since that is the color on the back of the first
     button).  The 'Demonstrate...' button changes directories and then runs a
     program when pressed, and 'Recurse' flips over and shows the first button
     again, this time on a blue background since the '.backcolor.' command
     changes the background color to blue.

          #Save this in a file called '.menu'
          Parent
               .color. .89 .10 .89
               .backcolor. .89 .10 .89
               .highcolor. 1.0 .5 1.0
               .menu. child

          #Save the following buttons in a file called 'child'
          Demonstrate GL/NeWS Interface
               cd /usr/NeWS/demo
               glnews
          Recurse
               .backcolor. 0.0 0.0 1.0
               .menu. .menu

     Here is a very complicated button, which builds a button file based on
     the files it finds in a directory full of files.  When pressed, it builds
     the file and then uses .menu.  to flip over, exposing entries for all the
     files it found.  Note that this allows you to delete or add image files,
     and the buttons will always be accurate.  It also has a pop-up menu on it
     giving help; the first .popup command specifies the title of the menu us-
     ing the %t feature of Silicon Graphics menus.

          Show An Image
               cd /usr/demos/data/images
          #
          # The following two lines must all be on the
          # same line in the .menu file
          #
               /bin/ls *.rgb | awk 'BEGIN{FS="."}{print "Show " $1
          "\n\tipaste /usr/demos/data/images/" $0 "\n"}'
               .menu. -
               .popup. ShowImage Menu %t
               .popup. Ipaste Man Page
               wsh -c man ipaste


BUGS
     Buttonfly will not work if the first character of a file is a TAB fol-
     lowed by anything other than .color., .backcolor., or .highcolor.  It is
     safest to eliminate any blank lines from the files you create.

     Buttonfly may crash if given an arbitrary file as input.

     The maximum number of buttons on any level of the hierarchy is 32.

     If a program fails to run, nothing happens-- no error messages or warn-
     ings are given.  This can be considered either a feature or a bug.

     Specifying %F, %f, %x, or %m as part of a .popup. title will give bad
     results, and may crash the program.  Using %t to specify a title works,
     but any actions specified for that entry will never be executed (since it
     is impossible to select a title entry).


ADDENDA
     AUDIO With the release of IRIX 6.3, audio was added to buttonfly.  When
     the buttons fly forward or back, the system will play corresponding audio
     files located in /usr/demos/Demo_Interfaces/Buttonfly.

     If the middle mouse option is used to move through the buttons without
     flight, the audio will not play.  The audio option can be toggled off by
     running buttonfly -a

INTEGRATION WITH WEB-BASED INTERFACE
     With the release of IRIX 6.3, we have added a web-based interface to the
     demos.  Since this interface already sorts demos based on categories, we
     were able to use a perl script ( mkmenu ) to access the sorted lists of
     demos and create buttonfly heirarchies dynamically.  When buttonfly is
     started now, by default, it will have the categories from the web UI:
     Features, Industries, and Hardware.
       The sub-categories which fall beneath these are viewable from the
     Search page of the web-based interface.  This is accessible from the sys-
     tem toolchest FindDemos menu option, or by typing http://localhost/Demos
     from your local web browser.
     Although these demos do not require the traditional structure, this
     structure is still supported, particularly since these changes were made
     via scripts, not in the buttonfly source code.

     To use buttonfly for accessing demos from the web-based interface (locat-
     ed in /usr/demos/General_Demos ) and demos with the traditional heirar-
     chy, just install or link the traditional heirarchy into
     /usr/demos/Buttonfly.  The mkmenu script automatically adds a button
     based on the menu file located in the new directory beneath
     /usr/demos/Buttonfly.


AUTHOR
     Thant Tessman and Gavin Bell Audio support: Diana Starr Perl scripts: Da-
     vid (Sprout) Anderson


FILES
     /usr/demos/Demo_Interfaces/Buttonfly/
          .menu               - custom menu file which supports
                           the display of demos from the web-based
                           interface and any demos in
          Times-Italic.bw     - font file
          buttonfly      - executable
          buttonfly.sh        - script to process input for buttonfly
          buttonflyAudio - script to process input for buttonfly, includes audio
          demofind       - script that finds demos
          in.aiff             - audio for buttons flying in
          manwsh         - script: launches shell with man page
          mkmenu         - script: dynamically creates
                           buttonfly menu files for demos
                           installed in web interface
          out.aiff       - audio for buttons flying out
          sea.rgb        - texture
          redirect       - script: redirects output of demo

     /usr/demos/Buttonfly
          buttonfly           - for convenience, this is a link to the above buttonfly.sh script
          buttonflyAudio - for conveniece, this is a link to the above buttonflyAudio script
          Additional Demo Trees    - Traditionally structured buttonfly heirarchies
                              can be installed in this directory


HARDWARE REQUIREMENTS
     Must have at least 24 bitplanes.