package org.eclipse.nebula.widgets.nattable.renderer.javafx

import javafx.beans.value.ObservableValue
import javafx.scene.canvas.Canvas
import javax.inject.Inject
import org.eclipse.nebula.widgets.nattable.core.geometry.PixelArea
import org.eclipse.nebula.widgets.nattable.core.layer.Layer
import org.eclipse.nebula.widgets.nattable.renderer.javafx.graphics.JavaFXGraphicsContext
import org.eclipse.nebula.widgets.nattable.core.graphics.LayerPainterFactory

/**
 * A JavaFX component that renders a NatTable Layer.
 */
class JavaFXNatTable extends Canvas {
	
	@Inject extension LayerPainterFactory
	
	Layer layer
	
	def Layer getLayer() { layer }
	
	def void setLayer(Layer layer) {
		this.layer = layer
		
		paintLayer
		
        boundsInLocalProperty.addListener([ ObservableValue<?> observable, Object oldValue, Object newValue |
        	paintLayer
        ])
	}
	
	def private paintLayer() {
		val paintArea = new PixelArea(boundsInLocal.width, boundsInLocal.height)
		val gc = new JavaFXGraphicsContext(this.graphicsContext2D)
		layer?.layerPainter?.paintLayer(layer, paintArea, gc)
	}
	
}