adding/refactoring event stuff
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/event/AbstractEventSource.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/event/AbstractEventSource.xtend
new file mode 100644
index 0000000..d3aecc5
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/event/AbstractEventSource.xtend
@@ -0,0 +1,25 @@
+package org.eclipse.nebula.widgets.nattable.core.event
+
+import java.util.LinkedHashSet
+import java.util.Set
+
+abstract class AbstractEventSource implements EventSource {
+
+ val Set<EventListener> listeners = new LinkedHashSet
+
+ // EventSource interface
+
+ override addEventListener(EventListener listener) { listeners.add(listener) }
+ override removeEventListener(EventListener listener) { listeners.remove(listener) }
+
+ //
+
+ /**
+ * Pass the event to all the {@link LayerListener}s registered on this layer.
+ */
+ def fireEvent(Event event) {
+ for (listener : listeners)
+ listener.handleEvent(event)
+ }
+
+}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/event/AbstractEventSourceSink.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/event/AbstractEventSourceSink.xtend
new file mode 100644
index 0000000..c63d7da
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/event/AbstractEventSourceSink.xtend
@@ -0,0 +1,11 @@
+package org.eclipse.nebula.widgets.nattable.core.event
+
+class AbstractEventSourceSink extends AbstractEventSource implements EventListener {
+
+ // EventListener interface
+
+ override handleEvent(Event event) {
+ fireEvent(event)
+ }
+
+}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/event/Event.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/event/Event.xtend
new file mode 100644
index 0000000..4ce8155
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/event/Event.xtend
@@ -0,0 +1,5 @@
+package org.eclipse.nebula.widgets.nattable.core.event
+
+interface Event {
+
+}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/event/EventListener.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/event/EventListener.xtend
new file mode 100644
index 0000000..71487ad
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/event/EventListener.xtend
@@ -0,0 +1,7 @@
+package org.eclipse.nebula.widgets.nattable.core.event
+
+interface EventListener {
+
+ def void handleEvent(Event event)
+
+}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/event/EventSource.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/event/EventSource.xtend
new file mode 100644
index 0000000..210d559
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/event/EventSource.xtend
@@ -0,0 +1,9 @@
+package org.eclipse.nebula.widgets.nattable.core.event
+
+interface EventSource {
+
+ def void addEventListener(EventListener listener)
+
+ def void removeEventListener(EventListener listener)
+
+}
\ No newline at end of file
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 903782b..ee16aba 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,12 +1,14 @@
package org.eclipse.nebula.widgets.nattable.core.layer
+import org.eclipse.nebula.widgets.nattable.core.event.EventListener
+import org.eclipse.nebula.widgets.nattable.core.event.EventSource
import org.eclipse.nebula.widgets.nattable.core.layer.axis.Axis
import org.eclipse.nebula.widgets.nattable.core.layer.cell.Cell
/**
* A two-dimensional rectangular region of cells.
*/
-interface Layer extends LayerListener {
+interface Layer extends EventSource, EventListener {
/**
* @return The Axis that characterizes the horizontal dimension of this layer.
@@ -23,10 +25,4 @@
*/
def Cell getCell(int columnPosition, int rowPosition)
- // Events
-
- def void addLayerListener(LayerListener listener)
-
- def void removeLayerListener(LayerListener listener)
-
}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerEvent.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerEvent.xtend
deleted file mode 100644
index e76a28d..0000000
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerEvent.xtend
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.eclipse.nebula.widgets.nattable.core.layer
-
-/**
- * LayerEvents should be immutable.
- */
-interface LayerEvent {
-
-}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerListener.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerListener.xtend
deleted file mode 100644
index 2d8bd47..0000000
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerListener.xtend
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.eclipse.nebula.widgets.nattable.core.layer
-
-interface LayerListener {
-
- def void handleLayerEvent(LayerEvent event)
-
-}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/Axis.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/Axis.xtend
index 13451f3..6c7fd0a 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/Axis.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/Axis.xtend
@@ -1,11 +1,13 @@
package org.eclipse.nebula.widgets.nattable.core.layer.axis
import java.io.Serializable
+import org.eclipse.nebula.widgets.nattable.core.event.EventListener
+import org.eclipse.nebula.widgets.nattable.core.event.EventSource
/**
* Represents a linear dimension (e.g. horizontal, vertical) that is composed of segments (e.g. columns, rows).
*/
-interface Axis {
+interface Axis extends EventSource, EventListener {
/**
* @return The number of segments on this axis.
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AbstractAxis.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AbstractAxis.xtend
new file mode 100644
index 0000000..3b6b05c
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AbstractAxis.xtend
@@ -0,0 +1,8 @@
+package org.eclipse.nebula.widgets.nattable.core.layer.axis.impl
+
+import org.eclipse.nebula.widgets.nattable.core.event.AbstractEventSourceSink
+import org.eclipse.nebula.widgets.nattable.core.layer.axis.Axis
+
+abstract class AbstractAxis extends AbstractEventSourceSink implements Axis {
+
+}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AxisImpl.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AxisImpl.xtend
index be37a68..fe561a7 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AxisImpl.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AxisImpl.xtend
@@ -2,14 +2,13 @@
import java.io.Serializable
import java.util.TreeMap
-import org.eclipse.nebula.widgets.nattable.core.layer.axis.Axis
import static extension org.eclipse.nebula.widgets.nattable.core.layer.axis.AxisInvariants.*
/**
* A simple Axis implementation.
*/
-class AxisImpl implements Axis {
+class AxisImpl extends AbstractAxis {
int segmentCount
int defaultSegmentSize
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/hideshow/HideShowAxis.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/hideshow/HideShowAxis.xtend
index 20a4ff0..00c9b0f 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/hideshow/HideShowAxis.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/hideshow/HideShowAxis.xtend
@@ -5,10 +5,11 @@
import java.util.SortedMap
import java.util.TreeMap
import org.eclipse.nebula.widgets.nattable.core.layer.axis.Axis
+import org.eclipse.nebula.widgets.nattable.core.layer.axis.impl.AbstractAxis
import static extension org.eclipse.nebula.widgets.nattable.core.layer.axis.AxisInvariants.*
-class HideShowAxis implements Axis {
+class HideShowAxis extends AbstractAxis {
val SortedMap<Integer, Serializable> hiddenSegmentPositionToIdMap = new TreeMap
val Map<Integer, Integer> segmentPositionToStartPixelMap = newHashMap
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/reorder/ReorderAxis.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/reorder/ReorderAxis.xtend
index ce46c74..5574e16 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/reorder/ReorderAxis.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/reorder/ReorderAxis.xtend
@@ -4,10 +4,11 @@
import java.util.List
import java.util.Map
import org.eclipse.nebula.widgets.nattable.core.layer.axis.Axis
+import org.eclipse.nebula.widgets.nattable.core.layer.axis.impl.AbstractAxis
import static extension org.eclipse.nebula.widgets.nattable.core.layer.axis.AxisInvariants.*
-class ReorderAxis implements Axis {
+class ReorderAxis extends AbstractAxis {
val List<Serializable> reorderedSegmentIds = newArrayList
val Map<Integer, Integer> segmentPositionToStartPixelMap = newHashMap
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/AbstractLayer.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/AbstractLayer.xtend
index d5649b1..311a54c 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/AbstractLayer.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/AbstractLayer.xtend
@@ -1,34 +1,8 @@
package org.eclipse.nebula.widgets.nattable.core.layer.impl
-import java.util.LinkedHashSet
-import java.util.Set
+import org.eclipse.nebula.widgets.nattable.core.event.AbstractEventSourceSink
import org.eclipse.nebula.widgets.nattable.core.layer.Layer
-import org.eclipse.nebula.widgets.nattable.core.layer.LayerEvent
-import org.eclipse.nebula.widgets.nattable.core.layer.LayerListener
-abstract class AbstractLayer implements Layer {
-
- val Set<LayerListener> listeners = new LinkedHashSet
-
- // Layer interface
-
- override addLayerListener(LayerListener listener) { listeners.add(listener) }
- override removeLayerListener(LayerListener listener) { listeners.remove(listener) }
-
- // LayerListener interface
-
- override handleLayerEvent(LayerEvent event) {
- fireLayerEvent(event);
- }
-
- //
-
- /**
- * Pass the event to all the {@link LayerListener}s registered on this layer.
- */
- def fireLayerEvent(LayerEvent event) {
- for (listener : listeners)
- listener.handleLayerEvent(event)
- }
+abstract class AbstractLayer extends AbstractEventSourceSink implements Layer {
}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DimensionallyDependentLayer.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DimensionallyDependentLayer.xtend
index 56a8769..7cccb08 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DimensionallyDependentLayer.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DimensionallyDependentLayer.xtend
@@ -20,10 +20,12 @@
def void setHorizontalAxis(Axis horizontalAxis) {
this.horizontalAxis = horizontalAxis
+ this.horizontalAxis.addEventListener(this)
}
def void setVerticalAxis(Axis verticalAxis) {
this.verticalAxis = verticalAxis
+ this.verticalAxis.addEventListener(this)
}
def void setLayerDataAccessor(LayerDataAccessor layerDataAccessor) {
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DummyLayer.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DummyLayer.xtend
index eff6162..331bc60 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DummyLayer.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DummyLayer.xtend
@@ -20,10 +20,12 @@
def void setHorizontalAxis(Axis horizontalAxis) {
this.horizontalAxis = horizontalAxis
+ this.horizontalAxis.addEventListener(this)
}
def void setVerticalAxis(Axis verticalAxis) {
this.verticalAxis = verticalAxis
+ this.verticalAxis.addEventListener(this)
}
// Layer interface
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/ListRowDataLayer.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/ListRowDataLayer.xtend
index 7885145..6bd5968 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/ListRowDataLayer.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/ListRowDataLayer.xtend
@@ -33,6 +33,7 @@
def void setHorizontalAxis(Axis horizontalAxis) {
this.horizontalAxis = horizontalAxis
+ this.horizontalAxis.addEventListener(this)
}
def void setObjectPropertyAccessor(ObjectPropertyAccessor objectPropertyAccessor) {
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeAxis.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeAxis.xtend
index aaae4c4..26728af 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeAxis.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeAxis.xtend
@@ -1,14 +1,14 @@
package org.eclipse.nebula.widgets.nattable.core.layer.impl.composite
import java.io.Serializable
-import org.eclipse.nebula.widgets.nattable.core.layer.axis.Axis
+import org.eclipse.nebula.widgets.nattable.core.layer.axis.impl.AbstractAxis
import static extension org.eclipse.nebula.widgets.nattable.core.layer.axis.AxisInvariants.*
/**
* Represents the axis of a CompositeLayer, which is composed of an amalgamation of the axes of the CompsiteLayer's sublayers.
*/
-class CompositeAxis implements Axis {
+class CompositeAxis extends AbstractAxis {
val SubLayerAccessor subLayerAccessor
val extension AxisAccessor axisAccessor
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayer.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayer.xtend
index 942fe28..ea20a2d 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayer.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayer.xtend
@@ -34,9 +34,7 @@
def addRow(Layer...childLayers) {
compositeRows += new CompositeRow => [
for (childLayer : childLayers) {
- childLayer.addLayerListener [
-
- ]
+ childLayer.addEventListener(this)
it.childLayers += childLayer
}
]
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/ColumnHeaderLayer.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/ColumnHeaderLayer.xtend
index 32a0042..08987dc 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/ColumnHeaderLayer.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/ColumnHeaderLayer.xtend
@@ -27,6 +27,7 @@
def void setHorizontalAxis(Axis horizontalAxis) {
this.horizontalAxis = horizontalAxis
+ this.horizontalAxis.addEventListener(this)
}
def void setLayerDataAccessor(LayerDataAccessor layerDataAccessor) {
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/RowHeaderLayer.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/RowHeaderLayer.xtend
index abb60cf..39b3077 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/RowHeaderLayer.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/RowHeaderLayer.xtend
@@ -27,6 +27,7 @@
def void setVerticalAxis(Axis verticalAxis) {
this.verticalAxis = verticalAxis
+ this.verticalAxis.addEventListener(this)
}
def void setLayerDataAccessor(LayerDataAccessor layerDataAccessor) {
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ScrollEvent.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ScrollEvent.xtend
new file mode 100644
index 0000000..2033a7a
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ScrollEvent.xtend
@@ -0,0 +1,7 @@
+package org.eclipse.nebula.widgets.nattable.core.layer.impl.viewport
+
+import org.eclipse.nebula.widgets.nattable.core.event.Event
+
+class ScrollEvent implements Event {
+
+}
\ 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 f3e596b..db6dfe7 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
@@ -3,8 +3,9 @@
import java.io.Serializable
import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRange
import org.eclipse.nebula.widgets.nattable.core.layer.axis.Axis
+import org.eclipse.nebula.widgets.nattable.core.layer.axis.impl.AbstractAxis
-class ViewportAxis implements Axis {
+class ViewportAxis extends AbstractAxis {
val Axis underlyingAxis
@@ -14,17 +15,25 @@
*/
val PixelRange visiblePixelRange
+ val ViewportAxisListener viewportAxisListener
+
int pixelOrigin
- new(Axis underlyingAxis, PixelRange visiblePixelRange) {
+ new(Axis underlyingAxis, PixelRange visiblePixelRange, ViewportAxisListener viewportAxisListener) {
this.underlyingAxis = underlyingAxis
this.visiblePixelRange = visiblePixelRange
+ this.viewportAxisListener = viewportAxisListener
}
+ def getUnderlyingAxis() { underlyingAxis }
+
+ def getVisiblePixelRange() { visiblePixelRange }
+
def getPixelOrigin() { pixelOrigin }
def void setPixelOrigin(int pixelOrigin) {
this.pixelOrigin = pixelOrigin
+ viewportAxisListener.viewportAxisChanged
}
def int getOriginSegmentPosition() {
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxisListener.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxisListener.xtend
new file mode 100644
index 0000000..efeaf97
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxisListener.xtend
@@ -0,0 +1,7 @@
+package org.eclipse.nebula.widgets.nattable.core.layer.impl.viewport
+
+interface ViewportAxisListener {
+
+ def void viewportAxisChanged()
+
+}
\ No newline at end of file
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportLayer.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportLayer.xtend
index 1dd1758..85a9c5c 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportLayer.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportLayer.xtend
@@ -18,11 +18,12 @@
def void setUnderlyingLayer(Layer underlyingLayer) {
this.underlyingLayer = underlyingLayer
+ this.underlyingLayer.addEventListener(this)
}
def void setPixelArea(PixelArea pixelArea) {
- this.horizontalViewportAxis = new ViewportAxis(underlyingLayer.horizontalAxis, pixelArea.horizontalPixelRange)
- this.verticalViewportAxis = new ViewportAxis(underlyingLayer.verticalAxis, pixelArea.verticalPixelRange)
+ horizontalViewportAxis = new ViewportAxis(underlyingLayer.horizontalAxis, pixelArea.horizontalPixelRange, [| fireEvent(new ScrollEvent) ])
+ verticalViewportAxis = new ViewportAxis(underlyingLayer.verticalAxis, pixelArea.verticalPixelRange, [| fireEvent(new ScrollEvent) ])
}
// Layer interface
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/SWTViewportLayerPainter.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/SWTViewportLayerPainter.xtend
index 12b6f2d..31f364c 100644
--- a/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/SWTViewportLayerPainter.xtend
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/SWTViewportLayerPainter.xtend
@@ -3,6 +3,7 @@
import org.eclipse.nebula.widgets.nattable.core.graphics.GraphicsContext
import org.eclipse.nebula.widgets.nattable.core.layer.LayerPainter
import org.eclipse.nebula.widgets.nattable.core.layer.impl.GridLineCellLayerPainter
+import org.eclipse.nebula.widgets.nattable.core.layer.impl.viewport.ViewportAxis
import org.eclipse.nebula.widgets.nattable.core.layer.impl.viewport.ViewportLayer
import org.eclipse.nebula.widgets.nattable.renderer.swt.geometry.SWTControlPixelArea
import org.eclipse.nebula.widgets.nattable.renderer.swt.graphics.SWTGraphicsContext
@@ -24,13 +25,22 @@
viewportLayer.pixelArea = new SWTControlPixelArea(viewportCanvas)
- viewportCanvas.horizontalBar.addListener(SWT::Selection, [ event | println(event) ])
- viewportCanvas.verticalBar.addListener(SWT::Selection, [ event | println(event) ])
viewportCanvas.addPaintListener([ event | defaultPainter.paintLayer(viewportLayer, new SWTGraphicsContext(viewportCanvas, event.gc)) ])
+
+ val horizontalScrollBarHandler = new ScrollBarHandler(viewportCanvas.horizontalBar, viewportLayer.horizontalAxis as ViewportAxis)
+ val verticalScrollBarHandler = new ScrollBarHandler(viewportCanvas.verticalBar, viewportLayer.verticalAxis as ViewportAxis)
+
+ viewportCanvas.horizontalBar.addListener(SWT::Selection, horizontalScrollBarHandler)
+ viewportCanvas.verticalBar.addListener(SWT::Selection, verticalScrollBarHandler)
+
+ viewportCanvas.horizontalBar.addDisposeListener([ viewportCanvas.horizontalBar.removeListener(SWT::Selection, horizontalScrollBarHandler) ])
+ viewportCanvas.verticalBar.addDisposeListener([ viewportCanvas.verticalBar.removeListener(SWT::Selection, verticalScrollBarHandler) ])
+
+ viewportCanvas.addListener(SWT::Resize, [ event | horizontalScrollBarHandler.recalculateScrollBarSize; verticalScrollBarHandler.recalculateScrollBarSize ])
}
val clipBounds = swtGC.SWTGC.clipping
viewportCanvas.bounds = new Rectangle(clipBounds.x, clipBounds.y, clipBounds.width, clipBounds.height)
}
-}
\ No newline at end of file
+}
diff --git a/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandler.xtend b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandler.xtend
new file mode 100644
index 0000000..4628d5e
--- /dev/null
+++ b/NatTable/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandler.xtend
@@ -0,0 +1,60 @@
+package org.eclipse.nebula.widgets.nattable.renderer.swt.layer.viewport
+
+import org.eclipse.nebula.widgets.nattable.core.layer.impl.viewport.ViewportAxis
+import org.eclipse.swt.widgets.Event
+import org.eclipse.swt.widgets.Listener
+import org.eclipse.swt.widgets.ScrollBar
+
+import static extension org.eclipse.nebula.widgets.nattable.core.layer.axis.AxisInvariants.*
+
+class ScrollBarHandler implements Listener {
+
+ val ScrollBar scrollBar
+ val ViewportAxis viewportAxis
+
+ new(ScrollBar scrollBar, ViewportAxis viewportAxis) {
+ this.scrollBar = scrollBar
+ this.viewportAxis = viewportAxis
+ }
+
+ override handleEvent(Event event) {
+ viewportAxis.pixelOrigin = /*viewportAxis.minimumOrigin +*/ scrollBar.selection
+ scrollBar.increment = scrollIncrement
+ adjustScrollBar
+ }
+
+ def void adjustScrollBar() {
+ scrollBar.selection = viewportAxis.pixelOrigin /*- viewportAxis.minimumOrigin*/
+ }
+
+ def void recalculateScrollBarSize() {
+ val max = viewportAxis.underlyingAxis.pixelSize /*- viewportAxis.minimumOrigin*/
+
+ scrollBar.maximum = max
+
+ val visiblePixelSize = viewportAxis.visiblePixelRange.pixelSize
+
+ var thumbSize = 0
+ if (visiblePixelSize < max && visiblePixelSize != 0) {
+ thumbSize = visiblePixelSize
+ scrollBar.enabled = true
+ scrollBar.visible = true
+
+ scrollBar.increment = scrollIncrement
+
+ scrollBar.pageIncrement = visiblePixelSize
+ } else {
+ thumbSize = max
+ scrollBar.enabled = false
+ scrollBar.visible = false
+ }
+ scrollBar.thumb = thumbSize
+
+ adjustScrollBar
+ }
+
+ def int getScrollIncrement() {
+ Math::min(viewportAxis.getPixelSizeOfSegmentPosition(0), viewportAxis.visiblePixelRange.pixelSize / 4)
+ }
+
+}
\ 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 c5a09b7..fa189b8 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
@@ -76,6 +76,7 @@
addRow(cornerLayer, columnHeaderLayer)
addRow(rowHeaderLayer, bodyLayer)
]
+ layer.addEventListener([ event | println("hey! " + event) ])
]
}