extracting Cell interface
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/Cell.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/Cell.xtend
new file mode 100644
index 0000000..109bd94
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/Cell.xtend
@@ -0,0 +1,14 @@
+package org.eclipse.nebula.widgets.nattable.core.cell
+
+import org.eclipse.nebula.widgets.nattable.core.geometry.PositionRectangle
+import org.eclipse.nebula.widgets.nattable.core.layer.Layer
+
+interface Cell {
+
+ def Layer getLayer()
+ def PositionRectangle getPositionBounds()
+
+ def Object getDataValue()
+ def void setDataValue(Object newValue)
+
+}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/CellInvariants.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/CellInvariants.xtend
new file mode 100644
index 0000000..612c542
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/CellInvariants.xtend
@@ -0,0 +1,21 @@
+package org.eclipse.nebula.widgets.nattable.core.cell
+
+import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRectangle
+
+import static extension org.eclipse.nebula.widgets.nattable.core.layer.LayerInvariants.*
+
+class CellInvariants {
+
+ def static getPixelBounds(Cell cell) {
+ val layer = cell.layer
+ val positionBounds = cell.positionBounds
+
+ val startX = layer.getStartXPixelOfColumnPosition(positionBounds.columnPosition)
+ val startY = layer.getStartYPixelOfRowPosition(positionBounds.rowPosition)
+ val endX = layer.getStartXPixelOfColumnPosition(positionBounds.columnPosition + positionBounds.positionWidth)
+ val endY = layer.getStartYPixelOfRowPosition(positionBounds.rowPosition + positionBounds.positionHeight)
+
+ new PixelRectangle(startX, startY, endX - startX, endY - startY)
+ }
+
+}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/LayerDataAccessorCell.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/LayerDataAccessorCell.xtend
new file mode 100644
index 0000000..711a93c
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/LayerDataAccessorCell.xtend
@@ -0,0 +1,37 @@
+package org.eclipse.nebula.widgets.nattable.core.cell
+
+import org.eclipse.nebula.widgets.nattable.core.geometry.PositionRectangle
+import org.eclipse.nebula.widgets.nattable.core.layer.Layer
+import org.eclipse.nebula.widgets.nattable.core.layer.LayerDataAccessor
+
+class LayerDataAccessorCell implements Cell {
+
+ val Layer layer
+ val PositionRectangle positionBounds
+ val LayerDataAccessor layerDataAccessor
+
+ new(Layer layer, int columnPosition, int rowPosition, LayerDataAccessor layerDataAccessor) {
+ this.layer = layer
+ this.positionBounds = new PositionRectangle(columnPosition, rowPosition, 1, 1)
+ this.layerDataAccessor = layerDataAccessor
+ }
+
+ override getLayer() { layer }
+ override getPositionBounds() { positionBounds }
+
+ override getDataValue() {
+ layerDataAccessor.getCellDataValue(
+ positionBounds.originPosition.columnPosition,
+ positionBounds.originPosition.rowPosition
+ )
+ }
+
+ override setDataValue(Object newValue) {
+ layerDataAccessor.setCellDataValue(
+ positionBounds.originPosition.columnPosition,
+ positionBounds.originPosition.rowPosition,
+ newValue
+ )
+ }
+
+}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/ReadOnlyCell.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/ReadOnlyCell.xtend
new file mode 100644
index 0000000..19abaad
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/cell/ReadOnlyCell.xtend
@@ -0,0 +1,26 @@
+package org.eclipse.nebula.widgets.nattable.core.cell
+
+import org.eclipse.nebula.widgets.nattable.core.geometry.PositionRectangle
+import org.eclipse.nebula.widgets.nattable.core.layer.Layer
+
+class ReadOnlyCell implements Cell {
+
+ val Layer layer
+ val PositionRectangle positionBounds
+ val Object dataValue
+
+ new(Layer layer, int columnPosition, int rowPosition, Object dataValue) {
+ this.layer = layer
+ this.positionBounds = new PositionRectangle(columnPosition, rowPosition, 1, 1)
+ this.dataValue = dataValue
+ }
+
+ override getLayer() { layer }
+ override getPositionBounds() { positionBounds }
+ override getDataValue() { dataValue }
+
+ override setDataValue(Object newValue) {
+ throw new UnsupportedOperationException("TODO: auto-generated method stub")
+ }
+
+}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/data/PropertyAccessor.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/data/ObjectPropertyAccessor.xtend
similarity index 76%
rename from NatTable/src/org/eclipse/nebula/widgets/nattable/core/data/PropertyAccessor.xtend
rename to NatTable/src/org/eclipse/nebula/widgets/nattable/core/data/ObjectPropertyAccessor.xtend
index 99d91dd..de40f80 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/data/PropertyAccessor.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/data/ObjectPropertyAccessor.xtend
@@ -1,6 +1,6 @@
package org.eclipse.nebula.widgets.nattable.core.data
-interface PropertyAccessor {
+interface ObjectPropertyAccessor {
def Object getProperty(Object obj, Object propertyId)
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/DummyLayer.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/DummyLayer.xtend
index 9e26f55..fdab9a0 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/DummyLayer.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/DummyLayer.xtend
@@ -2,7 +2,7 @@
import org.eclipse.nebula.widgets.nattable.core.axis.Axis
import org.eclipse.nebula.widgets.nattable.core.axis.DefaultAxis
-import org.eclipse.nebula.widgets.nattable.core.geometry.PositionRectangle
+import org.eclipse.nebula.widgets.nattable.core.cell.ReadOnlyCell
class DummyLayer implements Layer {
@@ -17,16 +17,8 @@
override getHorizontalAxis() { horizontalAxis }
override getVerticalAxis() { verticalAxis }
- override getCellPositionBounds(int columnPosition, int rowPosition) {
- new PositionRectangle(columnPosition, rowPosition, 1, 1)
- }
-
- override getCellDataValue(int columnPosition, int rowPosition) {
- '''Column «columnPosition», Row «rowPosition»'''
- }
-
- override setCellDataValue(int columnPosition, int rowPosition, Object newValue) {
- throw new UnsupportedOperationException("TODO: auto-generated method stub")
+ override getCell(int columnPosition, int rowPosition) {
+ new ReadOnlyCell(this, columnPosition, rowPosition, '''Column «columnPosition», Row «rowPosition»''')
}
}
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/Layer.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/Layer.xtend
index b382761..aaed4cc 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/Layer.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/Layer.xtend
@@ -1,7 +1,7 @@
package org.eclipse.nebula.widgets.nattable.core.layer
import org.eclipse.nebula.widgets.nattable.core.axis.Axis
-import org.eclipse.nebula.widgets.nattable.core.geometry.PositionRectangle
+import org.eclipse.nebula.widgets.nattable.core.cell.Cell
interface Layer {
@@ -12,9 +12,6 @@
// Cell
- def PositionRectangle getCellPositionBounds(int columnPosition, int rowPosition)
-
- def Object getCellDataValue(int columnPosition, int rowPosition)
- def void setCellDataValue(int columnPosition, int rowPosition, Object newValue)
+ def Cell getCell(int columnPosition, int rowPosition)
}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerDataAccessor.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerDataAccessor.xtend
new file mode 100644
index 0000000..8e628b0
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerDataAccessor.xtend
@@ -0,0 +1,8 @@
+package org.eclipse.nebula.widgets.nattable.core.layer
+
+interface LayerDataAccessor {
+
+ def Object getCellDataValue(int columnPosition, int rowPosition)
+ def void setCellDataValue(int columnPosition, int rowPosition, Object newValue)
+
+}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerInvariants.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerInvariants.xtend
index 9c3f326..47e455c 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerInvariants.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerInvariants.xtend
@@ -1,7 +1,5 @@
package org.eclipse.nebula.widgets.nattable.core.layer
-import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRectangle
-
import static extension org.eclipse.nebula.widgets.nattable.core.axis.AxisInvariants.*
/**
@@ -53,19 +51,6 @@
layer.verticalAxis.getSegmentPositionByPixelLocation(yPixel)
}
- // Cell
-
- def static getCellPixelBounds(Layer layer, int columnPosition, int rowPosition) {
- val positionBounds = layer.getCellPositionBounds(columnPosition, rowPosition)
-
- val startX = layer.getStartXPixelOfColumnPosition(positionBounds.columnPosition)
- val startY = layer.getStartYPixelOfRowPosition(positionBounds.rowPosition)
- val endX = layer.getStartXPixelOfColumnPosition(positionBounds.columnPosition + positionBounds.positionWidth)
- val endY = layer.getStartYPixelOfRowPosition(positionBounds.rowPosition + positionBounds.positionHeight)
-
- return new PixelRectangle(startX, startY, endX - startX, endY - startY)
- }
-
// Contains
def static boolean containsCellPosition(Layer layer, int columnPosition, int rowPosition) {
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/ListRowDataLayer.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/ListRowDataLayer.xtend
index 669bb63..54cb127 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/ListRowDataLayer.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/ListRowDataLayer.xtend
@@ -4,8 +4,8 @@
import java.util.List
import org.eclipse.nebula.widgets.nattable.core.axis.Axis
import org.eclipse.nebula.widgets.nattable.core.axis.DefaultAxis
-import org.eclipse.nebula.widgets.nattable.core.data.PropertyAccessor
-import org.eclipse.nebula.widgets.nattable.core.geometry.PositionRectangle
+import org.eclipse.nebula.widgets.nattable.core.cell.ReadOnlyCell
+import org.eclipse.nebula.widgets.nattable.core.data.ObjectPropertyAccessor
class ListRowDataLayer implements Layer {
@@ -14,7 +14,7 @@
val Axis horizontalAxis
val Axis verticalAxis
- @Inject extension PropertyAccessor
+ @Inject extension ObjectPropertyAccessor
new(List<?> list, Axis horizontalAxis) {
this.list = list
@@ -25,18 +25,12 @@
override getHorizontalAxis() { horizontalAxis }
override getVerticalAxis() { verticalAxis }
- override getCellPositionBounds(int columnPosition, int rowPosition) {
- new PositionRectangle(columnPosition, rowPosition, 1, 1)
- }
-
- override getCellDataValue(int columnPosition, int rowPosition) {
+ override getCell(int columnPosition, int rowPosition) {
val rowObject = list.get(rowPosition)
val propertyId = horizontalAxis.getIdOfSegmentPosition(columnPosition)
- rowObject.getProperty(propertyId)
- }
-
- override setCellDataValue(int columnPosition, int rowPosition, Object newValue) {
- throw new UnsupportedOperationException("TODO: auto-generated method stub")
+ val value = rowObject.getProperty(propertyId)
+
+ new ReadOnlyCell(this, columnPosition, rowPosition, value)
}
}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/composite/CompositeLayer.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/composite/CompositeLayer.xtend
index 2982ffc..2175bca 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/composite/CompositeLayer.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/composite/CompositeLayer.xtend
@@ -1,8 +1,8 @@
package org.eclipse.nebula.widgets.nattable.core.layer.composite
-import org.eclipse.nebula.widgets.nattable.core.layer.Layer
import java.util.ArrayList
import org.eclipse.nebula.widgets.nattable.core.axis.Axis
+import org.eclipse.nebula.widgets.nattable.core.layer.Layer
class CompositeLayer implements Layer {
@@ -20,7 +20,7 @@
override getHorizontalAxis() { horizontalAxis }
override getVerticalAxis() { verticalAxis }
- override getCellPositionBounds(int columnPosition, int rowPosition) {
+ override getCell(int columnPosition, int rowPosition) {
// find index of layer corresponding to given column position (& track horiz offset)
// find index of layer corresponding to given row position (& track vert offset)
// => find layer in layout
@@ -28,14 +28,6 @@
throw new UnsupportedOperationException("TODO: auto-generated method stub")
}
- override getCellDataValue(int columnPosition, int rowPosition) {
- throw new UnsupportedOperationException("TODO: auto-generated method stub")
- }
-
- override setCellDataValue(int columnPosition, int rowPosition, Object newValue) {
- throw new UnsupportedOperationException("TODO: auto-generated method stub")
- }
-
def addLayoutRow(LayoutRow layoutRow) {
layoutRows += layoutRow
}
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/header/ColumnHeaderLayer.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/header/ColumnHeaderLayer.xtend
index 36674cf..b689bf4 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/header/ColumnHeaderLayer.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/header/ColumnHeaderLayer.xtend
@@ -1,11 +1,12 @@
package org.eclipse.nebula.widgets.nattable.core.layer.header
import org.eclipse.nebula.widgets.nattable.core.axis.Axis
-import org.eclipse.nebula.widgets.nattable.core.layer.Layer
import org.eclipse.nebula.widgets.nattable.core.axis.DefaultAxis
-import org.eclipse.nebula.widgets.nattable.core.geometry.PositionRectangle
+import org.eclipse.nebula.widgets.nattable.core.cell.LayerDataAccessorCell
+import org.eclipse.nebula.widgets.nattable.core.layer.Layer
+import org.eclipse.nebula.widgets.nattable.core.layer.LayerDataAccessor
-class ColumnHeaderLayer implements Layer {
+class ColumnHeaderLayer implements Layer, LayerDataAccessor {
val Axis horizontalAxis
val Axis verticalAxis
@@ -16,13 +17,17 @@
this.verticalAxis = new DefaultAxis(1, 20)
}
+ // Layer
+
override getHorizontalAxis() { horizontalAxis }
override getVerticalAxis() { verticalAxis }
- override getCellPositionBounds(int columnPosition, int rowPosition) {
- new PositionRectangle(columnPosition, rowPosition, 1, 1)
+ override getCell(int columnPosition, int rowPosition) {
+ new LayerDataAccessorCell(this, columnPosition, rowPosition, this)
}
+ // LayerDataAccessor
+
override getCellDataValue(int columnPosition, int rowPosition) {
horizontalAxis.getSegmentDataValue(columnPosition)
}
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/header/RowHeaderLayer.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/header/RowHeaderLayer.xtend
index 534ff10..e1f2dc5 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/header/RowHeaderLayer.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/header/RowHeaderLayer.xtend
@@ -1,11 +1,12 @@
package org.eclipse.nebula.widgets.nattable.core.layer.header
import org.eclipse.nebula.widgets.nattable.core.axis.Axis
-import org.eclipse.nebula.widgets.nattable.core.layer.Layer
import org.eclipse.nebula.widgets.nattable.core.axis.DefaultAxis
-import org.eclipse.nebula.widgets.nattable.core.geometry.PositionRectangle
+import org.eclipse.nebula.widgets.nattable.core.cell.LayerDataAccessorCell
+import org.eclipse.nebula.widgets.nattable.core.layer.Layer
+import org.eclipse.nebula.widgets.nattable.core.layer.LayerDataAccessor
-class RowHeaderLayer implements Layer {
+class RowHeaderLayer implements Layer, LayerDataAccessor {
val Axis horizontalAxis
val Axis verticalAxis
@@ -16,13 +17,17 @@
this.horizontalAxis = new DefaultAxis(1, 20)
}
+ // Layer
+
override getHorizontalAxis() { horizontalAxis }
override getVerticalAxis() { verticalAxis }
- override getCellPositionBounds(int columnPosition, int rowPosition) {
- new PositionRectangle(columnPosition, rowPosition, 1, 1)
+ override getCell(int columnPosition, int rowPosition) {
+ new LayerDataAccessorCell(this, columnPosition, rowPosition, this)
}
+ // LayerDataAccessor
+
override getCellDataValue(int columnPosition, int rowPosition) {
verticalAxis.getSegmentDataValue(rowPosition)
}
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/viewport/ViewportLayer.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/viewport/ViewportLayer.xtend
index f69a0d9..ec7ec23 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/viewport/ViewportLayer.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/viewport/ViewportLayer.xtend
@@ -2,7 +2,6 @@
import org.eclipse.nebula.widgets.nattable.core.axis.viewport.ViewportAxis
import org.eclipse.nebula.widgets.nattable.core.geometry.PixelArea
-import org.eclipse.nebula.widgets.nattable.core.geometry.PositionRectangle
import org.eclipse.nebula.widgets.nattable.core.layer.Layer
class ViewportLayer implements Layer {
@@ -27,23 +26,11 @@
verticalViewportAxis
}
- override getCellPositionBounds(int columnPosition, int rowPosition) {
- new PositionRectangle(columnPosition, rowPosition, 1, 1)
- }
-
- override getCellDataValue(int columnPosition, int rowPosition) {
- underlyingLayer.getCellDataValue(
+ override getCell(int columnPosition, int rowPosition) {
+ underlyingLayer.getCell(
horizontalViewportAxis.originSegmentPosition + columnPosition,
verticalViewportAxis.originSegmentPosition + rowPosition
)
}
- override setCellDataValue(int columnPosition, int rowPosition, Object newValue) {
- underlyingLayer.setCellDataValue(
- horizontalViewportAxis.originSegmentPosition + columnPosition,
- verticalViewportAxis.originSegmentPosition + rowPosition,
- newValue
- )
- }
-
}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/DefaultLayerRenderer.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/DefaultLayerRenderer.xtend
index 1002560..cfc603b 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/DefaultLayerRenderer.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/DefaultLayerRenderer.xtend
@@ -5,9 +5,8 @@
import javafx.scene.paint.Color
import org.eclipse.nebula.widgets.nattable.core.layer.Layer
+import static extension org.eclipse.nebula.widgets.nattable.core.cell.CellInvariants.*
import static extension org.eclipse.nebula.widgets.nattable.core.layer.LayerInvariants.*
-import javafx.scene.text.Font
-import com.sun.javafx.tk.Toolkit
class DefaultLayerRenderer implements JavaFXLayerRenderer {
@@ -18,7 +17,7 @@
for (columnPosition : 0 .. layer.columnCount) {
for (rowPosition : 0 .. layer.rowCount) {
- val cellPixelBounds = layer.getCellPixelBounds(columnPosition, rowPosition)
+ val cellPixelBounds = layer.getCell(columnPosition, rowPosition).pixelBounds
gc.strokeRect(cellPixelBounds.x, cellPixelBounds.y, cellPixelBounds.pixelWidth, cellPixelBounds.pixelHeight)
// gc.font = new Font()
@@ -26,7 +25,7 @@
// fontMetrics.computeStringWidth("")
gc.strokeText(
- layer.getCellDataValue(columnPosition, rowPosition).toString,
+ layer.getCell(columnPosition, rowPosition).dataValue.toString,
cellPixelBounds.x + (cellPixelBounds.pixelWidth/2),
cellPixelBounds.y + (cellPixelBounds.pixelHeight/2)
)