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

import java.math.BigDecimal
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
	
	Canvas viewportCanvas
	
	override paintLayer(ViewportLayer viewportLayer, PixelArea layerPaintArea, GraphicsContext gc) {
		val swtGC = gc as SWTGraphicsContext
		
		viewportLayer.visiblePixelRectangle = new PixelRectangle(new BigDecimal(0), new BigDecimal(0), layerPaintArea.width, layerPaintArea.height)
		
		if (viewportCanvas == null) {
			viewportCanvas = new Canvas(swtGC.SWTComposite, SWT::H_SCROLL.bitwiseOr(SWT::V_SCROLL))
			
			// Paint listener
			
			viewportCanvas.addPaintListener([ event |
				val swtBounds = viewportCanvas.bounds
				defaultPainter.paintLayer(viewportLayer, new PixelArea(swtBounds.width, swtBounds.height), new SWTGraphicsContext(viewportCanvas, event.gc))
			])
			
			// 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 |
				println("resize!")
				// Horizontal
				viewportLayer.horizontalAxis.handleResize
				horizontalScrollBarHandler.recalculateScrollBarSize
				// Vertical
				viewportLayer.verticalAxis.handleResize
				verticalScrollBarHandler.recalculateScrollBarSize
			])
			
			resizeViewportCanvas(swtGC)
			
		} else
			resizeViewportCanvas(swtGC)
	}
	
	def resizeViewportCanvas(SWTGraphicsContext 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)
	}
	
}
