adding minPixelLocation, pixelSize to Axis; fixing multiple viewport
example
diff --git a/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/MultiViewportExample.xtend b/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/MultiViewportExample.xtend
index e680db1..34df83a 100644
--- a/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/MultiViewportExample.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/MultiViewportExample.xtend
@@ -14,14 +14,20 @@
override createLayer() {
val bodyLayer = new CompositeLayer => [
addRow(
- new ViewportLayer(new DummyLayer(
- new AxisImpl(4, 150), // Horizontal axis
- new AxisImpl(10, 100) // Vertical axis
- )),
- new ViewportLayer(new DummyLayer(
- new AxisImpl(10, 150), // Horizontal axis
- new AxisImpl(10, 100) // Vertical axis
- ))
+ new ViewportLayer => [
+ underlyingLayer = new DummyLayer(
+ new AxisImpl(4, 150), // Horizontal axis
+ new AxisImpl(10, 100) // Vertical axis
+ )
+ horizontalAxis.minPixelOrigin = 0
+ horizontalAxis.maxPixelSize = 150
+ ],
+ new ViewportLayer => [
+ underlyingLayer = new DummyLayer(
+ new AxisImpl(10, 150), // Horizontal axis
+ new AxisImpl(10, 100) // Vertical axis
+ )
+ ]
)
]
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/Axis.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/Axis.xtend
index 604e878..9a6499d 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/Axis.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/Axis.xtend
@@ -26,6 +26,16 @@
def double getStartPixelOfSegmentPosition(int segmentPosition)
/**
+ * Gets the minimum pixel location of this axis. This is normally the same as getStartPixelOfSegmentPosition(0).
+ */
+ def double getMinPixelLocation()
+
+ /**
+ * Gets the maximum pixel size of this axis. This is normally the same as getStartPixelOfSegmentPosition(getSegmentCount()) - getMinPixelLocation().
+ */
+ def double getPixelSize()
+
+ /**
* Gets the position of the segment that is nearest to the the given pixel location.
*
* @param pixelLocation
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/AxisInvariants.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/AxisInvariants.xtend
index 1914ed2..7733099 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/AxisInvariants.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/AxisInvariants.xtend
@@ -5,10 +5,6 @@
*/
class AxisInvariants {
- def static getPixelSize(Axis axis) {
- axis.getStartPixelOfSegmentPosition(axis.segmentCount) - axis.getStartPixelOfSegmentPosition(0)
- }
-
def static getPixelSizeOfSegmentPosition(Axis axis, int segmentPosition) {
axis.getStartPixelOfSegmentPosition(segmentPosition + 1) - axis.getStartPixelOfSegmentPosition(segmentPosition)
}
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AbstractAxis.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AbstractAxis.xtend
index 3b6b05c..a11394a 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AbstractAxis.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AbstractAxis.xtend
@@ -4,5 +4,13 @@
import org.eclipse.nebula.widgets.nattable.core.layer.axis.Axis
abstract class AbstractAxis extends AbstractEventSourceSink implements Axis {
+
+ override getMinPixelLocation() {
+ getStartPixelOfSegmentPosition(0)
+ }
+
+ override getPixelSize() {
+ getStartPixelOfSegmentPosition(segmentCount) - minPixelLocation
+ }
}
\ No newline at end of file
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeAxis.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeAxis.xtend
index 8f812bb..102da85 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeAxis.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeAxis.xtend
@@ -39,7 +39,7 @@
val subSegmentPosition = segmentPosition - segmentOffset
if (subSegmentPosition < subAxis.segmentCount)
- return pixelOffset + subAxis.getStartPixelOfSegmentPosition(subSegmentPosition)
+ return pixelOffset + Math::max(subAxis.minPixelLocation, subAxis.getStartPixelOfSegmentPosition(subSegmentPosition))
segmentOffset = segmentOffset + subAxis.segmentCount
pixelOffset = pixelOffset + subAxis.pixelSize
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxis.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxis.xtend
index 4615418..f2c9b61 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxis.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxis.xtend
@@ -14,6 +14,9 @@
val BigAxis underlyingAxis
val ViewportAxisListener viewportAxisListener
+ BigDecimal minPixelOrigin = BigDecimal::ZERO
+ BigDecimal maxPixelSize
+
/**
* Indicates the visible size of the axis. Note that the pixel locations returned by this ClientDimensionProvider
* must be in terms of underlying axis pixel coordinates.
@@ -29,9 +32,33 @@
def getUnderlyingAxis() { underlyingAxis }
+ def setMinPixelOrigin(double minPixelOrigin) { setMinPixelOrigin(new BigDecimal(minPixelOrigin)) }
+ def setMinPixelOrigin(BigDecimal minPixelOrigin) { this.minPixelOrigin = minPixelOrigin }
+ def setMaxPixelSize(double maxPixelSize) { setMaxPixelSize(new BigDecimal(maxPixelSize)) }
+ def setMaxPixelSize(BigDecimal maxPixelSize) { this.maxPixelSize = maxPixelSize }
+
+ override getMinPixelLocation() {
+ if (minPixelOrigin != null)
+ minPixelOrigin.doubleValue
+ else
+ super.minPixelLocation
+ }
+
+ override getPixelSize() {
+ if (maxPixelSize != null)
+ maxPixelSize.doubleValue
+ else
+ super.pixelSize
+ }
+
def getVisiblePixelSize() {
- if (visiblePixelSize >= BigDecimal::ZERO) visiblePixelSize
- else BigDecimal::TEN
+ val pixelSize =
+ if (visiblePixelSize >= BigDecimal::ZERO) visiblePixelSize
+ else underlyingAxis.pixelSize
+ if (maxPixelSize != null)
+ pixelSize.min(maxPixelSize)
+ else
+ pixelSize
}
def setVisiblePixelSize(double visiblePixelSize) {
@@ -71,7 +98,7 @@
val endSegmentPosition = underlyingAxis.getSegmentPositionOfPixelLocation(endPixel)
val isEndPixelInsideEndSegment = endPixel > underlyingAxis.getStartPixelOfSegmentPosition(endSegmentPosition) && endPixel < underlyingAxis.getStartPixelOfSegmentPosition(underlyingAxis.segmentCount)
val segmentCount = endSegmentPosition - originSegmentPosition
- segmentCount.intValueExact + if (isEndPixelInsideEndSegment) 1 else 0
+ segmentCount.intValue + if (isEndPixelInsideEndSegment) 1 else 0
}
override getStartPixelOfSegmentPosition(int segmentPosition) {