CHANGELOG

    ==============================================================================
    ===  TO DO  ==================================================================
    ==============================================================================

        Extra clipping planes don't support line shortening
        Include demo/tutorial kinemage ?
        Add "don't ask me again" boxes to warning messages
        Auto-create unnamed @aspects
        Make Find ignore points that have the invisible aspect (Z) active
        Kinemage title doesn't get updated in the kin list immediately
        @pdbfile should be interpretted relative to the kinemage file location!
        Develop "xkn" file specification / DTD / Schema
        Export as VRML 2.0 (VRML97) / VRML 1.0 -- useful for DiVE too (VRML97)?
        Make hierarchy editor drag-and-drop [requires Java 1.6+]
        Tau minimizer over a range (rebuild peptides too?)
        Do NOEs within d of x,y,z when nothing is mobile (same for Probe?)
        Support wordlists
        Show CB deviation in Hinge when not idealizing sc positions
        Draw: construct 4 and 5, polylines, triangle strips, true sphere, cylinder
        For multi-click draw ops, "miss" should reset?
        Draw tool - autolabel distances, angles
        For Views tool: Center Visible command (use r3.PrincipleAxes)
        Allow user to set focal length for perspective "lens"?
        Think about free-form docking tools
            Probably better to just save KPoint[] and Triple[] ...
        Add choice of experiments to expected NOEs
        Distribute noe-display in packaged KiNG versions?
        Text editor should notice edits to text and mark kin(s) as modified
        Create a java.net or Sourceforge project for KiNG to encourage plugin devel?
        Create HTML+applet mini-tutorials: kin editing, refitting, views, etc. etc.
        Mutate aromatics, Asn, Asp so that bond angles are stretched out ~2 deg.
        Mutated residues should retain B factors where possible (?)
        'space' with (point)masters - what does it mean?
        Create a splash-screen loader for KiNG (via manifest in Java 1.6)
        Optional 2 column button layout?
        Allow applet/prefs to set width of check-button panel
        Start points of invisible lines are still pickable
        Add ability to edit masters/pointmasters
        Look at Pro geometry with Jane
        White background to light gray?
            Rewrite KPaint to use its black/white (but not blendColors - hue shift?)
            Greentint a bit too dark; cyan could be darker?
            OpenGL: "fog" is linear* interp. in RGB space with background color
                Same on black backgr, slightly different on white.
        Expand KingLiteBinaryExport to do views
        KingLiteBinaryExport should automatically rescale coords to fit in 30 bits.
        Implement the 'moview= #' feature of Mage for J. Voet (?) (also 'movieview')
        Triptic (sp?) stereo for making figures?
        Add a movieFade() to beanking for doing transitions!
        Use E+H 2000 geometry for Pro?
        Do something about multiple copies of Driftwood classes -- in every JAR

    Open PDB in model manager without opening kinemage first?
        Open/save PDB from/to network
        Allow dragging waters/ions from chiropraxis?
        integrate multichart into KiNG?
        open pdb/map dialog boxes (initial dir) with Mac double-click startup
        Edit view menu: list action (double click/enter) should go to view
        Update docs for building, packing
        Remove references to GNU regexp library in docs, licenses
        Add ActionListener support to FatJList
        Add TablePane2.addCell(String [, width, height])
        Exceptions with missing @dimensions, @dimminmax
        MovieMaker needs ...
            an AnimateScene that steps through animate groups too
            to check window size, perspective on, __?__ before rendering
            filename prefix must be less than or equal to 20 characters for QT
            some control for FPS (controls default lengths)
        Logo sometimes ends up off-center (for OpenGL) after a Close All
        90 deg. rotation position tracker doesn't work in OpenGl mode
        Extend DnD to command line?
        Can't open ED maps at startup by DnD (?)
        sel-by-color: warn when using "if not", auto switch out of PC
        bug: moved n-D points will move back when axes are changed (?)
        use @dimoffset, @dimscale in parallel coordinate plots?
        make kinemage (esp views) behave OK when there are no points inside... (?)
        Make update probe a separate plugin?
        King can't seem to find residues with numbers bigger than 1000 when using a
           gzipped file.
     ** arrowlists are not covered in the documentation! (radius=, angle=)
        Removed MetalLookAndFeel property (from Java.Properties section) from
           Info.plist for Mac application; this is a workaround to get King to work
           in MacOSX Leopard, but changes the look of King...need to find a real
           fix.
        King bug with stereo!?!?
        algorithm to draw spider webs on beta sheets (a la classic painting)?...
        Open recent file function

    ==============================================================================
    ===  CHANGE LOG  =============================================================
    ==============================================================================
    ### 2.24 ###
    -Fixed up PDB Export tool to be a bit more user friendly and robust.
    -Changed PDF Export to use PDFBox instead of itext, which is no longer freely distributed.
    -Changed packaging method to jpackage from Oracle.
    ### 2.23 ###
    VBC 08/23/2017
    - Changed default behavior of displaying shaded interior of helicies to off.
    - Making distributions a bit more modern.
    ### 2.22 ###
    VBC
    - Incorporated DCR's improvements to electron density window, so it can show
      absolute electron density in addition to sigmas.
    DAK
    - Added instance= functionality for (sub)groups; used to be just lists

    ### 2.21 ###
    VBC
    - Fixed bug with kinfileBase and kinfileList applet param fields.
    - Fixed "A new version of king is available" text display bug.
    DAK
    - Made 'screen' work properly with instance= & clone= in Engine2D
    - Added helper getNumAnimate(2)Groups methods to Kinemage

    ### 2.20 ###
    VBC
    - Fixed image export bug preventing directory from being changed.

    ### 2.19 ###
    VBC
    - Fixed molikin not drawing disulfides.
    - Changed behavior of opening multiple electron density maps: tiered windows,
      automatic deciphering of file name to preset sigma levels and colors.
    - Added -phenix command line option to preset edens map colors to be more like coot.
    - Added king.help file....finally.
    DAK
    - Added Esc or Cmd+W keyboard shortcuts for Edit point props

    =======

    ### 2.18 ###
    VBC
    - support for moview.
    - support for foo kins (points that don't start at beginning of line).
    - added line in scanforversion in ToolBox to prevent an index out of bounds error
    - changed behavior for reading in ccp4 maps to auto open dialog box without having
      to hit ok; requested by Nat for more seemless integration into phenix.
    - added arrow to Presets menu in edensity tool.
    - made edensity window open slightly to side of graphics window.
    - added coot color presets to presets menu.
    - added Paint by contains text to edit/draw/delete.
    DAK
    - Added "Turn off" group/subgroup/list option to DrawingTool
    - Added window-closing-oriented keyboard shortcuts (e.g. Esc to close) to
      ViewEditor, GroupEditor, KinTree
    - Changed default in UIMenus so (ctrl|cmd)+W now closes current kin and
      shift+(ctrl|cmd)+W closes all current kins
    - Changes to ContentPane, Kinemage so - and _ keys "decumulate"/"decumulate2"
      as a counter-move to accumulate/accumulate2 with = and + keys
    - Added "Resize canvas" option under Display; required new resizeSplits method
      in ContentPane
    - Added error catch for resizing canvas to sizes bigger than the screen. Should
      work for multiple monitors.
    - Current working directory is set properly for Mac drag 'n' drops onto icon or
      actual kin canvas - eliminates a lot of pointless hierarchy navigation
    - Added add/remove master(s) option to Edit group/subgroup/list
    - Image exports now default to the current directory (where kin was opened from)
    - Made text window empty itself when last kin is closed (in king_prefs; off by
      default)
    ARK
    - For coloring backside of ribbons differently:
    - Added "Ribbon sides..." option to Display Menu; allows user to adjust HSV color
      values (stored in Engine, along with defaults)
    - Added "Flip ribbon" button to Edit/Draw/Delete > EditListProps Menu to flip
      sidedness
    - Side is determine in TrianglePoint and new color calculated in KPaint

    ### 2.17 ###
    - added paint by polyline to paint points
    - added new auger by color tool
    - minor change to KinFileWriter to aid "memory" of working directory
    - changes to RingPoint, AbstractPoint so 'screen' keyword works right (not there yet...)
    - added "Delete invisible" to "Edit / draw / delete"
    - upped vertical scroll speed of right-hand-side AGE panel via ContentPane
    - added plugins version info to about screen.
    - added support for "fore" & "rear" KList keywords.
    - Moved PDB suffixes to CoordinateFile from KingMain.
    - Added some get functions to ParaParams and ParaPoints to work with highD sliders.
    - Added documentation.
    - Fixed bug with hypertext going to wrong kin if didn't start with kin 1.
    - Added export text to text window.
    - Fixed help -> tools menu to not show all tools in one menu that goes off the screen.
    ## DAK
    - changes to Engine and Engine2D so that points in 'screen'-oriented lists are
      drawn at the bottom of the Z-buffer, i.e. truly in the background, and are
      not subject to cue by intensity
    - changed VectorPoint so 'screen' keyword "works"
    - added a limit in ColorPicker to the # colors visible on 'Edit point/list
      properties' (previously errors when lots of new colors user-defined)
    - small tweaks to point classes like AbstractPoint to improve code readability
    - minor changes to View/Point/GroupEditors so Enter key redirects to OK button
      on 2nd, 3rd, etc. time window is opened, not just 1st

    ### 2.16 ###
    - fixed bug in parapoints which prevented alpha from showing in PCoords.
    - starting to add screen keyword, changes in points, KList, parser.
    - shifted order of some commands in transform() in engine to facilitate screen keyword
    - added ability for king to read in files (pdbs to quickin) other than kins on command line.
    - added ability for king to read in ed maps from cmdline.
    - added gz files to list of accepted pdbs
    - changed build file to include molikin in the king jar for use with applet.
    - updated startup logo.
    - Fixed error messages that were getting output when running as applet.

    ### 2.15 ###
    - mostly changes in other king packages, I think.
    ### 2.14 ###
    - Fixed a bug in Drawing line segments where if you clicked on same point twice,
      points with nonsense values would get added to kin, causing issues with zooming.

    ### 2.13 ###
    - No major changes except to remove a property from Info.plist for Mac applications;
      MetalLookAndFeel was causing menus to disappear behind the graphics with MacOSX
      Leopard (see above).

    ### 2.12 ###
    - fixed the bug where the king logo wasn't getting put in the right place after
      any point id was displayed.  Seems like gl.glRasterPos2d was getting called by
      paintLabel, which was also changing the display position for the logo.
    - changed SelfUpdatePlugin to update probe also.  Maybe in the future update probe
      should be a separate plugin?

    ### 2.11 ###
    - deployed to world with pdb v3 probe.
    - added workarounds to JFileChooser creation bug in unsigned applets
      under Java 6 on Windows (Sun bug # 6570445)

    ### 2.10 ###
    - added KMessage.KING_SHUTDOWN message
    - made shutdown message cause all kinemages to be closed.
      This should reduce the amount of memory leaked by KiNG as an applet.
      Leaks are basically Java's fault;  all applets run in one VM and AWT/Swing
      tend to retain references that are hard to clean up completely.
    - fixed memory leak from ContentPane.btnMap (retained Kinemage ref on close all)
    - KinTreeModel appears to leak Kinemage refs, but they're empty placeholders
    - applet now releases (at least) kinemage memory when quit/closed
    - added .map and .map.gz to the CCP4 filter for electron density maps.
    - changed emails in manuals to vbc3

    ### 2.09 ###
    - deployed to world with plugin jars

    ### 2.08 ###
    - added "launcherImage" PARAM for WBA to customize Kinglet, and doc'd it
    - moved king.tutorial out of main source tree
    - fixed bug where @flatland had no effect, ever
      Thanks to Kevin Keating at Yale for the detailed bug report!
    - now store flatland state per-kinemage, like white background, etc
    - deployed to world without plugin jars

    ### 2.07 ###
    - updated kinemage format documentation (@dimoffset, @dimscale, select)
    - added @dimscale, @dimoffset to Kinemage, Parser/Writer
    - Show XYZ (in ToolServices) now uses scale, offset to display numbers
    - text window now defaults to read-only, controlled by checkbox and preference
    - added GUI for configuring whether text defaults to editable
    - deployed to rlab

    ### 2.06 ###
    - re-release due to Molikin if vs else-if bug

    ### 2.05 ###
    - confirmed that noe-display still works using LpxA
    - mutate residue, then choose Don't Keep -- residue stays mutated.
      This is a design blemish rather than a bug per se; can use Undo though.
    - AGE.clear() wasn't sending update messages, just changed silently
    - with changes to BgKinRunner, this finally fixes the problem where dots or
      NOEs displayed by ModelManager don't go away when refitting is finished.
    - fixed bug where text window wasn't cleared on Close All
    - updated credit image to say 2007
    - removed king.dive package to old/ -- Dave Z. doing C++ version
    - changed drag-n-drop mechanism so plugins can handle file drops too
    - added DnD support for electron density maps
    - Mac distro won't start in OpenGL mode for Andrew Ban -- don't know why, sorry
    - removed support files / service listing for king.dive
    - display of aspects was broken in KinCanvas (never synced to Engine)
    - added new point-painting modes: sphere, single point (copied from Mage)
    - added support for Mage's "select" property (KGroup, parser, writer, editor)
    - fixed some bugs in ParaParams that made axes disappear, points duplicate
    - changed Kinemage to set parent to null when deleting empty groups
    - released to world

    ### 2.04 ###
    - modified JoglCanvas to display logo and new version alert when no kin
    - bug fix: AGE.replace() did not call fireKinChanged()
      This manifested as very slow/erratic Probe dot update and the dots not being
      actually controlled by the "dots" button in the kinemage.
    - driftwood.PdbReader fix for VMD atom names
    - deployed to cluster
    - deployed Mac version with new Universal binary Probe in it

    ### 2.03 ###
    - changed glLineWidth() to glPointSize() when rendering DotPoints
    - fixed stupid typo for DiVE defaults that had eyes offset along Y instead of X
    - added Display | Auto-animate for Richard J. Feldmann
    - fixed long-standing "view jerk" bug in KinCanvas
    - changed KiNG 2 to look for updates in a different location -- this way users
      of 1.x won't be prompted to update until 2.x is stable.
      If we want them to update in the future, copy 2.x stuff into 1.x locations.
    - first public release of 2.x line!

    ### 2.02 ###
    - added GUI to connect to master for DiveTool
    - bug fixes for setting axes with high-dimensional kins
    - fixed KView.clone() to include viewing axes and call super.clone()
    - fixed borders on checkboxes in ContentPane that made button panel too tall
    - deployed to rlab for testing

    ### 2.01 ###
    - made KView notify the kinemage that owns it whenever it's changed
    - removed KMessage.VIEW_MOVED as there was no longer a need for it
    - this introduces a slight lag, so I upped the rate on the KinStable timer a bit
    - added limited support for remove() to KIterator, but it will work in the most
      common use-case (a for loop).
    - updated the BeanKing plugin; haven't tested all movie functions yet
    - minor fix for ContentPane.get/setGraphicsComponent() that was ruining the
      embedded KiNG example.  Failure to properly replace the graphics component
      caused KiNG to try every time, breaking the mouse drag in the process.
    - made LabelPoint not try to paint itself if its point ID is null.  This was
      sometimes a source of NullPointerExceptions when switching to parallel coords.
    - started working on a tool / plugin for remote control of the DiVE.
      Basic sanity check succeeds so far.
    - added new DiVE Commands: LoadKinemage, SetOnOffState
    - split CmdUpdateViewpoint into CmdSetView and CmdSetEyePosition
    - experimented with adding compression to ObjectLink, but it's not worth it
      for most of the objects we're currently interested in sending.
    - deployed to rlab for testing

    ### 2.00 ###
    - moved over highly modified code from the "prince" project.
      A summary of the changes:
    - TARGET LANGUAGE IS NOW JAVA 1.5:
      - features that were previously loaded by reflection to avoid breaking 1.3
        (mouse wheel listener, drag-and-drop) are now part of the mainstream.
      - the kinemage data structures use generics where appropriate
      - the enhanced for loop is used heavily
    - PACKAGES WERE REORGANIZED:
      - concrete implementations of KPoint (VectorPoint, etc) moved to king.points
      - kinemage I/O code (KinfileParser, etc) moved to king.io
      - drawing code and Painters moved to king.painters
    - KINEMAGE DATA STRUCTURES (Kinemage, KGroup, etc) HAVE BEEN ENHANCED:
      - most changes are detected automatically and tallied in the Kinemage;
        a separate mechanism checks for changes periodically and notifies KiNG.
      - KSubgroup has been eliminated; KGroup now fills both rolls.
        If KGroup.getDepth() == 1, it is a "real" @group. 2 is a @subgroup, etc
      - we are positioned to support "sub-subgroups" but do not yet do so
      - constructors have changed for KGroup, KList, and KPoints to not specify
        the parent explicitly; see next item. KList now must have type specified.
      - explicit calls to setOwner (now setParent) are not usually necessary;
        this is done for the child in response to calling add() on the parent.
      - parts of the kinemage hierarchy no longer implement MutableTreeNode;
        there is now a custom KinTreeModel that manages viewing as a JTree.
      - parts of the kinemage hierarchy no longer have a JCheckBox that has to be
        managed; the button panel is now totally owned by ContentPane
      - any group, subgroup, or list may have a Transform attached to it that
        dynamically changes how it is drawn to screen; this affects only the
        drawing X,Y,Z and not the "original" X,Y,Z (and thus not distances, etc)
        [this feature hasn't been tested yet]
    - WE'RE MOVING TOWARD MULTIPLE VIEWS OF ONE KINEMAGE (BUT NOT THERE YET):
      - the current KView and currently selected Aspect are now a property of
        a KinCanvas/Kinemage pair instead of a Kinemage (functions in KinCanvas)
      - stereo is at the moment still implemented by a single canvas, not two;
        one day we might change this (so both sides would be pickable)
      - picking could be made multi-view safe by doing a transform (not necessarily
        drawing) again for the particular canvas before picking, but those changes
        have not yet been made in the KiNG code that does the picking
      - button and master on/off state is still considered fundamentally a property
        of the kinemage, and so it has to be the same for all views still.
    - SIGNALING AND MESSAGING WITHIN KING HAS BEEN IMPROVED:
      - notifyChange(EV_*) and KinemageSignal are now replaced by KMessage,
        KMessage.Subscriber, and KingMain.subscribe/unsubscribe
      - new events (like KMessage.KING_STARTUP) may be of interest to tools
      - messages about changes in the kinemage should now happen automatically
      - calls to KinCanvas.repaint() should no longer be necessary
    - KING AS AN APPLET SHOULD BE MORE CAPABLE (WHEN SIGNED):
      - turns out that signing applets can be done effectively without having to
        buy a real certificate from VeriSign.
      - a signed applet can read/write local disk and therefore do rebuilding, etc
      - most tests to see if we're running as an applet should instead check
        KingMain.isTrusted; the current implementation may not be optimal though
    - PARALLEL COORDINATES HAS SEEN MODEST IMPROVEMENTS:
      - saving kinemage while in parallel mode is now safe
      - picking goes between normal and parallel modes; picked line is highlighted
    - SOME THINGS WERE RENAMED OR DROPPED ALTOGETHER:
      - TransformSignalSubscriber.signalTransform became Transformable.doTransform
      - KingView became KView (breaks lots of code!)
      - RecursivePointIterator became KIterator, with improvements
      - KPoint.get/setOrigX,Y,Z were dropped in favor of get/setX,Y,Z
      - AHE.get/setOwner became get/setParent, to fit parent/child naming scheme
      - GridBagPanel was dropped in favor of driftwood.gui.TablePane2
      - the GNU regexp libraries were dropped in favor of java.util.regex.*
      - KSubgroup has been dropped in favor of KGroup (see above)
      - KPoint.isTotallyOn was dropped because it was redundant with isVisible
      - KGroup.is/setRecessiveOn became is/setCollapsible as the latter is now
        the preferred form in kinemage files
      - MageHypertexter and MageHypertextListener became MageHypertext and
        UIText.HypertextListener
      - KPaint switched from java.awt.Paints to java.awt.Colors; only "invisible"
        was affected and it eliminated a lot of dangerous casts
      - the EDMap* classes were moved into king.tool.edmap where they belonged
      - KinLoadListener became king.io.KinfileLoader.Listener
      - KinWriter became KinfileWriter to be consistent with the other I/O classes
    - SPACE WAS CREATED FOR TUTORIAL CODE AND HTML:
      - one of the goals was to make king.core into a toolkit for 3-D graphics
        that could be used by programs other than KiNG proper
      - tutorials on how to use king.core are in king/tutorial/ (HTML) and in
        king/src/king/tutorial/ (Java code)
      - hopefully, future releases will see sample plugins here as well, etc,
        though we have to be careful not to clutter the JAR file too much

    ### 1.60 ###
    - Final release of KiNG 1.x series.  No other changes.

    ### 1.56 ###
    - set kMain to null in Kinglet.stop() to encourage garbage collection
    - added ParaPoint and ParaParams to implement parallel coordinates
    - added Overview view to menu when switching into parallel coordinates
    - added axes and labels for parallel coordinates plot
    - changed Views | Save to always save which dimensions are active
    - found out that viewing axis choices are already read and written -- yay me
    - added code to write out custom HSV colors
    - added documentation for @hsvcolo[u]r and @dimminmax (not implemented yet)
      This concludes the basic work of adding custom colors.
    - added parsing and saving for @dimminmax
    - many functions do not work properly outside the US, because Java tries to
      localize number formatting.  For instance, in Germany it uses commas instead
      of decimal points when saving kinemages.  Since KiNG thinks commas are
      whitespace, this destroys the kinemage.  Using Molikin is impossible.
      This will also be a problem for saving PDB files, etc.
    - this can be worked around on the command line
      (java -Duser.country=US -Duser.language=en ...)
      or by setting the default locale when KiNG starts (Locale.setDefault()).
      That seems to work even running as an applet, despite the security manager.

    ### 1.55 ###
    - replaced deploy-{rlab,world} targets with shell scripts
    - updates to KiNG's build.xml to work better with the shell scripts
    - Backrub now defaults to NOT idealizing the end sidechains (JSR)

    ### 1.54 ###
    - confirmed that new update URLs work fine
    - added linewidth to RingPoints, but it doesn't look very good
    - decided against monospaced font for the text window; doesn't look good
    - implemented parsing of @_axischoice
    - implemented saving of @_axischoice
    - updated docs with high-D stuff and @ringlist
    - changed DiVE export to backslash delimited
    - added triangles, labels, width/radius to DiVE export
    - hacked KPaint to allow for arbitrarily named, lightweight paint colors
    - added @hsvcolo[u]r keyword to KinfileParser
    - changed stereo code so cross/wall-eye toggle just swaps the images
    - hacked on image export code -- JPEGs on Windows were not closed out
    - changed ribbon coloring to match lighting AND *depth cue* between paired
      triangles, so now they really copy Mage's intent.  Code is ugly, though.
    - added Edit Group, Edit Subgroup, and Reveal in Hierarchy to the DrawingTool
    - updated to JSR JOGL 1.0.0 (Mac, Linux, Windows)
    - deployed to world on 20 Oct 2006

    ### 1.53 ###
    - added drag-n-drop support to JoglCanvas, so now DnD works in OpenGL mode
    - added aniso scaling to Hierarchy | Transform
    - added machinery for views to store choice of viewing axes
    - fixed some dependency-related bugs for axis selection vs. views
    - made buttons, sliders optional for ContentPane
    - added RingPoints and KList.RING
    - added support to KinWriter and KinfileParser
    - updated build file for new kinemage.biochem.duke.edu configuration
    - changed URL for auto-update tool
    - deployed to world
    - removed step that copies king.jar to MolProbity 2.x on kinemage

    ### 1.52 ###
    - changed all JOGL calls over the new "JSR" standard
      Major changes were in several constructors, and location of utilities.
    - JOGL now seems to work on Mac with being in /Library/Java/Extensions
      I'm not sure why this didn't work before.  Now we need to upgrade Win, Linux.
    - made KiNG's exported images 4x higher resolution.
      Should be easier to make figures now.
    - added TinyMap methods to AbstractPoint
    - moved aspects and pt comments to TinyMap storage.
    - added get/setAllCoords(), useCoordsXYZ() to KPoint, AbstractPoint, ProxyPoint
    - KinWriter checks getAllCoords() and writes those values if present
    - added get/setDimension() to KList
    - KinfileParser can now read dimension= at any level and store it in the list
    - KinWriter writes out dimension= for lists that have it != 3
    - added support for @dimensions to parser, writer, and Kinemage
    - added AxisChooser and Views | Choose axes... menu item
    - allowed @dimension as an alias for @dimensions

    ### 1.51 ###
    - fixed driftwood.moldb2.PdbSecondaryStucture bug (IndexOutOfBoundsEx)
    - distributed to Rlab
    - bug fix: SidechainRotator gave wrong rotamer evals (from prev. conformation)
    - changed appendKinemage() to not delete unused groups, masters in the already
      open kinemage.  This was previously causing problems for Chiropraxis tools:
      turning on dots before rotating a sidechain deleted the rotatable sidechain.
    - Mac app now starts in user home dir instead of Applications
    - NOT A BUG: missing dots on Arg NH? (1BKR Arg 32) [atoms have zero occupancy]
    - when running as applet, menu shortcuts are always CTRL-x (nice for Mac users)
    - added an Auger-like "Paint Points" tool to the KiNG drawing tool set
    - param name="king_prefs" value="config.props" was already documented...
      But I reinstalled LyX on my Mac anyway.
    - distributed to Rlab

    ### 1.50 ###
    - Rlab release with VBC tool fixes
    - code that cleaned empty masters, AGEs was removing instanced lists

    ### 1.49 ###
    - added king.core.Painter.drawOval(...) to make the circle o' death for Auger
    - changed DrawingTool to use drawOval() instead of XOR-ed drawing
    - added undo ability to the drawing tool's Move Points option
    - fixed: std/OpenGL flipping on Linux causes seg fault
    - we remove empty groups/subgroups/lists and unused masters on read and write.
      This keeps our kinemages nice and clean!
    - on save with multiple kinemages, we now ask: Save one, or save all?
      (First with drop-down box; later with radio buttons.)
    - POV-Ray export tool now exports currently visible kin ONLY, like pdf/png/jpg.
    - fixed bug re: pointmasters in elimination of unused masters
    - fixed typo in ArrowPoint that caused weird shortening if display area was
      non-square.

    ### 1.48 ###
    - changed KinCanvas to avoid "No OpenGL" error dialog if JOGL not present
    - removed deploy-local copy to Sites/molprobity

    ### 1.47 ###
    - minor bug fixes to chiropraxis code ("S" rotamers, BgKinRunner println's)
    - documented syntax of Mage hyperlinks, as best I can.
    - rewrote MageHypertexter using KinfileTokenizer for parsing. This should be
      more robust to formatting errors than the original code was.
    - added small white border to text window to improve readability
    - removed .gz from suggested save name b/c files are never compressed on save
    - added joglByDefault to king_prefs; it seems to work...
    - added joglByDefault to visual prefs editor
    - made joglByDefault true in the distro king prefs; it fails silently
    - updated JOGL libs to version 1.1.1

    ### 1.46 ###
    - threaded approach to KiNG version check wasn't working b/c I called run()
      instead of calling start() -- thus the thread was never actually spawned.
    - merged edit props, move points docs in with draw new tool docs
    - updated credits in the About box
    - added Richardson lab to splash screen image; updated KinCanvas version notice
    - deploy-world now copies ZIP to .current.java and docs to king/docs;
      this will simplify web maintainance and facilitate auto-update.
    - did a deploy-world to test the new build file
    - had to change 'server' to 'kinemage.biochem.duke.edu' or it breaks at home

    ### 1.45 ###
    - fixed hyperlink code to respect a slightly larger active area.
      It was previously cut too short on the right hand side.
    - added border to exported images
    - removed border from exported images; easier to do in Keynote/Powerpoint
      (but it does look really good!)
    - really long point IDs are sent to stdout when screen is drawn
    - Edit Properties and Move Points tools were merged into Draw New tool;
      Move Points also treats labels differently in order to "do the right thing"
    - moved the drawing tool to the main menu
    - NB: pick objects + move points = weird behavior (wrong end of lines)
    - made scroll wheel zoom work again for Draw New tool
    - implemented arrowheads (directional vectors, @arrowlist) in ArrowPoint.
      Had to modify VectorPoint and Engine very slightly to accomodate this.
      Implementation is not complete yet (no read/write)
    - modified KList, KinfileParser to read in @arrowlists
    - modified KinWriter to write out @arrowlists
    - deployed to Rlab for testing

    ### 1.44 ###
    - fixed memory specs in KiNG Mac bundle ("16MBm" to "16m" as memory size!)
      This is required for proper operation with Java 1.5.x
    - removed File | Exit menu choice when running as an applet
    - added extratools.jar to InstallAnywhere script (fixes missing tools on Win)
    - added mechanism to supress background painting to Engine
    - added transparent-background option to Image and PDF export tools
    - we now copy chiropraxis, extratools PDFs into dist/doc/ for exe distro
    - updated Kinemage to make animate turn off all 2animate and vice versa,
      which is the standard behavior established by Mage. (fixed for J. Voet)
    - fixed current-dir bug re: auto file naming in image/PDF export plugins
    - clarified documentation of instance=
    - documented the meaning of a space (" ") inside a point's aspect list
    - Oops! chiropraxis/extratools PDFs went to wrong folder. Now fixed.
    - added docs in king-ver/doc/(chiropraxis|extratools) to InstallAnywhere script

    ### 1.43 ###
    - changed AbstractPoint.getDrawingColor() to ignore unrecognized aspect codes.
    - work done to make background Probe runs more reliable, esp. on Windows
    - changed default helperTimeout to 15 sec; nicer for slow systems.
    - deployed bugfix for Probe remote update to world on 26 May 2005 (r159)

    ### 1.42 ###
    - added king_prefs flag for measureVectorVectorAngle
    - added thoughts (but no code) to VectorPoint re: pointmasters on one end only
    - modified BeanShell plugin to respect KiNG's fontMagnification setting
    - modified KinfileIO to be able to load kins from a raw InputStream
    - changes to Chiropraxis and Driftwood to make Probe dot updates faster and to
      make handling of alternate conformations more robust.
    - made release version for Dave @ ACA on 24 May 2005 (r157)

    ### 1.41 ###
    - added check for null Graphics in code for auger (DrawingTool)
    - removed depth-cue-by-size for balls (already gone for spheres), because their
      sizes get too distorted, and its very misleading when size matters.
    - replaced most references to Color.black/white with KPaint.black/white.
      In the future, this might let us do an off-white background, though KPaint
      still needs more work for that to happen correctly.
    - rewrote complex expressions in KPaint in terms of linear interpolations,
      but without changing the results at all. Removed unneeded Math.min(1, ...)
    - glEnable(GL_LOGIC_OP) + glLogicOp(GL_XOR) only works for indexed color,
      apparently. See p. 310 of the Red Book.
    - tried blending tricks to get XOR via OpenGL with no success. Using cached
      Graphics/GL objects produces null result too. For now, give up.
    - changed KinCanvas.print() to use getCanvasSize(); now works properly w/ JOGL.
    - added size param to KinCanvas.paintCanvas(); this fixes sizing problems for
      image and PDF export encountered when using OpenGL mode.
    - small mod. to DrawingTool XOR code for auger to be more correct/robust.
    - now recognize 'T' in point declarations. No-op, but avoids an error message.
    - included extratools in dist src/ (but not javadocs)
    - fixed Windows/Linux installers to have 1GB memory cap (same for OSX app)
    - updated all dists (Mac/Win/Linux) to bundle Probe 2.11
    - doc: plugin jars go AFTER king.jar with commas (,) in applet ARCHIVE="..."
    - moved documentation for extra tools to their own packages
    - dist. to world 4 May 2005 (r145)

    ### 1.40 ###
    - updated Mac app to JOGL 1.1b10
    - created VM packages for Win, Linux installers with 1.4.2_07 and JOGL 1.1b10
    - updated manual b/c install location for JOGL libs under Linux has moved
    - fixed MovePointsTool to not process SpherePoint disk proxies
    - created dedicated tool for BACKRUB in chiropraxis.kingtools
    - added setContrast() to KPaint and KPalette
    - added "Set contrast..." function to the Display menu (may need tuning)
    - let ToolBox search (relative) URLs specified by applet PARAMs (plugin#=...)
      ... only it can't work, because applets aren't allowed to make class loaders!
    - moved most tools and plugins to a separate jar file: extratools.jar
    - modified EDMap plugin to do coarser contours for figure production, etc.
    - distributed to Rlab on 11 April 2005

    ### 1.39 ###
    - modified VectorPoint and TrianglePoint so object picking always returns the
      last point -- this makes changing colors, etc. much easier and more natural.
    - updated manual re: object picking; king_prefs text was OK as-is.
    - changed KingLiteBinaryExport to write multi first, as part of change to new format.
    - added group/subgroup/list export to KingLiteBinaryExport
    - added animation support to KingLiteBinaryExport
    - Vince fixed Java 1.5 bugs: no kin selected on open, mouse drag produces click
    - fixed sphere rendering bug by not doing depth cue by width for spheres
    - deployed to world on 9 March 2005 (r123)

    ### 1.38 ###
    - updated copyright dates in license, manual, About box, logo
    - clarified antialiasing code in JoglPainter
    - experimented with JOGL antialiasing via the accumulation buffer, but too slow.
    - discovered calls to enable full-scene antialiasing in GLCapabilities. Yay!
    - BallPoint.signalTransform(): mostly translucent balls no longer shorten lines
    - eliminated lingering resize cursor over GL canvas
    - Save on Exit is now yes/no/cancel
    - removed duplicate constant definitions from KPoint
    - fixed picking so invisible, aspect-invisible, and pointmaster off points
      will no longer be picked when they're not visible!
    - BallPoint now checks drawing color instead of isOn (similar to above)
    - added engine.syncToKin() to printing function, but it still doesn't work...
    - object picking is now disabled by default, like in Mage
    - removed dot prod angle from measures display
    - relabeled drawing tool to reflect presence of auger, prune, etc.
    - deployed to Rlab's new server on 27 Jan 2005
    - implemented BallPoint.getRadius()
    - added KingLiteBinaryExport for writing data to KingLite
    - added PalmDB format to exporter
    - support list/point color as displayed for KingLite export
    - fixed bug in Palm header output (misunderstood meaning of field)
    - changed Longs in DataTool to longs
    - set -source and -target flags in build.xml
    - added bitmask for ball radius in KingLiteBinaryExport
    - fixed KingLiteBinaryExport to deal with @colorset colors correctly
    - fixed NPEx caused by bond rot code in parser when loading 0-byte file
    - reordered items in Draw palette to avoid dot/dotted line confusion
    - balls and labels are always "object pickable" now

    ### 1.37 ###
    - added undo stack to BeanKing movie commands
    - added editing of "nohighlight" flag for lists to GroupEditor
    - added support for multiple, front/back-independent, clipping planes in Engine
    - added variable for clipping mode to KList
    - added clipping planes tool
    - made MagnifiedTheme work with Java 1.5
    - made menus correctly overlap JOGL canvas for Java 1.5
    - added Go Next/Prev to ViewEditor at Andrew Ban's suggestion
    - changed KinStable.changeCurrentKinemage() to count instead of use @title
    - made master hyperlinks trigger a re-draw
    - deployed to world 4 Jan 2005 (r103)

    ### 1.36 ###
    - masters now have 3 states in kin file: default (auto detect starting state),
      on, and off (these two force the kinemage to match them).
    - documented on/off for (point)masters in the kinemage format doc
    - fixed pointmaster bug for merging kins introduced in v1.32
    - updated BeanKing to have some nice built-in functions. Try 'help();' for info.
    - changed JoglPainter to paint single pixels for width=1 dots
    - fixed depth-cueing by width in JoglPainter; checked double buffering (OK)
    - modified Hierarchy editor GUI -- all buttons on left side now
    - second fix for depth cues, thinline, etc.; in KinCanvas.paintCanvas()
    - third time's the charm: created Engine.syncToKin() function to be called
    - fixed kinemage property editor to sync Display menu checkboxes
    - now write out width= for dot lists too
    - tried adding black edges to balls for non-translucent balls only
    - fixed bug in Engine: clipDepth not calc'd after perspective correction
    - fixed bug: writeFPS now works with JoglPainter
    - added black rims on balls to all painters (ala Mage)
    - fixed bug that broke Views menu after kinemage merge from cmd line (merge bug)
    - fixed bug in RecursivePointIterator.nextImpl() that caused StackOverflowErrors
    - created Swing thread-safe GUI for BeanKing along with movie-making functions
    - added up/down cmd history to BeanKing
    - substituting dispose() for setVisible(false) in PointFinder seems to fix
      issues with focusing the search field on subsequent searches.
    - tried dispose() in PointEditor, GroupEditor, and KinTree (redraw problems)
      seems somewhat slower, but solves a lot of the redrawing problems!

    ### 1.35 ###
    - fixed EDMapPlotter so mesh/vector ED won't be translucent, only triangle/poly
    - removed MasterGroup.pmLookup b/c it's no longer used by anything
    - replaced JoglFrame with JoglCanvas, which gets embedded in the usual space.
    - fixed sizing bug for JoglCanvas so it's usable in applet mode too!
    - fixed comment-actions to support http: vs. http:// correctly
    - bug fix: KinCanvas.paintCanvas() uses quality instead of renderQuality
    - that fixed the null-output-in-JOGL-mode bug for ImageExport
    - removed ref to extra window for JOGL in KiNG manual
    - moved 5 display settings to being stored on a per-kin basis: perspective,
      background color, list color dom, thin lines, thickness depth cueing.
    - now support 'off' and 'on' for (point)masters, though 'on' has limited effect
    - pointmaster-off balls no longer cause line shortening
    - released to lab (r92) on 7 Nov 2004

    ### 1.34 ###
    - changed triangle depth-cueing to the average of backmost two points.
      This is compatible with "outlining" triangles with vectors, e.g. for ribbons.
    - added support for storing, reading, writing point comments
    - now allow editing of point comments from king.PointEditor
    - point comments are already documented in the kinemage format doc
    - point comments starting with "http:" now open a Java browser for that URL
    - started work on POV-Ray export function
    - POV export works competently now
    - POV export supports smooth triangles and usually gets the normals right
    - touch-ups to POV export (dot width, explanatory text)
    - allow triangle smoothing for POV export to be disabled
    - allowed plugins to appear in File | Import (or Export) instead of Tools menu.
      Required work on exporters, ToolBox, UIMenus.
    - moved image, PDF, etc. export tools to king.tool.export
    - updated manual re: exporting, esp. for POV-Ray
    - deployed to Rlab on 22 Nov 2004 (r90)

    ### 1.33 ###
    - Made AHE into an interface and moved the functionality into AHEImpl
      This will allow us to make KPoint into an interface, leading ultimately
      to lightweight KPoints like the ones we need to do a SpherePoint class.
    - converted KPoint into an interface, and moved impl into AbstractPoint
    - removed unused function preTransform() and viewTransform() from AHE
    - added ProxyPoint as the future basis for SpherePoint disks
    - changed ball painting in HighQualityPainter to use doubles, not ints
    - added SpherePoint class
    - added Painter.paintSphereDisk()
    - fixed bug: parser was making @spherelists into @balllists
    - finalized math for SpherePoints; checked in (r82)
    - fixed bug where KinCanvas.print() didn't bestPainter.setGraphics(), resulting
      in either a NullPointerEx or a stale graphics object.
    - added setting for alpha in list editor
    - made vectors use alpha
    - protect against parent==null in parent.alpha for Ball/Triangle/VectorPoint
    - documented kinfileBase, kinfileList, kinfileSaveHandler
    - released r85 to the world on 10.26.04

    ### 1.32 ###
    - changed EDMapPlugin so that it asks for map format after you choose a file
    - documented mouse keys: use Meta and Alt on Mac, not Shift and Ctrl
    - added URL kinemage file opener to KinfileIO that uses applet parameters
      'kinfileBase' and 'kinfileList' like EDMapPlugin does for maps.
    - added URL kinemage saver to KinfileIO that POSTs to 'kinfileSaveHandler'
    - set up JOGL libraries so anybody using SVN can compile JOGL version
    - added JOGL libs to src code distro, so downloaders can compile it too
    - add JOGL native libs to the Mac Application Bundle
    - AIOOBEx in HiQualPainter line 111 arises when depth cueing by line width is on
    - VectorPoint was multiplying by widthCue prematurely in setting line width
    - fixed naming swap with "Prune" and "Punch" in Draw New tool
    - added "do nothing" button to the draw new tool (can also just ctrl-click)
    - reformatted tabs in Kinemage and KinfileParser source code
    - moved pointmasters into Kinemage so that 1) each kin can choose 32 different
      chars to be pointmasters and 2) unknown pointmasters are auto-created.
      Tested and debugged on- and off-line using Cb kins and multikins.
    - updated pointmaster section in kinemage format document
    - made pointmasters behave like masters and like Mage: dominant-off
    - updated pointmaster docs again
    - distributed to the world on 15 Oct 2004 (r80)

    ### 1.31 ###
    - Ant script now creates javadocs as part of "dist" target
      This makes the source code bundle larger, but nicer for other users
    - created a sample_plugins distro with A. Mantler's code, pyking, and beanking
    - changed KinfileTokenzier.main() to produce HTML output with the -css switch
    - r63 introduced Shuren's changes to the model manager...
    - added line numbers to IllegalStateExceptions in KinfileTokenizer
    - fixed bug: JSR: KiNG writes two copies of refit atoms, moved and original
    - marking these bugs as CANNOT REPRODUCE:
        JSR: measures+xyz+superpick switch themselves off
        JSR: sc rot / ca hinge and the ca hinge dialog disappears
        JSR: rotamers don't always update angle settings (another typo?)
    - changed Hierarchy Editor so Paste operations append at the end, not beginning
    - modifiers for mouse wheel seem fine (Shift, Ctrl)
    - modifiers for clicks are seriously screwed up on the Mac:
      Right and Meta are indistinguishable; Middle and Alt are indistinguishable
      Ctrl-click generates a mousePressed() but not a mouseClicked()
      There are finally better methods to query this in Java 1.4, but we use 1.3.
      Only feasible solution at this point is to document the work-arounds.
    - released to cluster only

    ### 1.30 ###
    - modified KPaint.getPaint() to use a cached Color object when possible
    - BallPoints now can use tranlucency (alpha)
    - elaborated on JOGL install instructions
    - changed labeling drawing tool to ask what label text should be, w/ ID as def.
    - label drawing tool can now either ask or use default, controlled by checkbox
    - added mechanism for tracking whether a kin has been modified to Kinemage
    - added checking for modification and prompting for save before exiting KiNG
    - saving kinemages through KinfileIO clears their modification flag (if set)
    - GroupEditor sets the modified flag on kinemages now
    - KinTree and PointEditor cmds now set the modified flag
    - ViewsEditor sets the kin-modified flag
    - DrawingTool and SolidObjPlugin set the modified flag
    - MovePointTool sets the modified flag
    - both docking tools set the modified flag
    - EDMapWindow now sets modified flag when map pieces are exported
    - added mouse-listener hooks to support hypertext in UIText
    - View | Save updates the kin-modified flag
    - Vincent added bond-rotation support to parser, Kinemage
    - removed PyKiNG plugin b/c it's slowing down load times
    - modified build.xml:deploy-local to use MacApp jars instead of 2nd copy
    - text window now accepts listeners for hypertext events
    - added kinemage format doc to KiNG's doc/ folder
    - added custom icons to the Hierarchy editor that show on/off state of things
    - added kinemage format doc to installers
    - swapped pyking out for beanking in installers

    ### 1.29 ###
    - used getValueIsAdjusting() to make ED sliders smooth
    - fixed menu configuration system that I broke earlier...
    - changed auto-rock to use a sin() function for smooth pauses at either end
    - tried to fix file extensions, but they're still broken...
    - JPG, PNG, and PDF files now are checked for proper extension at save time
    - kept the text window from scolling when new text is added
    - revised menus layout for Tools menu
    - You can't change java.library.path from within the program. This is a well-
      known-but-poorly-documented deliberate "feature" of Java. I'm not sure why.
      This, at least for the moment, pretty much destroys my hopes of bundling
      the JOGL libraries with KiNG in a convenient way.
    - JOGL window now closes when it's KiNG is shut down in multi-window mode.
    - changed 'recessiveon' to 'collapsable' in GroupEditor
    - added warning about saving with multiple kinemages open
    - fixed annoyance that closing one kin would leave nothing selected
    - deployed to the world on 16 June 2004

    ### 1.28 ###
    - added the "accumulate" animation function from Mage
    - changed the meaning of KPoint.get/setX/Y/Z to refer to the untransformed (original)
      coordinates, and deprecated get/setOrigX/Y/Z(). Added get/setDrawX/Y/Z().
    - added note to user manual about installing plugins (but didn't update)
    - moved documentation for Chiropraxis tools out of the KiNG manual proper
    - ToolBox now loads king_prefs for other tools into the defaults object of
      KingPrefs. This keeps those menu names from appearing in ~/.king_prefs.
    - moved all references to the Graphics object out of Points into the Painters
    - KinCanvas now creates and manages the painters based on rendering quality
    - created clear, clip/viewport, and font methods for Painters
    - implemented JoglFrame and JoglPainter;
      JoglPainter does not support markers, labels, or ToolBox overpainting yet.
    - replaced calls to KinCanvas.getSize() with getCanvasSize() for OpenGL.
    - implemented ToolBox overpainting using images, but it's very, very slow
      if something is actually drawn. Not too bad if nothing drawn (~30ms).
    - changed to an alternative scheme that's much faster (30 / 50 ms)
    - added "Installed in ..." line to About box and SelfUpdatePlugin
    - implemented lazy loading of JOGL libraries in KinCanvas
    - fixed stereo offset problem for JOGL; fixed stereo clipping issue in Engine
    - implemented label painting using the bitmapped font functions in GLUT
    - replaced overpaintCanvas(Graphics2D) with overpaintCanvas(Painter);
      this eliminates JOGL performance problems previously caused by overpainting.
    - implemented marker painting for JOGL (not all markers have been tested)
    - documented the SelfUpdatePlugin
    - documented the OpenGL acceleration feature
    - documented new king/chiropraxis dependency structure, new painting in HACKING
    - deployed to Rlab on 7 June 2004

    ### 1.27 ###
    - modified Engine and KPoint.isPickedBy() to account for object picking
    - implemented object picking for triangles
    - added "Pick objects" item to Tools menu
    - implemented object picking for balls and spheres
    - in picking functions, now pass radius instead of radius^2 (for lines)
    - implemented object picking for line segments
    - updated the section on Tools and Plugins in HACKING to reflect the dynamic
      service-provider loading model that was implemented in 1.24 / 1.25
    - updated documentation (Tools | Pick objects)
    - added Mage-like "count" function to the writeFPS output for Jeremy
    - moved all the drawing functions into StandardPainter and HighQualityPainter
    - king can now find all plugins in the plugins/ folder where king.jar is
    - started SelfUpdatePlugin to simplify the task of upgrading to a new KiNG
    - machinery works, now all it needs is a UI!
    - finished UI for SelfUpdatePlugin, tested it on Windows. Looks ready to go!
    - migrated to building with Ant 1.6.1; replaced "antscp" task with now-std "scp"
    - moved all the KiNG remodelling tools into chiropraxis
    - fixed ToolBox to find menu preferences for JARs that are in plugins/
    - deployed to Rlab 25 May 2004
    - Oops! migrated tool resources too.

    ### 1.26 ###
    - added Mage's HTML description of the kinemage format
    - updated manual intro to make it more clear that kinemages are *illustrations*
    - mentioned kinemage format doc in user manual Ch. 4
    - updated manual section on viewing animations
    - made a note about configuring Tools menu in the manual
    - put a "Don't warn me again" control on the stereo-pick warning dialog
    - protected against showing warning for pick with no kinemage open
    - stopped model manager dialog from jumping around when switching tools
    - added the machinery to Engine to allow efficient instance= impl
      Doesn't seem to have broken anything (yet!)
    - modified KList to be able to do instance=
    - modified KinfileParser and KinWriter to handle instance=
      Groups and subgroups marked as instance= are still handled wrong
    - modified clone() for lists/subgroups/groups and KinfileParser
      to correctly support instance= {xxx} for groups and subgroups
      (deep copy of group/subgroup/list, instance= copy of points)

    ### 1.25 ###
    - tools and plugins can be placed in submenus based on the .king_prefs file
    - KingPrefs now searches all jars for default settings in king/king_prefs
    - multi-jar approach to tool distribution works beautifully
    - PrefsEditor now wipes all keys before doing a reset -- truly clean
    - now we only store changes from defaults prefs, with a note to look at the
      complete version of king_prefs for more ideas.
    - created a GUI for determining which tools are in which menus
    - UIMenus now rebuilds the tools menu when preferences are changed
    - added EDMapPlugin.toString()
    - removed ellipsis from menu items for a few plugins (for uniformity)
    - added menu configuration to the bottom of the Tools menu
    - ripped out the old AnimationGroup and replaced it with a simpler scheme
    - removed Animations menu and AnimationGroup class
    - placed animate, 2animate buttons as needed in button pane
    - added A, B keyboard shortcuts for animations to ContentPane (+ docs)
    - fixed a view-calculation bug for kins with only one point

    ### 1.24 ###
    - factored "fade-out" multipliers into constants in KPaint so they can be tuned.
      With current structure, not practical to configure at runtime, but can be set
      at compile time. Not much benefit for full fade-to-white with kinemage graphics...
    - brushed metal look in partly missing for button panel in Safari, but putting
      in an extra JPanel results in unpredictable mixtures of metal and Apple pinstripes.
    - updated Hacking KiNG with notes about Jama in the driftwood section
    - began erasing the distinction between Tools and Plugins by
      making BasicTool a subclass of Plugin.
    - rotamer window now asks Yes/No/Cancel when user tries to close it
    - making movies should be done from the POV-Ray exported data, not in KiNG
    - fixed chiropraxis bug that left Ala H's oriented randomly upon "idealization"
    - migrated to using version.props AND buildnum.props to simplify version control
    - merged tool/plugin loading and menu items into a single process in ToolBox
    - removed the now-useless getToolsRBMI() from BasicTool
      Theoretically breaks backward compatibility for tools, but not often in practice
    - added getDependencies() and isAppletSafe() to Plugin
    - filled in the correct values for tools and plugins that needed them
    - converted ToolBox to use a service-provider model for discovering plugin names
      and loading them.

    ### 1.23 ###
    - added arc drawing tool
    - decided that Aqua LnF still isn't mature -- random NullPointerExceptions
      and problems with file-chooser dialogs (setting selection/name).
    - KiNG runs correctly with Java 1.3.1_11, 1.4.2, and 1.5.0_beta1.
      Jane's problem with 1.3.1 must have been Mozilla-specific.
    - added setOrigXYZ() to KPoint
    - added arrowheads to arc-drawing tool
    - added shortening to arc-drawing tool and fixed bug at 180 degrees
    - made BgKinRunner timeout configurable in king_prefs
    - documented arc tool
    - changed Views menu to wrap into multiple menu lists for a LOT of views
    - changed the JList in ViewEditor to display lots of views gracefully
    - apparently using full-app antialiasing with Metal on the Mac leads
      to that annoying JLabel/JCheckBox ellipsis (...) bug, regardless of layout.
      Bug report has been submitted to Apple but I don't expect a fix anytime soon.
    - updated build.xml to copy manual to kinemage website
    - changed Mac app bundle to not use full-app antialiasing but keep using Metal.
    - KiNG now allows breaks in a ribbon- or trianglelist using the X flag
    - added presets to EDMapWindow for 2Fo-Fc and Fo-Fc maps
    - added Remove Last button to LSQ docking
    - added angle between two vectors to the measures tool
    - in point editor, setting point radius/width to "" is now equivalent to "0"

    ### 1.22 ###
    - showHelperOutput was broken for background jobs like Probe;
      it dumped stderr again instead of stdout.
    - added PDF export based on the iText PDF library
    - integrated iText libraries into my distribution
    - removed EPS export
    - updated README, BUILDME, and User Manual to reflect replacing EPS with PDF
    - current king_prefs is now copied to doc/ folder on every build
    - sidechains are now fully idealized by Hinge.
      They were already full optimized upon rotation or (of course) mutation.
    - fixed flaw in Kinemage where an empty kin would create a view centered at NaN
    - Show XYZ Point now also writes the coordinates to standard error
    - in the text window when using Metal, cut/copy/paste uses Ctrl key.
      This is correct behavior b/c it's a cross-platform look AND FEEL.
    - added itext.jar to the InstallAnywhere installers
    - deployed to the world on 24 Mar 2004

    ### 1.21 ###
    - edited KinTree.onDelete() and DrawingTool.getDrawingGroup/Subgroup/List()
      to ensure that it's safe to delete drawing groups and then keep drawing!
    - added "clean-all" Ant target to clean all .class files out at once
    - it's now possible to not idealize CBs when using Hinge, but only for the ends
    - tokenizer now tolerates spaces before equals, so "color = red" is now OK (but discouraged)
    - added Jane's explanatory material on colors to my palette kinemage
    - JPEG exports are now done at highest available quality setting
    - fixed bug in driftwood.moldb2.Model.clone() that was breaking sidechain mutation tool
    - modified KPalette.widthScale to make multi-width depth-cueing for lines more like Mage's
    - made groups, subgroups, lists, and point cloneable
    - added Copy to the hierarchy editor
    - added support for the clone= {x} property of groups, subgroups, and lists
    - implemented instance= {x} to be the same as clone=, even though it's supposed to be lightweight
    - documented the new Copy feature / fixed old refs to it not existing
    - documented image export facility
    - deployed to Rlab on 3 Mar 2004

    ### 1.20 ###
    - added Drag-n-Drop kinemage opening on the main graphics window, doc'd it
    - started king.tool.draw.DrawingTool for Bob Bateman
    - fixed stupid NullPointerException that was introduced in "New King Window"
      between 1.13 and now, probably in reorganization of KingMain for applet modes.
    - fixed Trp rotamer typo in chiropraxis
    - added line segments to drawing tool
    - added undo function to drawing tool
    - added labels, balls to drawing tool
    - added prune to drawing tool
    - made KPoints cloneable to try getting around my Prune problem
    - made Prune undoable by storing more info in the UndoStep objects
    - added punch to drawing tool
    - made the undo cache memory sensitive for the drawing tool
    - added line shortening for line segments
    - added dots and dotted lines to drawing tool
    - added multiple subgroups to the drawing tool
    - added triangles to the drawing tool
    - added auger to drawing tool
    - added spherical cropping to drawing tool
    - added documentation for drawing tool
    - added "collapsable" and "collapsible" as synonyms for "recessiveon"
    - deployed to the world 1 Mar 2004

    ### 1.19 ###
    - repaired ED classes to deal with new MarchingCubes code in driftwood
    - tested the visual effect of transparent ED (alpha= 0.25)
    - translucent mesh is now an option in ED viewer
    - ModelManager now tries to guess NOE file format based on extension
    - confirmed: cmd line parser handles empty elements ('') correctly
    - now NoePanel also has a selection dropbox; and both include "all" as a choice
    - fixed a ribbon lighting bug in KPaint where an array was accidentally overwritten
    - fixed a logical bug in ribbon lighting + depth-cueing on a white background
    - finally allowed for masters to have the 'indent' flag
    - converted measures to look more like Mage
    - KiNG was failing to write @colorset when it came from a merged file
    - updated copyright dates in About | Help
    - changed default build target to "dist"
    - documented the need for gnu.regexp and org.jibble.epsgraphics
    - fixed src ZIP creation so those packages end up in the right path (lib/...)
    - Trp rotamers: m110 chi2 doesn't change; W179 in cabenol? False alarm (works for me)
    - added "viol" to NOE dropboxes
    - updated manual to include JNB's 90* stereo offset trick for orthogonal views
    - distributed to the world on 26 Feb 2004

    ### 1.18 ###
    - reworked KPaint to store fewer objects and calculate all lighting-shaded,
      semi-transparent Colors on-the-fly (only used by TrianglePoint right now).
      This causes a minimal performance hit, as far as I can tell.
    - added the 'alpha' (transparency) property to all KLists.
    - TrianglePoints now use their parent KList's alpha when painting.
    - KinfileParser and KinWriter now recognize 'alpha= #.#' in lists (0.0 to 1.0)
    - using BEST rendering qualilty produces zig-zags on semi-transparent ribbons;
      width 0 pen gives gaps, and width 0.5 or 1.0 gives overlaps (zig-zags).
    - modified ImageExport so PNGs would reflect any transparency in the ribbons
    - deployed to cluster 11 Feb 2004

    ### 1.17 ###
    - changed several classes to use driftwood.data.UberMap/Set
      instead of driftwood.gnutil.GnuLinkedHashMap/Set
    - expected NOE radius now limited to [1.0, 20.0] and defaults to 4.5
    - fixed bug in chiropraxis.* that kept a residue mutated to MSE from being rotated
    - Connected the "more options" box in NoePanel to the cmd line
    - added config file switches to control extra debug output from background jobs
    - added -a (ambiguous) checkbox to NoePanel
    - added user mod records for residues that have been moved
    - MSE would not rotate properly due to a bug in chiropraxis.sc.SidechainAngles2
    - tool.model.ModelPlotter now gives atoms names in Prekin format
    - expected NOEs is now available for all models, whether or not you have data loaded
    - replaced {1}, {2}, etc. with {pdbfile}, {molten}, {center}, etc.
    - updated documentation to reflect new placeholders
    - distributed to Rlab on 6 Feb 2004

    ### 1.16 ###
    - changed NoePanel to reside in a collapsing area of the ModelManager
    - text boxes in NoePanel no longer need ENTER to update
    - ModelState is now cleaned up after a mutation is made, to avoid crashes
    - added display of expected NOEs to the ModelManager
    - updated docs to reflect Vincent's RNA tool
    - fixed bug in moldb2.Model.restoreOrder() that caused new residues to appear
      at the end of the output PDB file.
    - mutations that are made now create a USER MOD record.
      This IS NOT rolled back by Undo, but seems to be good enough for now.
    - added GUI support for Aria NOE format (*.list files)
    - added a symbol for kinemage center to NOEs/dots: {3}
    - documented the symbols for NOE, Probe in the manual
    - moved EDMapPlugin.FatJList to driftwood.gui
    - Probe cmd line is now part of the dialog, instead of a menu item
      In the future, we could make this more elaborate
    - something weird is happening with ED map radius for 3AL1: not true
      This is just a weird-shaped molecule, which produces unexpected illusions
    - deployed to the world on 2 Feb 2004

    ### 1.15 ###
    - imported king.tool.RNA* -- Vincent Chen's ED peak picker.
      Remaining issues: only parses ED visible when FIRST pick takes place
        doesn't know which lists are ED and which are e.g. molecule
    - created a package hierarchy under king.tool to contain growing number of tools.
    - ported most of the code in Kinglet over to KingMain. This facilitates
      having a dual purpose (logo/launcher) Kinglet, and would allow us to
      use reflection in the future (to defer class loading and speed up start-up).
    - updated king logo to reflect (C) 2004
    - changed Kinglet to optionally act as a launcher button
    - LSQ docking resets to Reference radio btn after doing dock
    - LSQ docking erases markers when "Clear" is pressed
    - Kinglet now offers three modes: normal, launcher, and flat (embedded in page)
    - create MainWindow earlier on in KingMain.Main(), b/c ModelManager dlg depends on it
      This was causing the MM dlg to disappear when a file picker was invoked. Weird.
    - documented new applet modes
    - documented measure of deviation from Karplus' expected tau
    - updated HTML and PDF versions of the manual
    - really long pointIDs are now bumped up one line to not cover up measurements
    - improved algorithm for deciding if mouse drag is primarily verical or horizontal
    - removing minimum, preferred size of KinCanvas for embedded applet make layout behave

    ### 1.14 ###
    - made changes to ModelManager2, ModelPlotter, and HingeTool
      to re-establish compatibility with driftwood.moldb2 changes in ver. 0.48
    - HingeTool now displays tau deviation from f,y average (Karplus data)
    - added sidechain mutation tool (doesn't do anything, yet)
    - ModelPlotter now understands MSEs, too
    - ModelManager2.replaceModelAndState() is now undoable
    - refactored sidechain mutation code into chiropraxis.sc.SidechainIdealizer
    - can now select a protonation state for histidine when making mutations
    - deployed to Rlab on 13 Jan 2004

    ### 1.13 ###
    - added cross-window picking for things with identical point IDs
    - deployed to Rlab

    ### 1.12 ###
    - can now animate through aspects with [, ]
    - fixed Edit Props bug where middle click did both point and list
    - lathe tool now offers to act only on lists that are currently displayed
    - added auto-version check via kinemage.biochem.duke.edu; displayed on splash screen
    - added public version update to the deploy-world task
    - documented non-std config file URL (name=king_prefs)
    - documented tools: LSQ docking, changes to edit props, move points, sidechain, viewpoints
    - now do version check in background thread; ignore it if it takes more than 2 sec.
    - extended ViewpointPlugin to include "virtual calipers" per Bob I.'s request
    - tested and verified the non-std config for Kinglet; it works
    - made version check user configurable; supressed stack trace on failure
    - deployed to the world on 20 Nov 2003

    ### 1.11 ###
    - moved king_prefs out of config/ subdirectory
    - added option to make color swatches larger (accessibility for Jeremy)
    - made picking radius user-configurable (accessibility for Jeremy, kids)
    - lathe now picks up point colors
    - updated lathe to avoid problems with second point on axis of rotation
    - fixed KinWriter so it actually writes {"} when point IDs are repeated
    - built in (and then commented out) a half-bonds coloring mode
      There are additional clipping problems to be worked out, and
      it really adds unneccessary complexity to a kinemage viewer.
    - incorporated chiropraxis and EpsGraphics2D into the src code bundle
    - made a Mac application bundle that's updated with new jars on every deploy-local
    - enabled custom preferences for kinglets with <PARAM name="king_prefs" value="http://...">
    - added support for Drag & Drop in the Mac application bundle
    - fixed picking of labels, which was broken when configurable picking radius was added
    - moving points has been split off from Edit properties, which now does point/list editing.
    - can now move point in Z with mouse wheel or up/down arrow keys
    - default mode for move points tool moves ALL kinemage points very near the picked point.
      This resuls in much more intuitive behavior for those unfamiliar with kinemage format.
    - deployed to Rlab 7 Nov 2003

    ### 1.10 ###
    - fixed perspective cues on balls
    - added thickness cues to balls (exagerated, like for vectors)
    - revisited line thickness cueing math to match true perspective more
    - working with kinemages from Dezymer has revealed (at least) two issues:
          Parser is case sensitive: won't recognize @vectorList
          Parser: @balllist {points} color = cyan radius = 0.05
          (no space allowed before =)     ^             ^
      These are delibrate "features" of the parser and jive with
      the formal kinemage syntax document.
      I wrote an AWK script to correct these problems in the Dezymer kins.
    - added try/catch to searching b/c Find Next would complain if kin had been edited.
    - replaced iterator() with an array in search; should speed up searching.
    - if Find Next fails, we now re-open the search dialog box.
    - fixed that longstanding "view creep" bug
      Error was using "(int)(x+0.5)" instead of Math.round()
    - added Edit | Kinemage options...; links to dialog from hierarchy view
    - ESC now closes the Find dialog box. Code was as follows:
        closeAction.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0));
        closeAction.bindWindow(btnClose);
      We should add this to other dialogs as appropriate.
    - using new EpsGraphics2D libraries, I could eliminate my custom subclass.
    - fixed automatic file naming in ImageExport (Java bug; submit failed)
    - PointEditor was introducing empty aspects into edited points
    - added the +/- 90 degree rotations as ViewpointPlugin (make these menu driven?)
    - added least-squares docking tool
    - did some cleanup in driftwood and chiropraxis (removed original moldb)
    - deployed to the world 4 Nov 2003

    ### 1.09 ###
    - KiNG now defaults to "better" graphics if we're running OS X.
      This saves the user from having to enable antialiasing, but
      it doesn't make the dials and other custom components any prettier.
    - mention Mac-specific switches in the new README.
    - added color-by and calculation options to NoePanel
    - removed setDominant(true) from BgKinRunner -- it was good for Probe but not noe-display
    - fixed bug in chiropraxis resources that broke Met rotamers ttt and mmt
    - improved handling of seg IDs in driftwood.moldb2.PdbReader
    - rewrote ModelManager save function to include all headers, etc.
      This is fairly serious and could have broken model saving for some cases.
      Needs thorough testing before Cold Spring Harbor.
    - also set the default state to ignore seg IDs for identifying residues
    - deployed to world

    ### 1.08 ###
    - re-implemented VectorPoint.drawFast() to use KPoint.fastLine()
    - I can't find anything in OS X that will really draw a thin single line --
      horizontals and verticals are OK, but other things are too thick!
      Polygons with width reduced by 1 works for 2px lines but not 1px.
      Documented as a known problem for drawLine Radar #3308134
    - parser no longer treats size= # as an unrecognized token
    - apple.awt.antialiasing=on cannot be set from within the program
    - Hierarchy | Transform | Scale now also adjusts ball radii at list level
    - unclear why redraw after second pt pick in Ca Hinges sometimes fails on Mac
    - refactored KinCanvas.paint() to take a quality setting
    - image export now always uses the best quality setting for output
    - used java.awt.Toolkit to get platform specific menu accel key (Cmd on Mac)
    - fixed bug: Canceling File | Append results in an empty kinemage...
    - added EPS export using the www.jibble.org EPS Graphics2D class.
    - added read/preserve/write support for the 'ghost' attribute of points.
      We don't use this, but Mage does...
    - added read/preserve/write support for the 'lens' attribute of lists and (sub)groups.
      We don't use this, but Mage does...
      Also added support for @lens. Again, we don't use it in drawing, but we preserve it.
    - made tool close btn == select default tool (Navigate)
    - made NoePanel a tab in the Model Manager
    - turn off dots and NOEs groups when functions are deactivated
    - deployed to Rlab

    ### 1.07 ###
    - Sidechain rotations now idealize the sc first. This has to be undone
      as a separate step from the rotations, but oh well.
    - removed Backrub tool from the ToolBox and put it's files in old/
    - tried to fix command quoting issues for Probe, Noe-display on
      Windows/Mac/Linux. It's not easy to find something everyone likes...
    - Never mind! My parser discards all quotes anyhow... Singles are fine.
    - made Noe interface a little nicer, with selection for rescaling
    - weirdness for initial rendering of ED maps appears to be related to
      the view and clipping. Other view bugs also exist...
      pick/(identify, measure) cause map to resize correctly
      mark only has effect when markers are on
      All that's necessary is to call kCanvas.repaint(), actually.
      And in fact, that's the fix: call kCanvas.repaint() after loading each map.
      The problem appears to be that Java requests a partial redraw -- the area
      under the dialog box. KiNG wants to redraw everything with the new map,
      but apparently bounds are set such that only the smaller area is updated.
      Another call to repaint() ensures the whole screen is redrawn and the full
      extent of the map is visible right away. This makes the UI more polished.
    - added documentation for some tools and plugins.
    - fixed a bug in help system caused by package reorganization.
    - Allow groups/lists to span multiple lines or not?
      No. Looking for first number as start of points will fail on the syntax for
      bond rotations, which follows a "bondrot" word with unprotected numbers.
    - moved sc idealization step into the rotations. Not too slow.
    - added image export for PNG, JPEG
    - deployed to Rlab

    ### 1.06 ###
    - created the SolidObjPlugin to do lathes, etc.
    - Probe, NOEs: quotes around exe name and tmp file name to quote spaces for Windows
    - changed '-f rcsb' to '-f' for noe-display
    - restored rotamer evaluation for sidechain manip.
    - allow higher contour levels for ED (~30 sigma) for anomalous diff. maps
      A better fix would be to sync with the min/max for that map...
    - swapped in Bryan's new, better icon (gold on black)
    - [MM2:143:setCurrentDirectory()] causes exception *only* when Brian runs
      KiNG remotely using ssh -X from his Windows box. Works everywhere else.
      For the moment, this bug has to be classified as not reproducible.

    ### 1.05 ###
    - moved data structures, reader, writer, and Engine into king.core
    - king.core is entirely independent of the rest of the code and could
      thus be used in other projects that need to read and write kinemages.
    - fixed bug in KinfileParser that didn't recognize @#aspect tags
    - fixed another bug (copy-paste mistake) that discarded too many tokens
    - moved most tools into king.tool; all other code is independent of
      the king.tool package, so these can change more easily or be left out.
    - new KiNG package hierarchy:
      + driftwood.**    Things I anticipate are recyclable: widgets, helpers, etc.
      + king.*          All GUI elements, user interaction, essential tools, etc.
      + king.core.*     Data structures, reader/writer, rendering code
      + king.tool.*     Tools loaded by reflection that are non-essential
    - refactored Remodeler out of ModelingTool
    - moved SidechainTwister to SidechainRotator; made ScRotTool.
      These allow sidechains to be modified under the new model manager regime.
    - "original" is now a rotamer choice for refitting sidechains
    - deployed to Rlab

    ### 1.04 ###
    - increased depth-cueing from 5 levels to 16 (!). Much nicer pictures.
      Can change # by editing COLOR_LEVELS in KPaint, then [clean] then [build].
    - deployed to Rlab

    ### 1.03 ###
    - started work on ModelManager2, which will allow multiple tools at once,
      multiple visualizations, and the ability to undo changes to the model.
    - added abstract class ModelingTool, which is the parent of the new HingeTool
    - added a C-alpha trace to ModelPlotter
    - added Undo to ModelManager
    - introduced editing of Probe command line
    - allowed user to choose model#, alt conf at load time from ModelManager
    - bug fix: Cairo end marker goes on kinemage C-alpha, not modified C-alpha
    - apparent divergence of color in ribbon lists is due to depth cueing
    - removed old ModelPlotter, CairoTool, ModelManager, etc
    - added NOE control panel; need Coggins' help to get correct cmd line

    ### 1.02 ###
    - accounted for merger of driftwood.string into driftwood.util
    - error messages are now piped through driftwood.util.SoftLog.err
    - stack traces are now piped through driftwood.util.SoftLog.err
    - slightly increased number of visible kins to 4
    - printing DOES use highest quality drawing. Maybe Bryan had an old version.
    - added error log viewer under Help.
      This should help novice/GUI users to diagnose problems.
    - fixed a subtle bug in Kinemage.appendKinemage() where masters that are
      ONLY pointmasters were lost in any kinemage that got appended to an open one.
    - mergers with pointmasters can still cause problems if there's overlap in bits used.
    - line shortening was slow in some cases with lots of balls, not because of
      object creation for the HashMap(KPoint, Double) but because the KPoint.hashCode()
      function was causing many collisions when coordinates were (smallish) integers.
    - added link to manual in auto-installer packages

    ### 1.01 ###
    - fixed copyright date in license to be 02-03, not 00-03
    - Kinemage:90: replaced getStandardMap() with getFullMap()
      This should fix problems with interpretting e.g. 'skyblue'
      and 'default' as legal colors.
    - changed build.xml so that deploy-local doesn't change MolProbity
    - fixed bug in KinfileParser that would create an extra point at 0,0,0
      if the end of a list was followed by one or more kinemage comments.
    - fixed error reporting to give line numbers from 1 instead of 0
    - KList: changed default ball radius to 0.2 (seems like Mage)

    ### 1.00 ###
    - updated all version numbers to 1.00 in the documents.
    - fixed minor layout bug that could affect sliders in EDWindow
    - deployed to World on 15 Aug 2003

    ### 0.99 ###
    - this is release candidate 2
    - fixed bug in chiropraxis where only the last peptide twist was being kept
    - moved MagnifiedTheme to driftwood.gui
    - fixed problem with moldb2's handling of seg IDs that broke on certain Reduce'd PDBs
    - added KingPrefs.jarFileDirectory, which is used to locate the Probe exe.
    - updated ProbePlotter and BackrubTool to use probe or probe.exe as found,
      or if nothing is found then assume probe is on the path.
    - cannot set -Xmx switch in InstallAnywhere binaries (apparently)

    ### 0.98 ###
    - preparing for 1.00 release (this is release candidate 1)
    - deployed to Rlab

    ### 0.58 ###
    - started Dock3On3Tool to test my 3-point docking, which will feed into sc mutations.
    - verified that the Probe commands do use -drop correctly
    - put scollpane around large groups of peptide-twist dials in CairoTool/PeptideTwister
    - ED map tool now supports CCP4 maps too

    ### 0.57 ###
    - updated manual format (one huge page)
    - changed Tools and Plugins to link to anchors within the main help file
      Now all documentation appears in the PDF too (except licenses and kbd bindings).
    - removed 2 unused classes (EmphasisTool, PositionReader)
    - replaced Rotation with driftwood.r3.Transform
    - help menus have been tested; they all still work
    - distributed to the World

    ### 0.56 ###
    - Backrub does better with stuff now, but not double modifications...
    - Backrub should now handle even double modifications with dots
    - fixed bug in ProbePlotter where group was not properly inserted (?)
    - masters now have correct, off-is-dominant behavior
    - Emphasize tool has been deprecated and removed from menus
    - ModelManager and ProbePlotter were updated so that a temporary PDB file
      from MM reflects previous changes to the model.
    - peptide twisting now is available by hand
    - found and fixed bug in r3.Triple that caused sc to disappear sometimes
    - added cut/copy/paste popup menu for text editing window (thanks to R. Bateman)
    - made peptide twisting an optional part of Hinge

    ### 0.55 ###
    - patched a bug in KPoint.getColor() that returned 255 to mean invisible
    - documented CairoTool and removed 10-residue limit
    - measures now turns on/off markers, too, and clears list of marks
    - wrote KPaint and KPalette to pave the way for a new colors architecture
    - added installer/king_Build_Output to [clean] target
    - finished with new color model; now to test it
    - seems to work just fine (needs to be tested with @colorset's)
    - created a graphical color picker for use in list and point editors
    - redesigned the list editing box to accomodate the color picker
    - gave ModelManager the ability to write out entire PDB files
    - made ColorPicker support the colors in Kinemage.getNewPaintMap()
    - clicking empty part of color picker now deselects all colors
    - double click on hierarchy tree now does Edit Properties instead of expand/collapse
    - actually, in addition to. I'm not sure how to disable expand/collapse.
    - color picker now works with point editor too
    - fixed bug where ribbonlists were read as trianglelists
    - normals are still not quite right but I can't figure out why
    - deployed to Rlab

    ### 0.54 ###
    - created ProbePlotter, which does Remote Update-style dots in a
      worker thread in the background. This ensures that the interactive portion
      remains responsive. It gives a MUCH nicer UI experience.
      Should retrofit Backrub.
    - Backrub refit to use GnuLinkedHashMap/Set for 1.3 compat.
    - Everything should now be entirely 1.3 safe!!
    - Hah! Found a 1.4 JComponent function called on a Box in AGE
    - deployed to World

    ### 0.53 ###
    - copied BackrubPlotter to ModelPlotter and simplified it to work with moldb2
    - modified ModelManager to use MolDB2
    - modified CairoTool to use MolDB2 (primitive version now works!)
    - started work on export to VRML (dots, spheres, manual color)
    - set ModelManager to select @pdbfile automatically
    - other improvements to ModelManager UI
    - started building UI for CairoTool to make it nicer
    - made ModelPlotter turn on/off H's and use std masters
    - made monochrome mode MUCH more sophisticated, with colors
      now distinct and based on POV-Ray grayscale algorithm.
    - added tau dev and Rama analysis to CairoTool
    - model manager can write basic PDB file of changed residues
    - CairoTool is fairly useful now; needs dots

    ### 0.52 ###
    - added clear() to KList
    - reworked BackrubPlotter to draw into a fixed set of lists
    - reworked BackrubTool to place those lists directly into the kinemage
    - added 'not water' option to Backrub's Probe dots command
    - deployed to Rlab

    ### 0.51 ###
    - started on CairoTool to allow Ca-Ca rotations (hinges)
    - moved AngleDial to driftwood.gui; gave it an upgrade
    - removed minimize-on-middle-click "feature" of Backrub
    - fixed dial layout issue (SidechainTwister needed to be stretched)
    - removed a LinkedHashMap from UIDisplayMenu (caused JVM 1.3 to crash)
    - moved Configure from File menu to Edit menu (also noted in manual)
    - deployed to Rlab

    ### 0.50 ###
    - added "Go To" button to view editor for Jane
    - fixed bug in high-qual sphere renderer that misplaced highlights
    - started on a model manager plugin that will be the basis of
      C-alpha hinges (working name: Cairo) and sidechain twists
    - model manager is finished (at least the first draft!)
    - Edit Properties tool now allows click-drag relocation of points
      Should be especially useful for labels!
    - fixed logic bug in label-picking code (y-axis sign issue)
    - fixed KinfileTokenizer.advanceToKeyword() so it reports EOF correctly
    - combined with limit to number of errors reported in parser, this
      should make I/O more robust to being fed absolute crap :)
    - changed Backrub rotamer selection to only alter chi angles
    - allow lysine tips to rotate
    - deployed to cluster

    ### 0.49 ###
    - fixed picking bug for 'P' points in a polyline
    - moved all Display menu choices into their own class
    - allowed selection of 4 levels of rendering quality from Display menu
    - can show frame rate in terminal using preferences file
    - allowed SidechainTwister to set new rotamer without multiple Probe runs
    - allowed EDMapPlugin to load maps over the web using applet parameters

    ### 0.48 ###
    - added ".mbk" as an O map file extension (the default from CCP4)
    - added display of rotamer quality to Backrub
    - added tooltips to Backrub's info readouts
    - deployed to world for Mid-Atlantic Cryst. conference

    ### 0.47 ###
    - enabled display of rotamer frequency by using chiropraxis.sc.RotamerDef
    - may have decreased number of Probe deadlocks by creating all input ahead of time
      and buffering all output before interpretting it.
    - if not, driftwood.util.ProcessTank has a timeout counter that should be able
      to kill rogue Probe runs that never produce any output.
    - eliminated allocation of new Shape objects during high-quality rendering
    - changed AngleDial to use Java2D function calls for painting (draw(Shape), etc)
      This has no effect on the appearance under Mac OS X -- their AWT drawing
      functions are genuinely broken...
    - runaway Probe catcher does actually work -- this is a real boon
    - deployed to Rlab

    ### 0.46 ###
    - created IndentBox and FoldingBox in driftwood.gui to enable recessiveon behavior
    - can read, write the 'recessiveon' property
    - can edit the 'recessiveon' property from within KiNG
    - added SidechainTwister to enable mobile sidechains, esp. for Backrub
    - fixed drawing of 3HG2 in ILE
    - added controls for moving sidechain of central residue to Backrub
    - added (duplicate) Help menu to Backrub's palette
    - added list box for choosing rotamers (now just have to type them all in!)
    - chiropraxis.sc now knows all rotamers (still can't assess quality)
    - distributed to Rlab

    ### 0.45 ###
    - started work on AngleDial, which will be used in future versions of Backrub
    - replaced sliders in BackrubTool with AngleDials
    - changed Backrub to minimize on RMS tau deviation
    - added code to drain input and error streams from Probe job;
      hopefully, this totally avoids all lockups and hangs
    - fixed AngleDial layout bug
    - moved Backrub's buttons into menus
    - added nice visual cues to AngleDial to show which one's active
    - background kinemage loader now catches all Throwables.
      This should ensure the thread can exit (ab)normally, hide the dialog box,
      and return control to the user after a wacky file crashes my parser.
      This should also deal with an OutOfMemory condition...
    - hierarchy tree now responds to keyboard shortcuts other than alt-(letter)
    - added to Backrub documentation
    - deployed to Rlab

    ### 0.44 ###
    - the previous version crashed pretty regularly, though arbitrarily, when
      using Probe dots. The cause seemed to be that sometimes the stderr buffer
      (4096 bytes) would fill up with the progress messages about what was being
      processed. This would cause Probe to block on I/O, and would hang the program
      once KiNGs kinemage loader blocked on Probe's stdout...
    - the solution: use -quiet in the Probe command line!
    - deployed to Rlab

    ### 0.43 ###
    - removed extraneous view functions from Kinemage
    - created a function that appends one kinemage to another
    - fixed Append bug: can't initialize an empty kinemage or else you get a nonsense view
    - set up the new File | Save system, with auto-versioning and command line awareness
    - enabled support for @listcolordominant
    - cleaned up marker point handling so we can use them in @marklists
    - modified TrianglePoint.paintHighQuality to try to eliminate lines...
    - fixed a bug in PrefsEditor (Boolean.toString()) that broke Java 1.3
    - updated BackrubPlotter to handle moldb.AminoAcids and their sidechains
    - Backrub now carries static sidechains along for the ride when backbone is moved
    - fixed BasicTool so user can't close tool dialog manually
    - added Probe dots to Backrub
    - deployed to Rlab

    ### 0.42 ###
    - started KinfileParser to do cleaner interprettation of kinemage files
    - set up functions for reading the primary data: hierarchy + points
    - new parser needs too much memory to do its job (>100Mb)
    - fixed part of the problem: StringBuffers were wasting space
    - fixed the other part: point IDs of {"} were not being handled correctly
    - added @title and @command to KinWriter
    - added ability to write @colorsets from KinWriter
    - finished adding support for all core features to KinfileReader
    - implemented reading and writing of @aspect entries
    - after much hassle, got the background file loading system up and running

    ### 0.41 ###
    - stoped EDMapPlugin from being loaded when KiNG runs as a applet
    - relabeled properties in the Edit Group/Subgroup/List boxes
    - added cut, paste, new icons to KingPrefs
    - merged HierarchyWindow into KinTree
    - created popup menu for the KinTree
    - moved ReflectiveAction to driftwood.gui
    - added tooltips and mnemonics to hierarchy window
    - documented "xmap" and "omap" applet params
    - wrote a new tokenizer (KinfileTokenizer) based on the explicit
      kinemage file format v1.0 document I'm developing.
    - changed central angle to steps of 0.2 deg in BackrubTool
    - fixed a minor bug in KinTree.onDelete handling of kinemages
    - deployed to world

    ### 0.40 ###
    - changed kinemage picker into a JList instead of a JComboBox
    - renamed Explore menu to Edit
    - moved mouse options from Edit to Tools
    - removed tree view from main window; removed Modify menu
    - made the Modify tree and menu into a floating "Hierarchy window"
    - updated user manual
    - deployed to Rlab

    ### 0.39 ###
    - made KiNG recognize @marklist, @ringlist, @fanlist
    - rings and fans won't look right until we handle marker styles better
    - introduced the Plugin abstract class
    - added Tools menu to the menu bar to contain Tools and Plugins
    - transformed EDMapTool into EDMapPlugin
    - added Tools and Help items for EDMapPlugin
    - added a PARAM tag to Kinglet ("xmap" or "omap") that allows Applets
      to load (from a URL) and display electron density.
    - relocated tools to the Tools menu and removed the ToolBox dialog

    ### 0.38 ###
    - fixed perspective
    - fixed ball-triggered line shortening (but it needs more!)
    - restored Tools to working order (they now use TransformSignals too)
    - added more colors to the ColorManager so we can shade ribbons better
    - updated drawing code in TrianglePoint to use new lighting model
    - changed Backrub mouse interface to use middle button for selecting a C-alpha
    - changed to using a HashMap in Engine to do shortening of lines by balls.
      This is much more robust, though somewhat slower for lots of balls.
    - updated Backrub to display all taus, phis, and psis, all of the time
    - added *.ki{n,p,p1,p2,p3,...} file mask to File | Open and File | Save as
    - deployed to Rlab

    ### 0.37 ###
    - introduced TransformSignal and TransformSignalSubscriber
    - introduced PaintRegion and Paintable...
    - then decided to remove them again. However, render system will still be
      updated to use TransformSignals and to occur in one pass.
    - heavy modification to Engine, all of the KPoint subclasses
    - updated transform and drawing in DotPoint, BallPoint, LabelPoint,
      MarkerPoint, TrianglePoint, VectorPoint
    - fixed stereo and printing

    ### 0.36 ###
    - added explicit setSelectedDirectory() to Backrub.onOpenPDB()
    - removed useless interface chiropraxis.backrub.BackbonePlotter
    - improved rendering of multiple backbone modifications
    - added buttons to Backrub to keep and discard current changes

    ### 0.35 ###
    - all Tools are now created using the Reflection API,
      so they can reside in external JARs
    - added support for @pdbfile in Reader, Writer, Kinemage, and BackrubTool
    - distributed to Rlab

    ### 0.34 ###
    - BackrubTool now uses Ramachandran criteria too...
    - enabled mouse wheel for moving peptides
    - various changes to library classes to improve optimization speed
    - even so, I had to settle for two choices -- local and full optimization
    - in-memory molecular model updated when done with each residue (choice)

    ### 0.33 ###
    - cleared markers when changing kinemages
    - ED Map tool now tries to open a map as soon as it's selected
    - made slight change to initial position of ToolBox to prevent it from
      appearing off-screen if the main window is maximized.
      This only seems to be a possibility under Windows, not Linux
    - renamed KingEdgePlotter to EDMapPlotter
    - created BackrubTool and BackrubPlotter

    ### 0.32 ###
    - fixed fencepost bug in driftwood.isosurface that was causing ArrayIndexOOBEx
    - fixed RecursivePointIterator.nextImpl() to skip over points/lists/groups that
      are turned off, or in the case of points, unpickable
    - fixed bug that wrote version and buildnum to ~/.king_prefs
    - changed README, LICENSE, and BUILDME to HTML
      This avoid translation among LF, CR, and CRLF line endings and provides a
      "friendlier" user experience.
    - updated manual (PDF and HTML)
    - updated main logo to reflect URL, (C) 2003, bigger (400x400)
    - modification to whole words to make word break more stringent
      break is now on space, comma, semi-colon, or colon ONLY
    - Find Next now checks to make sure the points it finds are totally visible
    - migrated this file (CHANGELOG) to HTML format

    ### 0.31 ###
    - improved map file selection process with better filters
    - migrated to building with Apache Ant (ant.apache.org)
    - initial window size now depends on screen resolution
    - added "Smooth graphics" (anti-aliasing) as a graphics option
    - fixed a bug where exported map lists didn't know their owners
    - made ReflectiveAction report source of InvocationTargetException rather than ITEx itself
    - commented out an error message from KinParser (displayed when it hits 2animate, etc)
    - FIRST PUBLIC DISTRIBUTION!!!

    ### 0.30 ###
    - moved TablePane to driftwood.gui and fixed multi-row problems with it
    - created File | Export menu and moved XML to it
    - registered up/down arrow keys as equivalent to mouse wheel
    - all mouse drags can now make vertical/horizontal distinction like zoom/clip
    - restored HighlighterTool (now named EmphasisTool)
    - started work on ED Map tool
    - wrote KingEdgePlotter to create isosurfaces directly from MeshMarchingCubes
    - wrote EDMapWindow to display each loaded map
    - completed EDMapTool
    - bugfix: Engine reported out-of-bounds pick on empty window

    ### 0.29 ###
    - massive refactoring of tool archtecture that should result in much
      cleaner behavior by tools.
    - at the moment, only basic tool is available
      (no highlighter or contact map tool)
    - text window open at startup is now a preference
    - using Explore | Find point is now just like picking the point
    - changed Marker rendering and choose new markers for measures
    - added HTML help for each tool
    - now using radio buttons for tool selection in Toolbox
    - bundled gnu.regexp into king.jar -- eliminated dependence on lib/*
    - flatland is now a kinemage property
    - toolbox opens at startup by default (configurable)
    - rotate/scale now done either around object centroid or (0,0,0)
    - writing points now writes {"} when appropriate
    - added Edit Props tool and "unpickable" in point editor
    - added falling bear to internal kinemages

    ### 0.28 ###
    - started working on parser: 26.5 sec
    - using my own char buffer instead of StringBuffer: 25.4 sec
    - using my parseDouble instead of Double.parseDouble: 27.4 sec (!)
    - creating Strings takes about 40% of the total time,
      parsing doubles takes about 30% of the total time.
    - numeric tokens (doubles) are about 60% of all tokens
    - therefore, there's a potential for parsing in about half the time
      Mage loads this file in less than 15 sec
    - my rewritten parser for better doubles: 79 sec (!)
      how am I making this so much worse?
    - some logic errors caused lots of exceptions being raised
      now time is down to 19.6 sec
    - found one leak in UIMenus.rebuildAnimationsMenu()
    - found another in KinReader.install() (kinList was preserved!)
    - found another in JComboBox.removeAllItems() (reported to Sun)
    - replaced two pane text edit window with the simpler, text-only version
    - merge (-m) is default command line behavior when two or more files are specified
    - can use (-s, -single) to open kinemages individually
    - fixed a bug in KinReader I introduced when hunting memory leaks;
      it caused open-merge to fail on the second kinemage
    - updated documentation to reflect changes in 0.28

    ### 0.27 ###
    - enabled File | Configure for applet
    - updated documentation (minimal coverage of new features)
    - fixed fwd-back-fwd-back bug in HTML help
    - added HSV color cone to list of internal kinemages
    - changed mnemonic for Modify menu from T (Tree) to M
    - made some changes to KinParser to eliminate some NumberFormatExceptions
    - added auto-detection and decompression of gzipped kinemage files

    ### 0.26 ###
    - added ability to edit points; splits lists at a point;
      and edit the list, subgroup, and group a point belongs to.
    - added ability to merge lists (simpleminded)
    - made delete Kinemage have same effect as File | Close current
    - added stereo, including menu options and config option
    - added ability to transform groups, subgroups, lists, etc.
      Operations are rotate, translate, and scale.
    - fixed minor bug in saving views: matrix would sometimes write sci. not.
    - created TablePane and used it to re-write the layout of PointEditor
    - kinemage-specified display properties are now always set,
      except for cueThickness, which defaults to false for all kinemages in KiNG.
    - changed Find functionality to operate like Mage, with Find/Find next

    ### 0.25 ###
    - this version is for stabilization before release...
    - changed big markers key to W (Jane)
    - changed green and lime color defs slightly
    - updated palette kinemage
    - put gray background behind explore/modify tabs
    - changed pinwheel hotzone to top 1/6 of screen;
      (unused) zone at bottom is also now 1/6 of screen.
    - fixed bug in whitebg color creation (bad coefficients)
    - adjusted colors extensively, esp. on white background
    - removed configuration of some things (buttons, etc)
    - text window no longer jumps to center, unless it's been closed
    - font magnification is a bitch to set after we've created a GUI
    - created GUI for changing preferences and saving them
    - made "Big markers" and "Big labels" separate controls
    - markers can't depth-cue b/c they use multiple colors as it is
    - added HTML documentation of keyboard shortcuts

    ### 0.24 ###
    - improved handling of animate/2animate while still maintaining the
      general purpose facility for animations. Groups were also labeled
      with * and/or % as appropriate.
    - rearranged layout of controls, added tooltips to a few
    - changed Move & Measure right mouse button to always
      zoom AND slab, but only one or the other per click-n-drag session.
    - removed label box; all drawing is now done directly on graphics area.
    - added implementation of aspects
    - did minor updates for user guide
    - added dialog to edit views (rename, delete, reorder)
    - upgraded KingPrefs to be descended from Props
    - added a tip of the day to the controls panel (optional)
    - added Auto-animate feature (configurable timing)
    - added font-size preferences
    - added Home and Back buttons to the Help browser
    - added Auto-rock to Display menu (variable timing, in .king_prefs)
    - made text window open automagically by default (configurable)
    - made GridBagPanel easier to use (?)
    - added ability to edit list width and radius
    - added hooks for arrow keys and mouse wheel into tool archetecture
    - changed references to XknWriter to be reflective, so XML libraries
      won't be loaded across the network for applets.

    ### 0.23 ###
    - finally solved the JTree Ctrl-X, Ctrl-V mystery -- those keys
      were bound in a parent map of the JTree InputMap.
    - added "merge (sub)groups" behavior to paste command
    - masters are now properties of groups, subgroups, lists.
      This will facilitate cut-and-paste between kinemages.
    - added quoting of < > & in kinemage text for proper HTML display
    - masters now start on/off based on whether they have any targets that are on.
      This includes pointmasters, a feature Dave has been requesting.
    - added support for @whiteback, @onewidth, @thinline, @perspective
    - put clipping on a linear scale 0-800, like in Mage
    - reworked views to be span-based, so that views are stable
      even through kinemage merges, etc.
    - added ability to edit kinemage properties (@onewidth, etc.)
    - renamed Edit menu to Explore; Tree menu to Modify

    ### 0.22 ###
    - restored the ability to write XML, with class XknWriter
    - replaced Enumerator with Collections.enumeration()
    - improved the highlighter tool
    - increased default size of graphics area
    - rearranged some elements of the UI to suit Jane

    ### 0.21 ###
    - came up with good formulas for colors on a white background
    - replaced Colorset class with functions in ColorManager
    - use HSV color palette all the time, for all kinemages
    - added point color to output kinemages
    - made left/right arrow keys do rotation about Y-axis for Bryan (KinCanvas)
    - added Highlighter tool for use with Chiropraxis solutions
    - added ability to set font magnification in .king_prefs
    - fixed bug with monochrome option that caused invisble things to be shown
    - fixed markers in MMTool

    ### 0.20 ###
    - began re-organizing kin/group/subgroup/list/point class hierarchy --
      groups and subgroups are now distinct classes that can't be nested
      arbitrarily
    - began creating sub-packages
    - decided to organize files into directories but not use additional packages
    - made search, kin writing work as external iterators
    - improved color/palette system
    - added internal palette kinemage to Help menu (like Mage)
    - added ability to edit groups/subgroups/lists (including list color)

    ### 0.18 ###
    - made balls write out their individual radii

    ### 0.17 ###
    - added nohilite (nohighlight) tag to balllists
    - tried to make point ID the contents of the  tag (undid it -- no good)
    - created Palette to replace MagePaints
    - added keyword @hsvcolor {name} hue_0-360 [saturation_0-100 [value_0.0-1.0]]
    - removed jump-to-letter from kinemage tree display
    - added Properties to tree edit menu
    - added cut/paste to tree menu
    - added up/down to tree menu
    - added ability to create new groups from the tree

    ### 0.16 ###
    - made KiNG start in current directory instead of home directory
    - created ContactMapTool and adapted it to MolProbity
    - fixed sign/handedness problem for dihedral measures in MMTool
    - restored "Set Center" to "Pick Center" in KinCanvas, KingPrefs
    - decided to keep XML and keep/adapt ContactMapTool
    - changed  tags to  tags in KingPoint.emitXML
    - other small XML changes to more closely match kinemage format
    - added ability to rename groups from the tree
    - can write out @animations but XML will crash with old-style 'animate' group flag
    - made masters the only legal target for AnimateGroups;
      custom masters are now created on input to control 'animate' groups.

    ### 0.15 ###
    - started adding ability to write XML
    - KiNG can now write out its entire data structure (except animations!) as XML
    - KiNG can also write out its entire data structure in kinemage format, except animations
    - improved ability to read old kins without point IDs (WorldMap.kin) -- still not perfect
    - fixed printing to match resolution of graphics area -- now more WYSIWYG
    - added pretty printing to VectorPoint and DotPoint
    - fixed bugs in kinemage writing code
    - added ability for groups to write animate/2animate attribute to kinemage
    - added warning before overwriting existing files
    - reworked the tool architechture, with dynamic loading and @kingtool keyword
    - added @flat[land] keyword and tool
    - fixed text propagation, so re-writes get saved to disk
    - added ability to open multiple windows
    - fixed bug in KinTree.onDelete that caused reloading of model
    - added ability to configure via .king_prefs file in home directory,
      including ability to create this file for the user.
    - added ability to save views to the Views menu

    ### 0.14 ###
    - changed EM_ON_OFF to EM_EDIT_GROSS in KinTree.onDelete()
    - made printing visible to applets (asks user for permission)
    - distinguished b/t "Close" and "Close All" -- this will matter for authorship (maybe?)
    - added reference to host applet in KingMain, to enable future interaction w/ browser
    - updated user manual with Saving & Printing

    ### 0.13 ###
    - wrote a reasonable first draft of the user manual
    - elaborated on File | Merge to handle multi-kinemage files when there is no current kinemage
    - reworked the tree mechanism so I can start adding functionality
    - added 'Toggle visibility' as a tree command
    - added 'Delete' as a tree command (buggy)
    - changed AbstractGroup and all descendents to *contain* an ArrayList called children,
      rather than be directly descended from ArrayList. This allows us to implement MutableTreeNode
      without naming conflicts.
    - ironed (most) bugs out of 'Delete' tree command
    - added GridBagPanel for future construction of dialog boxes
    - added printing (and thereby, PostScript export). java.awt.print makes this *so* easy -- 10 minutes!
    - set minimum size for balls (so they can't disappear when zoomed way out)

    ### 0.12 ###
    - added 'unpickable' property to points and KinReader
    - added colorsets: @colorset {colorset_name} mage_color
    - added z-translation to default tool and decided 'Alt' and 'Meta' are not viable modifiers
    - changed KinReader to allow list name to come anywhere in list line (but a name is REQUIRED before points will be parsed)
    - updated icon to a purple 'K'
    - added label lists (with 'center' or 'right' options per point)
    - added marker lists (with s= style_code per point)
    - added triangle lists (shading on ribbonlists remains to be done)
    - added shading on ribbon lists for P-L type ribbons but not PT-T type ribbons
    - fixed shading to work with PT-T type ribbons in most cases

    ### 0.11 ###
    - Reworked file opening to handle multiple files at once, and files from command line.
    - added more info to Help About (Java version, home; gnu.regexp version)
    - added icon to MainWindow
    - added KingPrefs, which will be expanded in the future
    - made balls look more like Mage balls
    - added ToolBox and a DefaultTool which has old functions, plus angle & dihedral
    - added translation (flatland scroll)
    - *finally* added line shortening by balls/spheres to rendering system
      also eliminated drawing of zero-length lines
      performance takes a slight (3-5% ?) hit, but not too bad
    - created MarkerPoint and added ability to mark points to the DefaultTool

    ### 0.10 ###
    - improved handling of plain text from kinemages
    - added @_span support to KinReader, fixed centering bug
    - added most Mage keyboard shortcuts
    - added System.exit() call to try and force shutdown in application
    - improved quality of line rendering for VectorPoint, etc. at some cost to speed
    - added @animation keyword: @animation {anim_name} {master1} {master2} ...
    - added 'nobutton' to @master
    - fixed a bug in KinReader's handling of r= and w= point parameters
    - added Edit | Find point... dialogs using dynamic regexp library
    - made Views and Animations menus use radio button symbols
    - made search only apply to live points

    ### 0.09 ###
    - altered depth cueing by thickness scheme
    - moved file loading to background thread and implemented progress meter
    - began Kinglet, the KiNG loader applet
    - began text display-and-edit dialog (UIText)
    - added shutdown handlers
    - began adding pointmasters -- complete. Supports multiple independent masters a-z and 1-6
    - added ReflectiveRunnable and reworked thread-handling in KinReader
    - added support for animate and 2animate

    ### 0.08a ###
    - restructured KinReader for easier incorporation of new features
    - added masters
    - added picking of saved views from the menus
    - fixed preTransform() to only go if button is on -- this is noticable for kinemages with e.g. 100,000 points.
    - increased level of control of rendering -- added Display menu
    - updated UI, including 4 new text fields for info display and an edit menu to the tree
    - added pickcenter button, for old times' sake ;)

    ### 0.07a ###
    - resumed development work in my spare time
    - made transform() traverse the data structure
    - made time-critical rendering & transform use get() instead of iterator() -- did this really help?
    - started installKinemage() in KingMain -- we're almost ready to use File | Open...
    - File | Open works (primitive, but it works)
    - rebuilt interface
    - more work on File | open/append/close
    - added ability to switch among loaded kinemages

    ### 0.06a ###
    - Data model can have its root set and will calculate the size of the object, but this needs some work to be clean.
    - Reworked drawing model a bit, storing attribs in the Engine and adding list colors.
    - Added partial drawing of lines. It slows us down a measurable amount, but the effect is probably worth it. (?)
    - We can work with a full CA trace of the ribosome though at about 10 frames/sec, though we get funny orange specs... what are those, waters?
    - Added balllists and dotlists to Kinemage IO. Orange specs are actually pink lines to nowhere that Prekin builds for het groups, like ions.
    - Added "point picking" with display of point ID in a label above the kinemage, and simple distance measuring.
    - Extended capabilities of KinemageIO. Can now read and display -cass, -cbetadev, -aasc, and (probably) more
    - Eliminated what appeared to be a memory leak in KinemageParser relating to StringBuffer.delete()
    - Replaced hashCode() in KingList to provide acceptable performance for the tree display...

    ### 0.05a ###
    - enabled data tree to build list of currently visible lists
    - added experimental normalization of matrix... causes very odd effects!
    - finally got REAL matrix normalization going -- it's basically a matter of normalizing the length
      of each row vector to one, and taking the cross products to insure the row vectors are mutually orthogonal.
    - added on/off buttons like Mage has
    - added menus, which so far control white background and antialiasing
    - coordinated the two 'show markers' commands
    - started work on .kin file decoder -- can read in thumbnail.kin (1UBQ from MolProbity)

    ### 0.04a ###
    - added tree display and implemented TreeNode in KingGroup and KingList
    - wrote KinemageParser to simplify picking apart kinemages
    - added popup menus to tree display
    - I missed something, somewhere -- using the original Graphics drawLine() and fillOval() methods
      WITH NO STROKES AND NO ANTIALIASING cut rendering time by a whopping 90%!
    - took steps toward unifying the data model, so that events can propagate up and down the tree
    - added picking and centering via right mouse pick

    ### 0.03a ###
    - display works and mouse moves the model
    - restructured data system for self-drawing points and table models.
    - added VectorPoint, DotPoint, and BallPoint
    - made depth cueing work
    - fixed clipping and zooming to be relative to (1) object size and (2) screen size

    ### 0.02a ###
    - started constructing a real GUI framework, which so far supports zooming the test figure.
    - 'turned on' z-buffering (previous logical error)
    - fixed one problem with the coordinate system (sign of y), but others still seem to exist...

    ### 0.01a ###
    - made 'shells' of many important classes for data storage and manipulation
    - implemented rotation and showed that it works
    - implemented z-buffering
    - did first rendering test, of a 5 line figure. 10^6 frames in 5.4 sec!
    - un-did threading -- too complicated to coordinate large shared data structures
    - did rendering test w/ Graphics2D and 3 px pen -- as fast or faster (!)
    - unbelievably, turning on antialiasing actually seems to SPEED THINGS UP by ~20%