The specification data of an ETable is an xml data structure.  It can
be either a file or an in place character string.  If implemented as a
string, remember to backslashify the necessary double quotes.

The specification's main element is a "ETableSpecification" element.
That is it starts out like this:

<ETableSpecification [attributes]>

There are a number of possible attributes.  Most of them are binary
options.  To turn on a binary option set its value to "true".  Thus:

<ETableSpecification no-headers="true">

would make a table with no headers.

The default for all boolean options is false.  There are also
enumerations and string attributes.  The default for enumerations will
be listed first.  The type tstring means a string attribute which will
be translated.

The attributes of an ETableSpecification are as follows.

name		          type	      values	   meaning
no-headers	          boolean     TRUE	   use no headers.
click-to-add	          boolean     TRUE	   include a click to add section at the top of the ETable
click-to-add-end	  boolean     TRUE	   put the click to add section at the bottom of the ETable
_click-to-add-message     tstring     The string to display in the click to add area when it doesn't have focus.
horizontal-draw-grid      boolean     FALSE	   draw the horizontal grid lines of the ETable
vertical-draw-grid        boolean     FALSE	   draw the vertical grid lines of the ETable
draw-grid	          boolean     unset	   draw the grid of the ETable.  This overrides horizontal-draw-grid and vertical-draw-grid if set.
draw-focus	          boolean     TRUE	   draw the cursor of the ETable.
cursor-mode	          enum	      "normal"	   Highlight the entire line the cursor is on except for the cell that the cursor is on.
		          	      "line"	   Highlight the entire line the cursor is on.

selection-mode		  enum	      "single"	   Exactly one row is selected at any time (and it matches the cursor.)

				      "browse"     These three aren't distinguished between yet.  What should these be?
				      "multiple"   In any of these three, it lets you have anywhere from 0 to all the messages selected.
				      "extended"
horizontal-scrolling      boolean     FALSE        Use horizontal scrolling.  This is somewhat slower because it frequencly computes widths of texts.
alternating-row-colors	  boolean     TRUE	   Use alternating white/grey background colors for even/odd rows in tables and trees.
allow-grouping		  boolean     TRUE	   Allow grouping.  If this is set to FALSE, the user won't be able to turn on grouping.

There are two types of children of an ETableSpecification.
ETableColumns and a single ETableState.  The ETableColumns are ordered
in the order they should appear in the field chooser dialog and the
single ETableState can appear anywhere in the list of ETableColumns.

An ETableColumn is an xml element with the name "ETableColumn".  It is
a single element with no children.  Thus it is written like this:

<ETableColumn [attributes]/>

There are a number of different attributes.  See above for general
attribute information.  There can also be integer and double
attributes which are interpreted in decimal and index attributes which
are strings which are indexes into the ETableExtras you provide.  The
built in ETableExtras fields will be described later.  The attributes
of an ETableColumn are as follows.

name              type        values
model_col	  integer     The model column of the ETableModel to pull data from.
_title		  tstring     The title to display in the header of this column.
pixbuf		  index	      The image to display in the header of this column.
expansion	  double      The expansion portion.
minimum_width     integer     The minimum width of this column.
resizable	  boolean     TRUE if this column is resizable from its minimum width.
cell		  index	      The ETableCell to use to render the data in this column.
compare		  index	      The callback function used to sort the data in this column.

Cell and compare are both absolutely required fields.  Also, either
_title must be non NULL && non empty or pixbuf must point to a pixbuf
that exists in your ETableExtras.  If thexse rules are broken, ETable
may crash.


An ETableState is an xml element with the name "ETableState".  The
ETableState has no attributes.  Thus it starts like this:

<ETableState>

There are two types of children of the ETableState.  The first type of
child is named "column".  It has a single integer attribute source.
Thus a column might be like this:

<column source="5"/>

The source is an index into the array of ETableColumns specified in
the ETableSpecification.  There my be one or more columns in an
ETableState.  These represent the visible columns of the ETable.

The second type of child is grouping.  There is a single grouping
element.  It may appear anywhere in the list of columns.  The grouping
element describes the sorting of the table.

The grouping element contains some number of children.  It contains
some number of "group" elements followed by some number of "leaf"
elements.  The group elements describe the grouping of the table.  The
leaf elements describe the sorting of the table.  Each element should
contain the attribute column, which is an index into the array of
ETableColumns specified in the ETableSpecification and the attribute
ascending which is a boolean value which specifies whether that
grouping or sorting is sorted ascending or descending.  The default,
is as usual, FALSE.

For example, the grouping of a table grouped by column 3 and then
sorted by column 2 and then sorted descending by column 6 would be
designated as

<grouping>
  <group column="3" ascending="true"/>
  <leaf column="2" ascending="true"/>
  <leaf column="6" ascending="false"/>
</grouping>

This specification is likely to change in the future.  Any such
changes will be considered binary incompatible changes and will thus
lead to a so number update when the next released version comes out.

* Cell Renderers

  The following cell renderers are available as part of the stock
  ETable:

        "checkbox"
        "date"
        "number"
        "pixbuf"
        "size"
        "string"
        "tree-string"

* Cell compare routines

   The following cell compare routines are available as part of the
   stock ETable.  These functions use the value returned from the
   value_at method:

         "string"
		performs a string compare

         "integer"
		performs an integer compare

         "string-integer"
		converts the strings to integers using atoi and then
		performs an integer compare


