An Outline, or tree-table component. Takes an instance of OutlineModel,
an interface which merges TreeModel and TableModel.

Simplest usage:

Create a standard tree model for the tree node portion of the outline.

Implement RowModel. RowModel is a subset of TableModel - it is passed
the value in column 0 of the Outline and a column index, and returns the
value in the column in question.

Pass the TreeModel and the RowModel to DefaultOutlineModel.createModel()

This will generate an instance of DefaultOutlineModel which will use the
TreeModel for the rows/tree column content, and use the RowModel to provide
the additional table columns.

It is also useful to provide an implementation of RenderDataProvider
to supply icons and affect text display of cells - this covers most of the
needs for which it is necessary to write a custom cell renderer in JTable/JTree.

Example usage:
Assume FileTreeModel is a model which, given a root directory, will
expose the files and folders underneath it. We will implement a
RowModel to expose the file size and date, and a RenderDataProvider which
will use a gray color for uneditable files and expose the full file path as
a tooltip. Assume the class this is implemented in is a
JPanel subclass or other Swing container.
XXX todo: clean up formatting & edit for style

getRenderDataProvider

Get the RenderDataProvider which is providing text, icons and tooltips
for items in the tree column. The default property for this value is
null, in which case standard JTable/JTree object -> icon/string
conventions are used

setRenderDataProvider

Set the RenderDataProvider which will provide text, icons and tooltips
for items in the tree column. The default is null. If null,
the data displayed will be generated in the standard JTable/JTree way -
calling toString() on objects in the tree model and
using the look and feel's default tree folder and tree leaf icons.

getLayoutCache

Get the layout cache which manages layout data for the Outline.
Under no circumstances directly call the methods on the
layout cache which change the expanded state - such changes will not
be propagated into the table model, and will leave the model and
its layout in inconsistent states. Any calls that affect expanded
state must go through getTreePathSupport().