private int findInteractiveColumn(int start, boolean reverse) {
            if (!table.isInteractive) {
                return 0;
            } else if (reverse) {
                for (int i = start - 1; i >= 0; i--) {
                    if (isColumnInteractive(table.getColumn(i))) {
                        return i;
                    }
                }
                // Wrap to the end.
                for (int i = table.getColumnCount() - 1; i >= start; i--) {
                    if (isColumnInteractive(table.getColumn(i))) {
                        return i;
                    }
                }
            } else {
                for (int i = start + 1; i < table.getColumnCount(); i++) {
                    if (isColumnInteractive(table.getColumn(i))) {
                        return i;
                    }
                }
                // Wrap to the start.
                for (int i = 0; i <= start; i++) {
                    if (isColumnInteractive(table.getColumn(i))) {
                        return i;
                    }
                }
            }
            return 0;
        }
Find and return the index of the next interactive column. If no column is
interactive, 0 is returned. If the start index is the only interactive
column, it is returned.

@param start   the start index, exclusive unless it is the only option
@param reverse true to do a reverse search
@return the interactive column index, or 0 if not interactive
stroom-core-client-widget/src/main/java/com/google/gwt/user/cellview/client/AbstractCellTable.java