We'll now look at some of the Bio::Graphics extensions that were added after the initial release. This illustrates how code evolves in response to user input.
One of the objectives of Bio::Graphics was to support interactive browsable views of the genome using
web-based applications. My basic idea for this was that a CGI script
would process a fill-out form indicating the genome to browse and a
region to display. The script would make the database connection,
process the user's request, find the region or regions of interest,
pull out the features in the corresponding region, and pass them to
Bio::Graphics. Bio::Graphics would render the image, and the CGI
script would incorporate this data into an
<IMG> tag for display.
The one thing missing from this picture was the ability to generate an image map for the generated image. An image map is necessary to support the user's ability to click on a glyph and get more information about it. Image maps also make it possible to make tool tips appear when the user mouses over the glyph and to perform such dynamic HTML tasks as populating a pull-down menu when the user right-clicks on the glyph.
To support image map generation, the original version of
Bio::Graphics had a single method called
boxes(). This returned an array containing the glyph bounding rectangles, the features associated with each glyph, and the glyph objects themselves. To generate an image map, developers had to step through ...