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

import org.eclipse.nebula.widgets.nattable.core.big.layer.BigLayer
import org.eclipse.nebula.widgets.nattable.core.big.layer.impl.NotSoBigLayer
import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRectangle
import org.eclipse.nebula.widgets.nattable.core.layer.Layer
import org.eclipse.nebula.widgets.nattable.core.layer.impl.AbstractLayer

class ViewportLayer extends AbstractLayer {

	BigLayer underlyingLayer
	ViewportAxis horizontalAxis
	ViewportAxis verticalAxis
	
	new() {}
	
	new(Layer underlyingLayer) {
		this(new NotSoBigLayer(underlyingLayer))
	}
	
	new(BigLayer underlyingLayer) {
		setUnderlyingLayer(underlyingLayer)
	}
	
	def void setUnderlyingLayer(Layer underlyingLayer) {
		setUnderlyingLayer(new NotSoBigLayer(underlyingLayer))
	}
	
	def void setUnderlyingLayer(BigLayer underlyingLayer) {
		this.underlyingLayer = underlyingLayer
		this.underlyingLayer.addEventListener(this)
		
		horizontalAxis = new ViewportAxis(underlyingLayer.horizontalAxis, [| fireEvent(new ScrollEvent) ])
		verticalAxis = new ViewportAxis(underlyingLayer.verticalAxis, [| fireEvent(new ScrollEvent) ])
	}
	
	def setHorizontalAxis(ViewportAxis horizontalAxis) { this.horizontalAxis = horizontalAxis }
	def setVerticalAxis(ViewportAxis verticalAxis) { this.verticalAxis = verticalAxis }
	
	def void setVisiblePixelRectangle(PixelRectangle visiblePixelRectangle) {
		horizontalAxis.visiblePixelSize = visiblePixelRectangle.width
		verticalAxis.visiblePixelSize = visiblePixelRectangle.height
	}
	
	def BigLayer getUnderlyingLayer() { underlyingLayer }
	
	// Layer interface
	
	override ViewportAxis getHorizontalAxis() { horizontalAxis }
	override ViewportAxis getVerticalAxis() { verticalAxis }
	
	override getCell(int columnPosition, int rowPosition) {
		new ViewportCell(this, columnPosition, rowPosition)
	}
	
}