Major re-sync with danny's personal toolkit.
Very early stage topological graph stuff.
Lots of cleanup here and there.
Bookman 1.0
Sort the work instructions into their correct sheets when doing a restore.
Move rules that are in the wrong sheet during a restore.
If during a restore a work instruction is found which references an inspection element which does not exist then create a placeholder to avoid getting a Boom from the otherwise inevitable failed call to getMandatoryInspectionElement. Since a work instruction references its inspection element via its WIR, the only thing we know about the missing inspection element is its inspection element number. Consequently, the placeholder IE is called "IEN Place Holder" where IEN is the missing IE's number.
Bookman 1.0.1

Fixed bug whereby changing inspection elements or manufacturers via the Preferences window would result in crashes if work instructions or rules existed which relied on the changed entities.

Implement a right-click menu item in the rules sheet to change the work instruction associated with a rule.

Inspection element numbers are now 5 digits wide.

Stop protecting the Cables inspection element and create a separate special inspection element called Xxx with inspection element number 99999 which is protected.

Allow sorting of groups tables and rules tables by clicking on the various JTable column headers.

Fix a crash which resulted when hiding a rule in a rule sheet.

Change rule sheet management to allow a rule sheet to "tolerate" having a rule with an inspection element or manufacturer which is incompatible with its defined IE or manufacturer. Note that rules which are in the "wrong" sheet get moved to the "right" sheet when restoring from a save file. Consequently, this "tolerance" is quite limited - i.e. the copied rules should have their inspection elements and/or manufacturers changed to be compatible with the sheet that they are now in by using the new right-click menu item to change their work instructions.
Add trace code to the MultiSplitLayout and MultiSplitPane classes to try to figure out why resizing isn't working properly.