com.google.gwt.user.cellview.client

## Class AbstractCellTable<T>

- java.lang.Object
- - com.google.gwt.user.client.ui.UIObject
  - - com.google.gwt.user.client.ui.Widget
    - - com.google.gwt.user.client.ui.Composite
      - - com.google.gwt.user.cellview.client.AbstractHasData<T>
        - - com.google.gwt.user.cellview.client.AbstractCellTable<T>

- Type Parameters:
    `T` - the data type of each row
  All Implemented Interfaces:
    HasAttachHandlers, HasHandlers, HasKeyboardPagingPolicy, HasKeyboardSelectionPolicy, EventListener, Focusable, HasVisibility, IsRenderable, IsWidget, HasCellPreviewHandlers<T>, HasData<T>, HasKeyProvider<T>, HasRows
  Direct Known Subclasses:
    CellTable, DataGrid

      public abstract class AbstractCellTable<T>
      extends AbstractHasData<T>

  Abstract base class for tabular views that supports paging and columns.

  ### Columns

  The `Column` class defines the `Cell` used to render a column. Implement `Column.getValue(Object)` to retrieve the field value from the row object that will be rendered in the `Cell`.

  ### Headers and Footers

  A `Header` can be placed at the top (header) or bottom (footer) of the `AbstractCellTable`. You can specify a header as text using `addColumn(Column, String)`, or you can create a custom `Header` that can change with the value of the cells, such as a column total. The `Header` will be rendered every time the row data changes or the table is redrawn. If you pass the same header instance (==) into adjacent columns, the header will span the columns.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `AbstractCellTable.CellTableKeyboardSelectionHandler<T>` Default implementation of a keyboard navigation handler for tables that supports navigation between cells.
    `static interface` | `AbstractCellTable.Resources` A ClientBundle that provides images for this widget.
    `static interface` | `AbstractCellTable.Style` Styles used by this widget.
    `protected static interface` | `AbstractCellTable.TableSectionChangeHandler` Interface that this class's subclass may implement to get notified with table section change event.
    `(package private) static interface` | `AbstractCellTable.Template`

    - ### Nested classes/interfaces inherited from class com.google.gwt.user.cellview.client.AbstractHasData

      `AbstractHasData.DefaultKeyboardSelectionHandler<T>`

    - ### Nested classes/interfaces inherited from class com.google.gwt.user.client.ui.UIObject

      `UIObject.DebugIdImpl, UIObject.DebugIdImplEnabled`

    - ### Nested classes/interfaces inherited from interface com.google.gwt.user.cellview.client.HasKeyboardPagingPolicy

      `HasKeyboardPagingPolicy.KeyboardPagingPolicy`

    - ### Nested classes/interfaces inherited from interface com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy

      `HasKeyboardSelectionPolicy.KeyboardSelectionPolicy`

  - ### Field Summary

    - ### Fields inherited from class com.google.gwt.user.cellview.client.AbstractHasData

      `isFocused`

    - ### Fields inherited from class com.google.gwt.user.client.ui.UIObject

      `DEBUG_ID_PREFIX`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `AbstractCellTable(Element elem, int pageSize, AbstractCellTable.Resources resources, ProvidesKey<T> keyProvider)` Constructs a table with the given page size, the specified `AbstractCellTable.Style`, and the given key provider.
    `AbstractCellTable(Widget widget, int pageSize, AbstractCellTable.Resources resources, ProvidesKey<T> keyProvider)` Constructs a table with the given page size, the specified `AbstractCellTable.Style`, and the given key provider.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addColumn(Column<T,?> col)` Adds a column to the end of the table.
    `void` | `addColumn(Column<T,?> col, Header<?> header)` Adds a column to the end of the table with an associated header.
    `void` | `addColumn(Column<T,?> col, Header<?> header, Header<?> footer)` Adds a column to the end of the table with an associated header and footer.
    `void` | `addColumn(Column<T,?> col, SafeHtml headerHtml)` Adds a column to the end of the table with an associated `SafeHtml` header.
    `void` | `addColumn(Column<T,?> col, SafeHtml headerHtml, SafeHtml footerHtml)` Adds a column to the end of the table with an associated `SafeHtml` header and footer.
    `void` | `addColumn(Column<T,?> col, java.lang.String headerString)` Adds a column to the end of the table with an associated String header.
    `void` | `addColumn(Column<T,?> col, java.lang.String headerString, java.lang.String footerString)` Adds a column to the end of the table with an associated String header and footer.
    `HandlerRegistration` | `addColumnSortHandler(ColumnSortEvent.Handler handler)` Add a handler to handle `ColumnSortEvent`s.
    `abstract void` | `addColumnStyleName(int index, java.lang.String styleName)` Add a style name to the `col` element at the specified index, creating it if necessary.
    `HandlerRegistration` | `addRowHoverHandler(RowHoverEvent.Handler handler)` Add a handler to handle `RowHoverEvent`s.
    `void` | `clearColumnWidth(Column<T,?> column)` Clear the width of the specified `Column`.
    `void` | `clearColumnWidth(java.lang.Integer column)` Clear the width of the specified `Column`.
    `protected Element` | `convertToElements(SafeHtml html)` Convert the specified HTML into DOM elements and return the parent of the DOM elements.
    `protected boolean` | `dependsOnSelection()` Check whether or not the cells in the view depend on the selection state.
    `protected abstract void` | `doSetColumnWidth(int column, java.lang.String width)` Set the width of a column.
    `protected abstract void` | `doSetHeaderVisible(boolean isFooter, boolean isVisible)` Show or hide a header section.
    `void` | `flush()` Flush all pending changes to the table and render immediately.
    `protected Element` | `getChildContainer()` Return the element that holds the rendered cells.
    `protected TableRowElement` | `getChildElement(int row)` Get the element that represents the specified index.
    `Column<T,?>` | `getColumn(int col)` Get the column at the specified index.
    `int` | `getColumnCount()` Get the number of columns in the table.
    `int` | `getColumnIndex(Column<T,?> column)` Get the index of the specified column.
    `ColumnSortList` | `getColumnSortList()` Get the `ColumnSortList` that specifies which columns are sorted.
    `java.lang.String` | `getColumnWidth(Column<T,?> column)` Get the width of a `Column`.
    `(package private) java.lang.String` | `getColumnWidth(int columnIndex)` Get the column width.
    `Widget` | `getEmptyTableWidget()` Get the widget displayed when the table has no rows.
    `Header<?>` | `getFooter(int index)` Get the `Header` from the footer section that was added with a `Column`.
    `FooterBuilder<T>` | `getFooterBuilder()` Get the `HeaderBuilder` used to generate the footer section.
    `Header<?>` | `getHeader(int index)` Get the `Header` from the header section that was added with a `Column`.
    `HeaderBuilder<T>` | `getHeaderBuilder()` Get the `HeaderBuilder` used to generate the header section.
    `int` | `getKeyboardSelectedColumn()` Get the index of the column that is currently selected via the keyboard.
    `protected Element` | `getKeyboardSelectedElement()` Get the element that has keyboard selection.
    `int` | `getKeyboardSelectedSubRow()` Get the index of the sub row that is currently selected via the keyboard.
    `Widget` | `getLoadingIndicator()` Get the widget displayed when the data is loading.
    `protected int` | `getRealColumnCount()` Get the real column count, which is the greater of the number of Columns or the maximum index of a column with a defined column width.
    `AbstractCellTable.Resources` | `getResources()` Get the resources used by this table.
    `TableRowElement` | `getRowElement(int row)` Get the `TableRowElement` for the specified row.
    `RowStyles<T>` | `getRowStyles()` Gets the object used to determine how a row is styled.
    `(package private) TableRowElement` | `getSubRowElement(int absRow, int subrow)` Get a subrow element given the index of the row value and the sub row index.
    `protected abstract TableSectionElement` | `getTableBodyElement()` Get the tbody element that contains the render row values.
    `protected abstract TableSectionElement` | `getTableFootElement()` Get the tfoot element that contains the footers.
    `protected abstract TableSectionElement` | `getTableHeadElement()` Get the thead element that contains the headers.
    `void` | `insertColumn(int beforeIndex, Column<T,?> col)` Inserts a column into the table at the specified index.
    `void` | `insertColumn(int beforeIndex, Column<T,?> col, Header<?> header)` Inserts a column into the table at the specified index with an associated header.
    `void` | `insertColumn(int beforeIndex, Column<T,?> col, Header<?> header, Header<?> footer)` Inserts a column into the table at the specified index with an associated header and footer.
    `void` | `insertColumn(int beforeIndex, Column<T,?> col, SafeHtml headerHtml)` Inserts a column into the table at the specified index with an associated `SafeHtml` header.
    `void` | `insertColumn(int beforeIndex, Column<T,?> col, SafeHtml headerHtml, SafeHtml footerHtml)` Inserts a column into the table at the specified index with an associated `SafeHtml` header and footer.
    `void` | `insertColumn(int beforeIndex, Column<T,?> col, java.lang.String headerString)` Inserts a column into the table at the specified index with an associated String header.
    `void` | `insertColumn(int beforeIndex, Column<T,?> col, java.lang.String headerString, java.lang.String footerString)` Inserts a column into the table at the specified index with an associated String header and footer.
    `boolean` | `isAutoFooterRefreshDisabled()` Check if auto footer refresh is enabled or disabled.
    `boolean` | `isAutoHeaderRefreshDisabled()` Check if auto header refresh is enabled or disabled.
    `protected boolean` | `isKeyboardNavigationSuppressed()` Check if keyboard navigation is being suppressed, such as when the user is editing a cell.
    `boolean` | `isSkipRowHoverCheck()` Gets the skipRowHoverCheck flag.
    `boolean` | `isSkipRowHoverFloatElementCheck()` Gets the skipRowHoverFloatElementCheck flag.
    `boolean` | `isSkipRowHoverStyleUpdate()` Gets the skipRowHoverStyleUpdate flag.
    `protected void` | `onBlur()` Called when the widget is blurred.
    `protected void` | `onBrowserEvent2(Event event)` Called after `AbstractHasData.onBrowserEvent(Event)` completes.
    `protected void` | `onFocus()` Called when the widget is focused.
    `void` | `redrawFooters()` Redraw the table's footers.
    `void` | `redrawHeaders()` Redraw the table's headers.
    `protected void` | `refreshColumnWidths()`
    `void` | `removeColumn(Column<T,?> col)` Remove a column.
    `void` | `removeColumn(int index)` Remove a column.
    `abstract void` | `removeColumnStyleName(int index, java.lang.String styleName)` Remove a style from the `col` element at the specified index.
    `protected void` | `renderRowValues(SafeHtmlBuilder sb, java.util.List<T> values, int start, SelectionModel<? super T> selectionModel)` Deprecated. as of GWT 2.5, use a `CellTableBuilder` to customize the table structure instead
    `protected void` | `renderRowValuesLegacy(SafeHtmlBuilder sb, java.util.List<T> values, int start, SelectionModel<? super T> selectionModel)` Deprecated. as of GWT 2.5, use a `CellTableBuilder` to customize the table structure instead
    `protected void` | `replaceAllChildren(java.util.List<T> values, SafeHtml html)` Replace all children with the specified html.
    `protected void` | `replaceChildren(java.util.List<T> values, int start, SafeHtml html)` Convert the specified HTML into DOM elements and replace the existing elements starting at the specified index.
    `protected boolean` | `resetFocusOnCell()` Reset focus on the currently focused cell.
    `void` | `setAutoFooterRefreshDisabled(boolean disabled)` Enable or disable auto footer refresh when row data is changed.
    `void` | `setAutoHeaderRefreshDisabled(boolean disabled)` Enable or disable auto header refresh when row data is changed.
    `void` | `setColumnWidth(Column<T,?> column, double width, Style.Unit unit)` Set the width of a `Column`.
    `void` | `setColumnWidth(Column<T,?> column, java.lang.String width)` Set the width of a `Column`.
    `void` | `setColumnWidth(int column, double width, Style.Unit unit)` Set the width of a `Column`.
    `void` | `setColumnWidth(int column, java.lang.String width)` Set the width of a `Column`.
    `void` | `setEmptyTableWidget(Widget widget)` Set the widget to display when the table has no rows.
    `void` | `setFooterBuilder(FooterBuilder<T> builder)` Set the `HeaderBuilder` used to build the footer section of the table.
    `void` | `setHeaderBuilder(HeaderBuilder<T> builder)` Set the `HeaderBuilder` used to build the header section of the table.
    `protected void` | `setKeyboardSelected(int index, boolean selected, boolean stealFocus)` Update an element to reflect its keyboard selected state.
    `void` | `setKeyboardSelectedColumn(int column)` Set the keyboard selected column index.
    `void` | `setKeyboardSelectedColumn(int column, boolean stealFocus)` Set the keyboard selected column index and optionally focus on the new cell.
    `void` | `setKeyboardSelectedRow(int row, boolean stealFocus)` Set the keyboard selected row and optionally focus on the new row.
    `void` | `setKeyboardSelectedRow(int row, int subrow, boolean stealFocus)` Set the keyboard selected row and subrow, optionally focus on the new row.
    `void` | `setLoadingIndicator(Widget widget)` Set the widget to display when the data is loading.
    `void` | `setRowStyles(RowStyles<T> rowStyles)` Sets the object used to determine how a row is styled; the change will take effect the next time that the table is rendered.
    `void` | `setSkipRowHoverCheck(boolean skipRowHoverCheck)` Sets the skipRowHoverCheck flag.
    `void` | `setSkipRowHoverFloatElementCheck(boolean skipRowHoverFloatElementCheck)` Sets the skipRowHoverFloatElementCheck flag.
    `void` | `setSkipRowHoverStyleUpdate(boolean skipRowHoverStyleUpdate)` Sets the skipRowHoverStyleUpdate flag.
    `void` | `setTableBuilder(CellTableBuilder<T> tableBuilder)` Specify the `CellTableBuilder` that will be used to render the row values into the table.

    - ### Methods inherited from class com.google.gwt.user.cellview.client.AbstractHasData

      `addCellPreviewHandler, addLoadingStateChangeHandler, addRangeChangeHandler, addRowCountChangeHandler, addValueChangeHandler, adopt, cellConsumesEventType, checkRowBounds, convertToElements, doAttach, doDetach, getAccessKey, getDisplayedItem, getDisplayedItems, getKeyboardPagingPolicy, getKeyboardSelectedRow, getKeyboardSelectionPolicy, getKeyProvider, getPageSize, getPageStart, getPresenter, getRowContainer, getRowCount, getSelectionModel, getTabIndex, getValueKey, getVisibleItem, getVisibleItemCount, getVisibleItems, getVisibleRange, isRowCountExact, isRowWithinBounds, onBrowserEvent, onLoadingStateChanged, onUnload, redraw, redrawRow, replaceAllChildren, replaceChildren, setAccessKey, setFocus, setFocusable, setKeyboardPagingPolicy, setKeyboardSelectedRow, setKeyboardSelectionHandler, setKeyboardSelectionPolicy, setPageSize, setPageStart, setRowCount, setRowCount, setRowData, setRowData, setSelected, setSelectionModel, setSelectionModel, setTabIndex, setVisibleRange, setVisibleRange, setVisibleRangeAndClearData, showOrHide`

    - ### Methods inherited from class com.google.gwt.user.client.ui.Composite

      `claimElement, getWidget, initializeClaimedElement, initWidget, isAttached, onAttach, onDetach, render, render, resolvePotentialElement, setWidget`

    - ### Methods inherited from class com.google.gwt.user.client.ui.Widget

      `addAttachHandler, addBitlessDomHandler, addDomHandler, addHandler, asWidget, asWidgetOrNull, createHandlerManager, delegateEvent, doAttachChildren, doDetachChildren, fireEvent, getHandlerCount, getLayoutData, getParent, isOrWasAttached, onLoad, removeFromParent, setLayoutData, sinkEvents`

    - ### Methods inherited from class com.google.gwt.user.client.ui.UIObject

      `addStyleDependentName, addStyleName, ensureDebugId, ensureDebugId, ensureDebugId, getAbsoluteLeft, getAbsoluteTop, getElement, getOffsetHeight, getOffsetWidth, getStyleElement, getStyleName, getStyleName, getStylePrimaryName, getStylePrimaryName, getTitle, isVisible, isVisible, onEnsureDebugId, removeStyleDependentName, removeStyleName, setElement, setElement, setHeight, setPixelSize, setSize, setStyleDependentName, setStyleName, setStyleName, setStyleName, setStyleName, setStylePrimaryName, setStylePrimaryName, setTitle, setVisible, setVisible, setWidth, sinkBitlessEvent, toString, unsinkEvents`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface com.google.gwt.event.shared.HasHandlers

      `fireEvent`

- - ### Constructor Detail

    - #### AbstractCellTable

          public AbstractCellTable(Element elem,
                           int pageSize,
                           AbstractCellTable.Resources resources,
                           ProvidesKey<T> keyProvider)

      Constructs a table with the given page size, the specified `AbstractCellTable.Style`, and the given key provider.
      Parameters:
        `elem` - the parent `Element`
        `pageSize` - the page size
        `resources` - the resources to apply to the widget
        `keyProvider` - an instance of ProvidesKey, or null if the record object should act as its own key

    - #### AbstractCellTable

          public AbstractCellTable(Widget widget,
                           int pageSize,
                           AbstractCellTable.Resources resources,
                           ProvidesKey<T> keyProvider)

      Constructs a table with the given page size, the specified `AbstractCellTable.Style`, and the given key provider.
      Parameters:
        `widget` - the parent widget
        `pageSize` - the page size
        `resources` - the resources to apply to the widget
        `keyProvider` - an instance of ProvidesKey, or null if the record object should act as its own key

  - ### Method Detail

    - #### addColumn

          public void addColumn(Column<T,?> col)

      Adds a column to the end of the table.
      Parameters:
        `col` - the column to be added

    - #### addColumn

          public void addColumn(Column<T,?> col,
                       Header<?> header)

      Adds a column to the end of the table with an associated header.
      Parameters:
        `col` - the column to be added
        `header` - the associated `Header`

    - #### addColumn

          public void addColumn(Column<T,?> col,
                       Header<?> header,
                       Header<?> footer)

      Adds a column to the end of the table with an associated header and footer.
      Parameters:
        `col` - the column to be added
        `header` - the associated `Header`
        `footer` - the associated footer (as a `Header` object)

    - #### addColumn

          public void addColumn(Column<T,?> col,
                       java.lang.String headerString)

      Adds a column to the end of the table with an associated String header.
      Parameters:
        `col` - the column to be added
        `headerString` - the associated header text, as a String

    - #### addColumn

          public void addColumn(Column<T,?> col,
                       SafeHtml headerHtml)

      Adds a column to the end of the table with an associated `SafeHtml` header.
      Parameters:
        `col` - the column to be added
        `headerHtml` - the associated header text, as safe HTML

    - #### addColumn

          public void addColumn(Column<T,?> col,
                       java.lang.String headerString,
                       java.lang.String footerString)

      Adds a column to the end of the table with an associated String header and footer.
      Parameters:
        `col` - the column to be added
        `headerString` - the associated header text, as a String
        `footerString` - the associated footer text, as a String

    - #### addColumn

          public void addColumn(Column<T,?> col,
                       SafeHtml headerHtml,
                       SafeHtml footerHtml)

      Adds a column to the end of the table with an associated `SafeHtml` header and footer.
      Parameters:
        `col` - the column to be added
        `headerHtml` - the associated header text, as safe HTML
        `footerHtml` - the associated footer text, as safe HTML

    - #### addColumnSortHandler

          public HandlerRegistration addColumnSortHandler(ColumnSortEvent.Handler handler)

      Add a handler to handle `ColumnSortEvent`s.
      Parameters:
        `handler` - the `ColumnSortEvent.Handler` to add
      Returns:
        a `HandlerRegistration` to remove the handler

    - #### addColumnStyleName

          public abstract void addColumnStyleName(int index,
                                java.lang.String styleName)

      Add a style name to the `col` element at the specified index, creating it if necessary.
      Parameters:
        `index` - the column index
        `styleName` - the style name to add

    - #### addRowHoverHandler

          public HandlerRegistration addRowHoverHandler(RowHoverEvent.Handler handler)

      Add a handler to handle `RowHoverEvent`s.
      Parameters:
        `handler` - the `RowHoverEvent.Handler` to add
      Returns:
        a `HandlerRegistration` to remove the handler

    - #### clearColumnWidth

          public void clearColumnWidth(Column<T,?> column)

      Clear the width of the specified `Column`.
      Parameters:
        `column` - the column

    - #### clearColumnWidth

          public void clearColumnWidth(java.lang.Integer column)

      Clear the width of the specified `Column`.
      Parameters:
        `column` - the column index

    - #### flush

          public void flush()

      Flush all pending changes to the table and render immediately.

      Modifications to the table, such as adding columns or setting data, are not rendered immediately. Instead, changes are coalesced at the end of the current event loop to avoid rendering the table multiple times. Use this method to force the table to render all pending modifications immediately.

    - #### getColumn

          public Column<T,?> getColumn(int col)

      Get the column at the specified index.
      Parameters:
        `col` - the index of the column to retrieve
      Returns:
        the `Column` at the index

    - #### getColumnCount

          public int getColumnCount()

      Get the number of columns in the table.
      Returns:
        the column count

    - #### getColumnIndex

          public int getColumnIndex(Column<T,?> column)

      Get the index of the specified column.
      Parameters:
        `column` - the column to search for
      Returns:
        the index of the column, or -1 if not found

    - #### getColumnSortList

          public ColumnSortList getColumnSortList()

      Get the `ColumnSortList` that specifies which columns are sorted. Modifications to the `ColumnSortList` will be reflected in the table header.

      Note that the implementation may redraw the headers on every modification to the `ColumnSortList`.

      Returns:
        the `ColumnSortList`

    - #### getColumnWidth

          public java.lang.String getColumnWidth(Column<T,?> column)

      Get the width of a `Column`.
      Parameters:
        `column` - the column
      Returns:
        the width of the column, or null if not set
      See Also:
        `#setColumnWidth(Column, double, Unit)`

    - #### getEmptyTableWidget

          public Widget getEmptyTableWidget()

      Get the widget displayed when the table has no rows.
      Returns:
        the empty table widget

    - #### getFooter

          public Header<?> getFooter(int index)

      Get the `Header` from the footer section that was added with a `Column`.

    - #### getFooterBuilder

          public FooterBuilder<T> getFooterBuilder()

      Get the `HeaderBuilder` used to generate the footer section.

    - #### getHeader

          public Header<?> getHeader(int index)

      Get the `Header` from the header section that was added with a `Column`.

    - #### getHeaderBuilder

          public HeaderBuilder<T> getHeaderBuilder()

      Get the `HeaderBuilder` used to generate the header section.

    - #### getKeyboardSelectedColumn

          public int getKeyboardSelectedColumn()

      Get the index of the column that is currently selected via the keyboard.
      Returns:
        the currently selected column, or -1 if none selected

    - #### getKeyboardSelectedSubRow

          public int getKeyboardSelectedSubRow()

      Get the index of the sub row that is currently selected via the keyboard. If the row value maps to one rendered row element, the subrow is 0.
      Returns:
        the currently selected subrow, or -1 if none selected

    - #### getLoadingIndicator

          public Widget getLoadingIndicator()

      Get the widget displayed when the data is loading.
      Returns:
        the loading indicator

    - #### getResources

          public AbstractCellTable.Resources getResources()

      Get the resources used by this table.

    - #### getRowElement

          public TableRowElement getRowElement(int row)

      Get the `TableRowElement` for the specified row. If the row element has not been created, null is returned.
      Parameters:
        `row` - the row index
      Returns:
        the row element, or null if it doesn't exists
      Throws:
        `java.lang.IndexOutOfBoundsException` - if the row index is outside of the current page

    - #### getRowStyles

          public RowStyles<T> getRowStyles()

      Gets the object used to determine how a row is styled.
      Returns:
        the `RowStyles` object if set, null if not

    - #### insertColumn

          public void insertColumn(int beforeIndex,
                          Column<T,?> col)

      Inserts a column into the table at the specified index.
      Parameters:
        `beforeIndex` - the index to insert the column
        `col` - the column to be added

    - #### insertColumn

          public void insertColumn(int beforeIndex,
                          Column<T,?> col,
                          Header<?> header)

      Inserts a column into the table at the specified index with an associated header.
      Parameters:
        `beforeIndex` - the index to insert the column
        `col` - the column to be added
        `header` - the associated `Header`

    - #### insertColumn

          public void insertColumn(int beforeIndex,
                          Column<T,?> col,
                          Header<?> header,
                          Header<?> footer)

      Inserts a column into the table at the specified index with an associated header and footer.
      Parameters:
        `beforeIndex` - the index to insert the column
        `col` - the column to be added
        `header` - the associated `Header`
        `footer` - the associated footer (as a `Header` object)
      Throws:
        `java.lang.IndexOutOfBoundsException` - if the index is out of range

    - #### insertColumn

          public void insertColumn(int beforeIndex,
                          Column<T,?> col,
                          java.lang.String headerString)

      Inserts a column into the table at the specified index with an associated String header.
      Parameters:
        `beforeIndex` - the index to insert the column
        `col` - the column to be added
        `headerString` - the associated header text, as a String

    - #### insertColumn

          public void insertColumn(int beforeIndex,
                          Column<T,?> col,
                          SafeHtml headerHtml)

      Inserts a column into the table at the specified index with an associated `SafeHtml` header.
      Parameters:
        `beforeIndex` - the index to insert the column
        `col` - the column to be added
        `headerHtml` - the associated header text, as safe HTML

    - #### insertColumn

          public void insertColumn(int beforeIndex,
                          Column<T,?> col,
                          java.lang.String headerString,
                          java.lang.String footerString)

      Inserts a column into the table at the specified index with an associated String header and footer.
      Parameters:
        `beforeIndex` - the index to insert the column
        `col` - the column to be added
        `headerString` - the associated header text, as a String
        `footerString` - the associated footer text, as a String

    - #### insertColumn

          public void insertColumn(int beforeIndex,
                          Column<T,?> col,
                          SafeHtml headerHtml,
                          SafeHtml footerHtml)

      Inserts a column into the table at the specified index with an associated `SafeHtml` header and footer.
      Parameters:
        `beforeIndex` - the index to insert the column
        `col` - the column to be added
        `headerHtml` - the associated header text, as safe HTML
        `footerHtml` - the associated footer text, as safe HTML

    - #### isAutoFooterRefreshDisabled

          public boolean isAutoFooterRefreshDisabled()

      Check if auto footer refresh is enabled or disabled.
      Returns:
        true if disabled, false if enabled
      See Also:
        `setAutoFooterRefreshDisabled(boolean)`

    - #### isAutoHeaderRefreshDisabled

          public boolean isAutoHeaderRefreshDisabled()

      Check if auto header refresh is enabled or disabled.
      Returns:
        true if disabled, false if enabled
      See Also:
        `setAutoHeaderRefreshDisabled(boolean)`

    - #### isSkipRowHoverCheck

          public boolean isSkipRowHoverCheck()

      Gets the skipRowHoverCheck flag. If true, the CellTable will not check for row-level hover events (MOUSEOVER and MOUSEOUT).
      Returns:
        the flag value

    - #### isSkipRowHoverFloatElementCheck

          public boolean isSkipRowHoverFloatElementCheck()

      Gets the skipRowHoverFloatElementCheck flag. If true, the CellTable will not check for floating (fixed position) elements over the hovered row.
      Returns:
        the flag value

    - #### isSkipRowHoverStyleUpdate

          public boolean isSkipRowHoverStyleUpdate()

      Gets the skipRowHoverStyleUpdate flag. If true, the CellTable will not update the row's style on row-level hover events (MOUSEOVER and MOUSEOUT).
      Returns:
        the flag value

    - #### redrawFooters

          public void redrawFooters()

      Redraw the table's footers. The footers will be re-rendered synchronously.

    - #### redrawHeaders

          public void redrawHeaders()

      Redraw the table's headers. The headers will be re-rendered synchronously.

    - #### removeColumn

          public void removeColumn(Column<T,?> col)

      Remove a column.
      Parameters:
        `col` - the column to remove

    - #### removeColumn

          public void removeColumn(int index)

      Remove a column.
      Parameters:
        `index` - the column index

    - #### removeColumnStyleName

          public abstract void removeColumnStyleName(int index,
                                   java.lang.String styleName)

      Remove a style from the `col` element at the specified index.
      Parameters:
        `index` - the column index
        `styleName` - the style name to remove

    - #### setAutoFooterRefreshDisabled

          public void setAutoFooterRefreshDisabled(boolean disabled)

      Enable or disable auto footer refresh when row data is changed. By default, footers are refreshed every time the row data changes in case the headers depend on the current row data. If the headers do not depend on the current row data, you can disable this feature to improve performance.

      Note that headers will still refresh when columns are added or removed, regardless of whether or not this feature is enabled.

    - #### setAutoHeaderRefreshDisabled

          public void setAutoHeaderRefreshDisabled(boolean disabled)

      Enable or disable auto header refresh when row data is changed. By default, headers are refreshed every time the row data changes in case the footers depend on the current row data. If the footers do not depend on the current row data, you can disable this feature to improve performance.

      Note that footers will still refresh when columns are added or removed, regardless of whether or not this feature is enabled.

    - #### setColumnWidth

          public void setColumnWidth(Column<T,?> column,
                            java.lang.String width)

      Set the width of a `Column`. The width will persist with the column and takes precedence of any width set via `setColumnWidth(int, String)`.
      Parameters:
        `column` - the column
        `width` - the width of the column

    - #### setColumnWidth

          public void setColumnWidth(Column<T,?> column,
                            double width,
                            Style.Unit unit)

      Set the width of a `Column`. The width will persist with the column and takes precedence of any width set via `#setColumnWidth(int, double, Unit)`.
      Parameters:
        `column` - the column
        `width` - the width of the column
        `unit` - the `Style.Unit` of measurement

    - #### setColumnWidth

          public void setColumnWidth(int column,
                            double width,
                            Style.Unit unit)

      Set the width of a `Column`.
      Parameters:
        `column` - the column
        `width` - the width of the column
        `unit` - the `Style.Unit` of measurement

    - #### setColumnWidth

          public void setColumnWidth(int column,
                            java.lang.String width)

      Set the width of a `Column`.
      Parameters:
        `column` - the column
        `width` - the width of the column

    - #### setEmptyTableWidget

          public void setEmptyTableWidget(Widget widget)

      Set the widget to display when the table has no rows.
      Parameters:
        `widget` - the empty table widget, or null to disable

    - #### setFooterBuilder

          public void setFooterBuilder(FooterBuilder<T> builder)

      Set the `HeaderBuilder` used to build the footer section of the table.

    - #### setHeaderBuilder

          public void setHeaderBuilder(HeaderBuilder<T> builder)

      Set the `HeaderBuilder` used to build the header section of the table.

    - #### setKeyboardSelectedColumn

          public final void setKeyboardSelectedColumn(int column)

      Set the keyboard selected column index.

      If keyboard selection is disabled, this method does nothing.

      If the keyboard selected column is greater than the number of columns in the keyboard selected row, the last column in the row is selected, but the column index is remembered.

      Parameters:
        `column` - the column index, greater than or equal to zero

    - #### setKeyboardSelectedColumn

          public void setKeyboardSelectedColumn(int column,
                                       boolean stealFocus)

      Set the keyboard selected column index and optionally focus on the new cell.
      Parameters:
        `column` - the column index, greater than or equal to zero
        `stealFocus` - true to focus on the new column
      See Also:
        `setKeyboardSelectedColumn(int)`

    - #### setKeyboardSelectedRow

          public void setKeyboardSelectedRow(int row,
                                    boolean stealFocus)

      Description copied from class: `AbstractHasData`
      Set the keyboard selected row and optionally focus on the new row.
      Overrides:
        `setKeyboardSelectedRow` in class `AbstractHasData<T>`
      Parameters:
        `row` - the row index relative to the page start
        `stealFocus` - true to focus on the new row
      See Also:
        `AbstractHasData.setKeyboardSelectedRow(int)`

    - #### setKeyboardSelectedRow

          public void setKeyboardSelectedRow(int row,
                                    int subrow,
                                    boolean stealFocus)

      Set the keyboard selected row and subrow, optionally focus on the new row.
      Parameters:
        `row` - the row index relative to the page start
        `subrow` - the row index of the child row
        `stealFocus` - true to focus on the new row
      See Also:
        `AbstractHasData.setKeyboardSelectedRow(int)`

    - #### setLoadingIndicator

          public void setLoadingIndicator(Widget widget)

      Set the widget to display when the data is loading.
      Parameters:
        `widget` - the loading indicator, or null to disable

    - #### setRowStyles

          public void setRowStyles(RowStyles<T> rowStyles)

      Sets the object used to determine how a row is styled; the change will take effect the next time that the table is rendered.
      Parameters:
        `rowStyles` - a `RowStyles` object

    - #### setSkipRowHoverCheck

          public void setSkipRowHoverCheck(boolean skipRowHoverCheck)

      Sets the skipRowHoverCheck flag. If set, the CellTable will not check for row-level hover events (MOUSEOVER and MOUSEOUT).
      Parameters:
        `skipRowHoverCheck` - the new flag value

    - #### setSkipRowHoverFloatElementCheck

          public void setSkipRowHoverFloatElementCheck(boolean skipRowHoverFloatElementCheck)

      Sets the skipRowHoverFloatElementCheck flag. If set, the CellTable will not not check for floating (fixed position) elements over the hovered row.
      Parameters:
        `skipRowHoverFloatElementCheck` - the new flag value

    - #### setSkipRowHoverStyleUpdate

          public void setSkipRowHoverStyleUpdate(boolean skipRowHoverStyleUpdate)

      Sets the skipRowHoverStyleUpdate flag. If set, the CellTable will not update the row's style on row-level hover events (MOUSEOVER and MOUSEOUT).
      Parameters:
        `skipRowHoverCheck` - the new flag value

    - #### setTableBuilder

          public void setTableBuilder(CellTableBuilder<T> tableBuilder)

      Specify the `CellTableBuilder` that will be used to render the row values into the table.

    - #### convertToElements

          protected Element convertToElements(SafeHtml html)

      Description copied from class: `AbstractHasData`
      Convert the specified HTML into DOM elements and return the parent of the DOM elements.
      Overrides:
        `convertToElements` in class `AbstractHasData<T>`
      Parameters:
        `html` - the HTML to convert
      Returns:
        the parent element

    - #### dependsOnSelection

          protected boolean dependsOnSelection()

      Description copied from class: `AbstractHasData`
      Check whether or not the cells in the view depend on the selection state.
      Specified by:
        `dependsOnSelection` in class `AbstractHasData<T>`
      Returns:
        true if cells depend on selection, false if not

    - #### doSetColumnWidth

          protected abstract void doSetColumnWidth(int column,
                              java.lang.String width)

      Set the width of a column.
      Parameters:
        `column` - the column index
        `width` - the width, or null to clear the width

    - #### doSetHeaderVisible

          protected abstract void doSetHeaderVisible(boolean isFooter,
                                boolean isVisible)

      Show or hide a header section.
      Parameters:
        `isFooter` - true for the footer, false for the header
        `isVisible` - true to show, false to hide

    - #### getChildContainer

          protected Element getChildContainer()

      Description copied from class: `AbstractHasData`
      Return the element that holds the rendered cells.
      Specified by:
        `getChildContainer` in class `AbstractHasData<T>`
      Returns:
        the container `Element`

    - #### getChildElement

          protected TableRowElement getChildElement(int row)

      Get the element that represents the specified index.

      The row element may not be the same as the TR element at the specified index if some row values are rendered with additional rows.

      Overrides:
        `getChildElement` in class `AbstractHasData<T>`
      Parameters:
        `row` - the row index, relative to the page start
      Returns:
        the row element, or null if it doesn't exists
      Throws:
        `java.lang.IndexOutOfBoundsException` - if the row index is outside of the current page

    - #### getKeyboardSelectedElement

          protected Element getKeyboardSelectedElement()

      Description copied from class: `AbstractHasData`
      Get the element that has keyboard selection.
      Specified by:
        `getKeyboardSelectedElement` in class `AbstractHasData<T>`
      Returns:
        the keyboard selected element

    - #### getRealColumnCount

          protected int getRealColumnCount()

      Get the real column count, which is the greater of the number of Columns or the maximum index of a column with a defined column width.

    - #### getTableBodyElement

          protected abstract TableSectionElement getTableBodyElement()

      Get the tbody element that contains the render row values.

    - #### getTableFootElement

          protected abstract TableSectionElement getTableFootElement()

      Get the tfoot element that contains the footers.

    - #### getTableHeadElement

          protected abstract TableSectionElement getTableHeadElement()

      Get the thead element that contains the headers.

    - #### isKeyboardNavigationSuppressed

          protected boolean isKeyboardNavigationSuppressed()

      Description copied from class: `AbstractHasData`
      Check if keyboard navigation is being suppressed, such as when the user is editing a cell.
      Specified by:
        `isKeyboardNavigationSuppressed` in class `AbstractHasData<T>`
      Returns:
        true if suppressed, false if not

    - #### onBlur

          protected void onBlur()

      Description copied from class: `AbstractHasData`
      Called when the widget is blurred.
      Overrides:
        `onBlur` in class `AbstractHasData<T>`

    - #### onBrowserEvent2

          protected void onBrowserEvent2(Event event)

      Description copied from class: `AbstractHasData`
      Called after `AbstractHasData.onBrowserEvent(Event)` completes.
      Overrides:
        `onBrowserEvent2` in class `AbstractHasData<T>`
      Parameters:
        `event` - the event that was fired

    - #### onFocus

          protected void onFocus()

      Description copied from class: `AbstractHasData`
      Called when the widget is focused.
      Overrides:
        `onFocus` in class `AbstractHasData<T>`

    - #### refreshColumnWidths

          protected void refreshColumnWidths()

    - #### renderRowValues

          @Deprecated
          protected void renderRowValues(SafeHtmlBuilder sb,
                                        java.util.List<T> values,
                                        int start,
                                        SelectionModel<? super T> selectionModel)

      Deprecated. as of GWT 2.5, use a `CellTableBuilder` to customize the table structure instead
      Throws an `UnsupportedOperationException`.
      Specified by:
        `renderRowValues` in class `AbstractHasData<T>`
      Parameters:
        `sb` - the `SafeHtmlBuilder` to render into
        `values` - the row values
        `start` - the absolute start index of the values
        `selectionModel` - the `SelectionModel`
      See Also:
        `renderRowValuesLegacy(SafeHtmlBuilder, List, int, SelectionModel)`

    - #### renderRowValuesLegacy

          @Deprecated
          protected final void renderRowValuesLegacy(SafeHtmlBuilder sb,
                                              java.util.List<T> values,
                                              int start,
                                              SelectionModel<? super T> selectionModel)

      Deprecated. as of GWT 2.5, use a `CellTableBuilder` to customize the table structure instead
      Render all row values into the specified `SafeHtmlBuilder`.

      This method is here for legacy reasons, to support subclasses that call `renderRowValues(SafeHtmlBuilder, List, int, SelectionModel)`.

      Parameters:
        `sb` - the `SafeHtmlBuilder` to render into
        `values` - the row values
        `start` - the absolute start index of the values
        `selectionModel` - the `SelectionModel`

    - #### replaceAllChildren

          protected void replaceAllChildren(java.util.List<T> values,
                                SafeHtml html)

      Description copied from class: `AbstractHasData`
      Replace all children with the specified html.
      Overrides:
        `replaceAllChildren` in class `AbstractHasData<T>`
      Parameters:
        `values` - the values of the new children
        `html` - the html to render, or null if `AbstractHasData.renderRowValues(SafeHtmlBuilder, List, int, SelectionModel)` throws an `UnsupportedOperationException`

    - #### replaceChildren

          protected void replaceChildren(java.util.List<T> values,
                             int start,
                             SafeHtml html)

      Description copied from class: `AbstractHasData`
      Convert the specified HTML into DOM elements and replace the existing elements starting at the specified index. If the number of children specified exceeds the existing number of children, the remaining children should be appended.
      Overrides:
        `replaceChildren` in class `AbstractHasData<T>`
      Parameters:
        `values` - the values of the new children
        `start` - the start index to be replaced, relative to the page start
        `html` - the html to render, or null if `AbstractHasData.renderRowValues(SafeHtmlBuilder, List, int, SelectionModel)` throws an `UnsupportedOperationException`

    - #### resetFocusOnCell

          protected boolean resetFocusOnCell()

      Description copied from class: `AbstractHasData`
      Reset focus on the currently focused cell.
      Specified by:
        `resetFocusOnCell` in class `AbstractHasData<T>`
      Returns:
        true if focus is taken, false if not

    - #### setKeyboardSelected

          protected void setKeyboardSelected(int index,
                                 boolean selected,
                                 boolean stealFocus)

      Description copied from class: `AbstractHasData`
      Update an element to reflect its keyboard selected state.
      Specified by:
        `setKeyboardSelected` in class `AbstractHasData<T>`
      Parameters:
        `index` - the index of the element
        `selected` - true if selected, false if not
        `stealFocus` - true if the row should steal focus, false if not

    - #### getColumnWidth

          java.lang.String getColumnWidth(int columnIndex)

      Get the column width. Associating a width with a `Column` takes precedence over setting the width of a column index.
      Parameters:
        `columnIndex` - the column index
      Returns:
        the column width, or null if none specified

    - #### getSubRowElement

          TableRowElement getSubRowElement(int absRow,
                                         int subrow)

      Get a subrow element given the index of the row value and the sub row index.
      Parameters:
        `absRow` - the absolute row value index
        `subrow` - the index of the subrow beneath the row.
      Returns:
        the row element, or null if not found