| package org.eclipse.nebula.widgets.nattable.renderer.swt |
| |
| import com.google.inject.Injector |
| import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRectangle |
| import org.eclipse.nebula.widgets.nattable.core.graphics.PainterFactory |
| import org.eclipse.nebula.widgets.nattable.core.layer.Layer |
| import org.eclipse.nebula.widgets.nattable.renderer.swt.event.mode.Mode |
| import org.eclipse.nebula.widgets.nattable.renderer.swt.event.mode.ModeSwitcher |
| import org.eclipse.nebula.widgets.nattable.renderer.swt.event.mode.NormalMode |
| import org.eclipse.nebula.widgets.nattable.renderer.swt.graphics.SWTGraphicsContext |
| import org.eclipse.nebula.widgets.nattable.renderer.swt.graphics.SWTPainterFactory |
| import org.eclipse.swt.SWT |
| import org.eclipse.swt.graphics.GC |
| import org.eclipse.swt.widgets.Canvas |
| import org.eclipse.swt.widgets.Composite |
| |
| class SWTNatTable extends Canvas { |
| |
| static val int DEFAULT_STYLE_OPTIONS = SWT::NO_BACKGROUND.bitwiseOr(SWT::DOUBLE_BUFFERED).bitwiseOr(SWT::NO_REDRAW_RESIZE) |
| |
| extension Injector |
| extension PainterFactory |
| |
| Layer layer |
| |
| new(Composite parent) { |
| this(parent, DEFAULT_STYLE_OPTIONS) |
| } |
| |
| new(Composite parent, int style) { |
| super(parent, style) |
| } |
| |
| def void setInjector(Injector baseInjector) { |
| _painterFactory = baseInjector.getInstance(typeof(SWTPainterFactory)) |
| _injector = baseInjector.createChildInjector([ binder | |
| binder.bind(typeof(PainterFactory)).toInstance(_painterFactory) |
| ]) |
| } |
| |
| def Layer getLayer() { layer } |
| |
| def void setLayer(Layer layer) { |
| this.layer = layer |
| |
| // Event listener |
| |
| layer.addEventListener([ event | redraw ]) |
| |
| // Paint listener |
| |
| addPaintListener([ event | paintLayer(event.gc) ]) |
| |
| // Init mode switcher |
| |
| val modeSwitcher = new ModeSwitcher(this) |
| modeSwitcher.registerMode(Mode::NORMAL, getInstance(typeof(NormalMode))) |
| modeSwitcher.switchToMode(Mode::NORMAL) |
| } |
| |
| private def paintLayer(GC gc) { |
| val paintBounds = new PixelRectangle(bounds.x, bounds.y, bounds.width, bounds.height) |
| layer?.layerPainter?.paintLayer(layer, paintBounds, new SWTGraphicsContext(this, gc)) |
| } |
| |
| } |