| package org.eclipse.nebula.widgets.nattable.renderer.swt |
| |
| import com.google.inject.Guice |
| import com.google.inject.Injector |
| import javax.inject.Inject |
| import org.eclipse.nebula.widgets.nattable.core.geometry.PixelArea |
| 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 |
| @Inject extension PainterFactory |
| |
| Layer layer |
| |
| new(Composite parent) { |
| this(parent, DEFAULT_STYLE_OPTIONS) |
| } |
| |
| new(Composite parent, int style) { |
| super(parent, style) |
| |
| _injector = Guice::createInjector.createChildInjector([ binder | |
| binder.bind(typeof(PainterFactory)).toInstance(new SWTPainterFactory) |
| ]) |
| this.injectMembers |
| } |
| |
| def getInjector() { _injector } |
| |
| 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) |
| } |
| |
| def private paintLayer(GC gc) { |
| layer?.layerPainter?.paintLayer(layer, new PixelArea(bounds.width, bounds.height), new SWTGraphicsContext(this, gc)) |
| } |
| |
| } |