swt viewport basic functionality
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/geometry/PixelArea.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/geometry/PixelArea.xtend
index a7e17f9..fe547bf 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/geometry/PixelArea.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/geometry/PixelArea.xtend
@@ -3,21 +3,9 @@
/**
* Represents a two-dimensional pixel area.
*/
-class PixelArea {
+interface PixelArea {
- val PixelRange horizontalPixelRange
- val PixelRange verticalPixelRange
-
- new(int xPixel, int yPixel, int pixelWidth, int pixelHeight) {
- this.horizontalPixelRange = new PixelRange(xPixel, pixelWidth)
- this.verticalPixelRange = new PixelRange(yPixel, pixelHeight)
- }
-
- def getHorizontalPixelRange() { horizontalPixelRange }
- def getVerticalPixelRange() { verticalPixelRange }
-
- override toString() {
- '''[«class.name» x: «horizontalPixelRange.startPixel», y: «verticalPixelRange.startPixel», width: «horizontalPixelRange.pixelSize», height: «verticalPixelRange.pixelSize»]'''
- }
+ def PixelRange getHorizontalPixelRange()
+ def PixelRange getVerticalPixelRange()
}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/geometry/PixelRange.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/geometry/PixelRange.xtend
index 3b361d9..ab873c2 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/geometry/PixelRange.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/geometry/PixelRange.xtend
@@ -3,25 +3,10 @@
/**
* Represents a range of pixels along some linear dimension (e.g. width, height in pixels).
*/
-class PixelRange {
+interface PixelRange {
- val int startPixel
- val int endPixel
- val int pixelSize
-
- new(int startPixel, int pixelSize) {
- this.startPixel = startPixel
- this.pixelSize = pixelSize
-
- this.endPixel = startPixel + pixelSize
- }
-
- def getStartPixel() { startPixel }
- def getEndPixel() { endPixel }
- def getPixelSize() { pixelSize }
-
- override toString() {
- '''[«class.name» startPixel: «startPixel», endPixel: «endPixel», size: «pixelSize»]'''
- }
+ def int getStartPixel()
+ def int getEndPixel()
+ def int getPixelSize()
}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxis.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxis.xtend
index f4f5617..5e9e11d 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxis.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxis.xtend
@@ -34,7 +34,7 @@
override getSegmentCount() {
val endSegmentPosition = underlyingAxis.getSegmentPositionByPixelLocation(visiblePixelRange.endPixel)
- endSegmentPosition - originSegmentPosition
+ endSegmentPosition - originSegmentPosition + 1
}
override getStartPixelOfSegmentPosition(int segmentPosition) {
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTNatTable.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTNatTable.xtend
index fd3e18b..1c8d84d 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTNatTable.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTNatTable.xtend
@@ -14,14 +14,17 @@
static val int DEFAULT_STYLE_OPTIONS = SWT::NO_BACKGROUND.bitwiseOr(SWT::NO_REDRAW_RESIZE).bitwiseOr(SWT::DOUBLE_BUFFERED).bitwiseOr(SWT::V_SCROLL).bitwiseOr(SWT::H_SCROLL)
static val defaultLayerRenderer = new GridLineCellLayerRenderer
- val Layer layer
+ Layer layer
- new(Layer layer, Composite parent) {
- this(layer, parent, DEFAULT_STYLE_OPTIONS)
+ new(Composite parent) {
+ this(parent, DEFAULT_STYLE_OPTIONS)
}
- new(Layer layer, Composite parent, int style) {
+ new(Composite parent, int style) {
super(parent, style)
+ }
+
+ def void setLayer(Layer layer) {
this.layer = layer
addPaintListener([ PaintEvent event | renderLayer(event.gc) ])
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/geometry/SWTControlHorizontalPixelRange.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/geometry/SWTControlHorizontalPixelRange.xtend
new file mode 100644
index 0000000..0ed5500
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/geometry/SWTControlHorizontalPixelRange.xtend
@@ -0,0 +1,18 @@
+package org.eclipse.nebula.widgets.nattable.renderer.swt.geometry
+
+import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRange
+import org.eclipse.swt.widgets.Control
+
+class SWTControlHorizontalPixelRange implements PixelRange {
+
+ val Control control
+
+ new(Control control) {
+ this.control = control
+ }
+
+ override getStartPixel() { control.bounds.x }
+ override getPixelSize() { control.bounds.width }
+ override getEndPixel() { startPixel + pixelSize }
+
+}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/geometry/SWTControlPixelArea.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/geometry/SWTControlPixelArea.xtend
new file mode 100644
index 0000000..060e742
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/geometry/SWTControlPixelArea.xtend
@@ -0,0 +1,22 @@
+package org.eclipse.nebula.widgets.nattable.renderer.swt.geometry
+
+import org.eclipse.nebula.widgets.nattable.core.geometry.PixelArea
+import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRange
+import org.eclipse.swt.widgets.Control
+
+class SWTControlPixelArea implements PixelArea {
+
+ val Control control
+ val PixelRange horizontalPixelRange
+ val PixelRange verticalPixelRange
+
+ new(Control control) {
+ this.control = control
+ horizontalPixelRange = new SWTControlHorizontalPixelRange(control)
+ verticalPixelRange = new SWTControlVerticalPixelRange(control)
+ }
+
+ override getHorizontalPixelRange() { horizontalPixelRange }
+ override getVerticalPixelRange() { verticalPixelRange }
+
+}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/geometry/SWTControlVerticalPixelRange.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/geometry/SWTControlVerticalPixelRange.xtend
new file mode 100644
index 0000000..2f35be1
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/geometry/SWTControlVerticalPixelRange.xtend
@@ -0,0 +1,18 @@
+package org.eclipse.nebula.widgets.nattable.renderer.swt.geometry
+
+import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRange
+import org.eclipse.swt.widgets.Control
+
+class SWTControlVerticalPixelRange implements PixelRange {
+
+ val Control control
+
+ new(Control control) {
+ this.control = control
+ }
+
+ override getStartPixel() { control.bounds.y }
+ override getPixelSize() { control.bounds.height }
+ override getEndPixel() { startPixel + pixelSize }
+
+}
\ No newline at end of file
diff --git a/NatTable/test/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTExample.xtend b/NatTable/test/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTExample.xtend
index 2606f53..e411bbd 100644
--- a/NatTable/test/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTExample.xtend
+++ b/NatTable/test/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTExample.xtend
@@ -1,6 +1,8 @@
package org.eclipse.nebula.widgets.nattable.renderer.swt
import org.eclipse.nebula.widgets.nattable.core.layer.impl.DummyLayer
+import org.eclipse.nebula.widgets.nattable.core.layer.impl.viewport.ViewportLayer
+import org.eclipse.nebula.widgets.nattable.renderer.swt.geometry.SWTControlPixelArea
import org.eclipse.swt.SWT
import org.eclipse.swt.layout.FillLayout
import org.eclipse.swt.widgets.Display
@@ -20,7 +22,7 @@
shell.setText("NatTable -> SWT")
// Create example control
- val natTable = new SWTNatTable(layer, shell)
+ val natTable = shell.SWTNatTable
// Start
shell.open
@@ -38,8 +40,13 @@
display.dispose
}
- static def getLayer() {
- new DummyLayer(4, 4, 200, 100)
+ static def getSWTNatTable(Shell shell) {
+ val natTable = new SWTNatTable(shell)
+
+ val layer = new ViewportLayer(new DummyLayer(4, 4, 200, 100), new SWTControlPixelArea(natTable))
+ natTable.layer = layer
+
+ natTable
}
}
\ No newline at end of file