@Deprecated
    protected final void renderRowValuesLegacy(SafeHtmlBuilder sb, List<T> values, int start,
                                               SelectionModel<? super T> selectionModel) {
        int keyboardSelectedRow = getKeyboardSelectedRow() + getPageStart();
        String evenRowStyle = style.evenRow();
        String oddRowStyle = style.oddRow();
        String cellStyle = style.cell();
        String evenCellStyle = " " + style.evenRowCell();
        String oddCellStyle = " " + style.oddRowCell();
        String firstColumnStyle = " " + style.firstColumn();
        String lastColumnStyle = " " + style.lastColumn();
        String selectedRowStyle = " " + style.selectedRow();
        String selectedCellStyle = " " + style.selectedRowCell();
        int columnCount = columns.size();
        int length = values.size();
        int end = start + length;
        for (int i = start; i < end; i++) {
            T value = values.get(i - start);
            boolean isSelected =
                    (selectionModel == null || value == null)
                            ? false
                            : selectionModel.isSelected(value);
            boolean isEven = i % 2 == 0;
            String trClasses = isEven
                    ? evenRowStyle
                    : oddRowStyle;
            if (isSelected) {
                trClasses += selectedRowStyle;
            }

            if (rowStyles != null) {
                String extraRowStyles = rowStyles.getStyleNames(value, i);
                if (extraRowStyles != null) {
                    trClasses += " ";
                    trClasses += extraRowStyles;
                }
            }

            SafeHtmlBuilder trBuilder = new SafeHtmlBuilder();
            int curColumn = 0;
            for (Column<T, ?> column : columns) {
                String tdClasses = cellStyle;
                tdClasses += isEven
                        ? evenCellStyle
                        : oddCellStyle;
                if (curColumn == 0) {
                    tdClasses += firstColumnStyle;
                }
                if (isSelected) {
                    tdClasses += selectedCellStyle;
                }
                // The first and last column could be the same column.
                if (curColumn == columnCount - 1) {
                    tdClasses += lastColumnStyle;
                }

                // Add class names specific to the cell.
                Context context = new Context(i, curColumn, getValueKey(value));
                String cellStyles = column.getCellStyleNames(context, value);
                if (cellStyles != null) {
                    tdClasses += " " + cellStyles;
                }

                SafeHtmlBuilder cellBuilder = new SafeHtmlBuilder();
                if (value != null) {
                    column.render(context, value, cellBuilder);
                }

                // Build the contents.
                SafeHtml contents = SafeHtmlUtils.EMPTY_SAFE_HTML;
                contents = template.div(cellBuilder.toSafeHtml());

                // Build the cell.
                HorizontalAlignmentConstant hAlign = column.getHorizontalAlignment();
                VerticalAlignmentConstant vAlign = column.getVerticalAlignment();
                if (hAlign != null && vAlign != null) {
                    trBuilder.append(template.tdBothAlign(tdClasses, hAlign.getTextAlignString(), vAlign
                            .getVerticalAlignString(), contents));
                } else if (hAlign != null) {
                    trBuilder.append(template.tdHorizontalAlign(tdClasses, hAlign.getTextAlignString(),
                            contents));
                } else if (vAlign != null) {
                    trBuilder.append(template.tdVerticalAlign(tdClasses, vAlign.getVerticalAlignString(),
                            contents));
                } else {
                    trBuilder.append(template.td(tdClasses, contents));
                }

                curColumn++;
            }

            sb.append(template.tr(trClasses, trBuilder.toSafeHtml()));
        }
    }
Render all row values into the specified {@link SafeHtmlBuilder}.

<p>
This method is here for legacy reasons, to support subclasses that call
{@link #renderRowValues(SafeHtmlBuilder, List, int, SelectionModel)}.
</p>

@param sb             the {@link SafeHtmlBuilder} to render into
@param values         the row values
@param start          the absolute start index of the values
@param selectionModel the {@link SelectionModel}
@deprecated as of GWT 2.5, use a {@link CellTableBuilder} to customize the
table structure instead
stroom-core-client-widget/src/main/java/com/google/gwt/user/cellview/client/AbstractCellTable.java