/*******************************************************************************
* Copyright (c) 2012, 2015 Original authors and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Original authors and others - initial API and implementation
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.grid.cell;
import java.util.Arrays;
import java.util.Collection;
import org.eclipse.nebula.widgets.nattable.grid.GridRegion;
import org.eclipse.nebula.widgets.nattable.grid.layer.config.DefaultRowStyleConfiguration;
import org.eclipse.nebula.widgets.nattable.layer.ILayer;
import org.eclipse.nebula.widgets.nattable.layer.LabelStack;
import org.eclipse.nebula.widgets.nattable.layer.cell.IConfigLabelProvider;
/**
* Applies 'odd'/'even' labels to all the rows. These labels are the used to
* apply color to alternate rows.
*
* @see DefaultRowStyleConfiguration
*/
public class AlternatingRowConfigLabelAccumulator implements IConfigLabelProvider {
public static final String ODD_ROW_CONFIG_TYPE = "ODD_" + GridRegion.BODY; //$NON-NLS-1$
public static final String EVEN_ROW_CONFIG_TYPE = "EVEN_" + GridRegion.BODY; //$NON-NLS-1$
private ILayer layer;
/**
* Creates an AlternatingRowConfigLabelAccumulator that operates on row
* positions. In several layer compositions, this will lead to jumping
* alternating colors, as e.g. the ViewportLayer updates row positions on
* scrolling.
*/
public AlternatingRowConfigLabelAccumulator() {}
/**
* Creates an AlternatingRowConfigLabelAccumulator that operates on row
* indices. To achieve that it uses the given layer to calculate the row
* index by given row position.
*
* @param layer
* The layer that should be used for row index transformation,
* typically the ViewportLayer or body layer stack.
*/
public AlternatingRowConfigLabelAccumulator(ILayer layer) {
this.layer = layer;
}
@Override
public void accumulateConfigLabels(LabelStack configLabels, int columnPosition, int rowPosition) {
int row = rowPosition;
if (this.layer != null) {
row = this.layer.getRowIndexByPosition(rowPosition);
}
configLabels.addLabel((row % 2 == 0 ? EVEN_ROW_CONFIG_TYPE : ODD_ROW_CONFIG_TYPE));
}
/**
* {@inheritDoc}
*
* @since 1.4
*/
@Override
public Collection<String> getProvidedLabels() {
return Arrays.asList(ODD_ROW_CONFIG_TYPE, EVEN_ROW_CONFIG_TYPE);
}
}