package org.eclipse.nebula.widgets.nattable.core.layer.impl.header

import org.eclipse.nebula.widgets.nattable.core.layer.LayerDataAccessor
import org.eclipse.nebula.widgets.nattable.core.layer.axis.Axis
import org.eclipse.nebula.widgets.nattable.core.layer.axis.impl.AxisImpl
import org.eclipse.nebula.widgets.nattable.core.layer.cell.impl.LayerDataAccessorCell
import org.eclipse.nebula.widgets.nattable.core.layer.impl.AbstractLayer

/**
 * A layer of width 1 whose cell data comes from its vertical axis.
 */
class RowHeaderLayer extends AbstractLayer {
	
	val Axis horizontalAxis
	Axis verticalAxis
	LayerDataAccessor layerDataAccessor
	
	new() {
		this.horizontalAxis = new AxisImpl(1, 20)
	}
	
	new(Axis verticalAxis, LayerDataAccessor layerDataAccessor) {
		this()
		setVerticalAxis(verticalAxis)
		setLayerDataAccessor(layerDataAccessor)
	}
	
	def void setVerticalAxis(Axis verticalAxis) {
		this.verticalAxis = verticalAxis
		this.verticalAxis.addEventListener(this)
	}
	
	def void setLayerDataAccessor(LayerDataAccessor layerDataAccessor) {
		this.layerDataAccessor = layerDataAccessor
	}
	
	// Layer interface
	
	override getHorizontalAxis() { horizontalAxis }
	override getVerticalAxis() { verticalAxis }
	
	override getCell(long columnPosition, long rowPosition) {
		new LayerDataAccessorCell(this, columnPosition, rowPosition, layerDataAccessor)
	}
	
}