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

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, PixelRectangle paintBounds, GraphicsContext gc) {
		val swtGC = gc as SWTGraphicsContext
		
		viewportLayer.visiblePixelRectangle = paintBounds
		
		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 PixelRectangle(swtBounds.x, swtBounds.y, 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 |
				// Horizontal
				viewportLayer.horizontalAxis.handleResize
				horizontalScrollBarHandler.recalculateScrollBarSize
				// Vertical
				viewportLayer.verticalAxis.handleResize
				verticalScrollBarHandler.recalculateScrollBarSize
			])
		}
		
		// Resize viewport canvas
		
		val clipBounds = gc.clipBounds
		viewportCanvas.bounds = new Rectangle(swtGC.getXOffset + clipBounds.x, swtGC.getYOffset + clipBounds.y, clipBounds.width, clipBounds.height)
	}
	
}
