| package org.eclipse.nebula.widgets.nattable.core.layer.composite |
| |
| import org.eclipse.nebula.widgets.nattable.core.axis.Axis |
| |
| import static extension org.eclipse.nebula.widgets.nattable.core.axis.AxisInvariants.* |
| |
| class CompositeAxis implements Axis { |
| |
| val CompositeLayersAccessor layersAccessor |
| val extension AxisAccessor axisAccessor |
| |
| new(CompositeLayersAccessor layersAccessor, AxisAccessor axisAccessor) { |
| this.layersAccessor = layersAccessor |
| this.axisAccessor = axisAccessor |
| } |
| |
| private def getLayers() { |
| layersAccessor.layers |
| } |
| |
| override getSegmentCount() { |
| layers.size |
| } |
| |
| override getStartPixelOfSegmentPosition(int segmentPosition) { |
| var segmentOffset = 0 |
| var pixelOffset = 0 |
| |
| for (layer : layers) { |
| val axis = layer.axis |
| |
| if (segmentPosition < axis.segmentCount) |
| return pixelOffset + axis.getStartPixelOfSegmentPosition(segmentPosition - segmentOffset) |
| |
| segmentOffset = segmentOffset + axis.segmentCount |
| pixelOffset = pixelOffset + axis.pixelSize |
| } |
| |
| pixelOffset |
| } |
| |
| override getSegmentPositionByPixelLocation(int pixelLocation) { |
| var segmentOffset = 0 |
| var pixelOffset = 0 |
| |
| for (layer : layers) { |
| val axis = layer.axis |
| |
| if (pixelLocation < axis.pixelSize) |
| return segmentOffset + axis.getSegmentPositionByPixelLocation(pixelLocation - pixelOffset) |
| |
| segmentOffset = segmentOffset + axis.segmentCount |
| pixelOffset = pixelOffset + axis.pixelSize |
| } |
| |
| segmentOffset |
| } |
| |
| override getIdOfSegmentPosition(int segmentPosition) { |
| var segmentOffset = 0 |
| |
| for (layer : layers) { |
| val axis = layer.axis |
| |
| if (segmentPosition < axis.segmentCount) |
| return axis.getIdOfSegmentPosition(segmentPosition - segmentOffset) |
| |
| segmentOffset = segmentOffset + axis.segmentCount |
| } |
| |
| null |
| } |
| |
| override getSegment(int segmentPosition) { |
| var segmentOffset = 0 |
| |
| for (layer : layers) { |
| val axis = layer.axis |
| |
| if (segmentPosition < axis.segmentCount) |
| return axis.getSegment(segmentPosition - segmentOffset) |
| |
| segmentOffset = segmentOffset + axis.segmentCount |
| } |
| |
| null |
| } |
| |
| } |