| package org.eclipse.nebula.widgets.nattable.renderer.swt |
| |
| 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.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) |
| |
| @Inject extension Injector |
| @Inject extension PainterFactory |
| |
| Layer layer |
| |
| new(Composite parent) { |
| this(parent, DEFAULT_STYLE_OPTIONS) |
| } |
| |
| new(Composite parent, int style) { |
| super(parent, style) |
| } |
| |
| 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 swtGC) { |
| val paintArea = new PixelArea(bounds.width, bounds.height) |
| val gc = new SWTGraphicsContext(this, swtGC) |
| layer?.layerPainter?.paintLayer(layer, paintArea, gc) |
| } |
| |
| } |