package org.eclipse.nebula.widgets.nattable.renderer.swt.layer.viewport

import java.util.HashMap
import org.eclipse.nebula.widgets.nattable.core.geometry.PixelArea
import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRectangle
import org.eclipse.nebula.widgets.nattable.core.graphics.GraphicsContext
import org.eclipse.nebula.widgets.nattable.core.layer.LayerPainter
import org.eclipse.nebula.widgets.nattable.core.layer.impl.GridLineCellLayerPainter
import org.eclipse.nebula.widgets.nattable.core.layer.impl.viewport.ViewportAxis
import org.eclipse.nebula.widgets.nattable.core.layer.impl.viewport.ViewportLayer
import org.eclipse.nebula.widgets.nattable.renderer.swt.graphics.SWTGraphicsContext
import org.eclipse.swt.SWT
import org.eclipse.swt.graphics.Rectangle
import org.eclipse.swt.widgets.Canvas

class SWTViewportLayerPainter implements LayerPainter<ViewportLayer> {
	
	val defaultPainter = new GridLineCellLayerPainter
	
	val viewportLayerToCanvasMap = new HashMap<ViewportLayer, Canvas>
	
	/**
	 * Constructs an SWT Canvas object onto which the ViewportLayer is painted. The same Canvas instance will always be returned
	 * when called with the same ViewportLayer instance. Different ViewportLayer instances will return different Canvas instances.
	 */
	override paintLayer(ViewportLayer viewportLayer, PixelArea layerPaintArea, GraphicsContext gc) {
		viewportLayer.visiblePixelRectangle = new PixelRectangle(0, 0, layerPaintArea.width, layerPaintArea.height)
		
		val swtGC = gc as SWTGraphicsContext
		val viewportCanvas = viewportLayerToCanvasMap.get(viewportLayer) ?: viewportLayer.createViewportCanvas(swtGC)
		
		val clipBounds = swtGC.clipBounds
		viewportCanvas.bounds = new Rectangle((swtGC.getXOffset + clipBounds.x) as int, (swtGC.getYOffset + clipBounds.y) as int, clipBounds.width.intValue, clipBounds.height.intValue)
	}
	
	def private createViewportCanvas(ViewportLayer viewportLayer, SWTGraphicsContext swtGC) {
		val viewportCanvas = new Canvas(swtGC.SWTComposite, SWT::H_SCROLL.bitwiseOr(SWT::V_SCROLL))
		viewportLayerToCanvasMap.put(viewportLayer, viewportCanvas)
		
		// Dispose listener
		viewportCanvas.addDisposeListener([ viewportLayerToCanvasMap.remove(viewportLayer) ])
		
		// Paint listener
		viewportCanvas.addPaintListener([ event |
			val swtBounds = viewportCanvas.bounds
			defaultPainter.paintLayer(viewportLayer, new PixelArea(swtBounds.width, swtBounds.height), new SWTGraphicsContext(viewportCanvas, event.gc))
		])
		
		viewportLayer.addEventListener([ event | viewportCanvas.redraw ])
		
		// ScrollBar handlers
		val horizontalScrollBarHandler = new ScrollBarHandler(viewportCanvas.horizontalBar, viewportLayer.horizontalAxis as ViewportAxis)
		val verticalScrollBarHandler = new ScrollBarHandler(viewportCanvas.verticalBar, viewportLayer.verticalAxis as ViewportAxis)
		
		viewportCanvas.horizontalBar.addListener(SWT::Selection, horizontalScrollBarHandler)
		viewportCanvas.verticalBar.addListener(SWT::Selection, verticalScrollBarHandler)
		
		viewportCanvas.horizontalBar.addDisposeListener([ viewportCanvas.horizontalBar.removeListener(SWT::Selection, horizontalScrollBarHandler) ])
		viewportCanvas.verticalBar.addDisposeListener([ viewportCanvas.verticalBar.removeListener(SWT::Selection, verticalScrollBarHandler) ])
		
		// Resize listener
		viewportCanvas.addListener(SWT::Resize, [ event |
			// Horizontal
			viewportLayer.horizontalAxis.handleResize
			horizontalScrollBarHandler.recalculateScrollBarSize
			// Vertical
			viewportLayer.verticalAxis.handleResize
			verticalScrollBarHandler.recalculateScrollBarSize
		])
		
		viewportCanvas
	}
	
}
