| package org.eclipse.nebula.widgets.nattable.core.layer.axis.impl |
| |
| 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 SimpleAxis implements Axis { |
| |
| int segmentCount |
| int defaultSegmentSize |
| val segmentSizeMap = new TreeMap<Integer, Integer> // segment Position -> pixel size |
| |
| new(int segmentCount, int defaultSegmentSize) { |
| this.segmentCount = segmentCount |
| this.defaultSegmentSize = defaultSegmentSize |
| } |
| |
| // Axis interface |
| |
| override getSegmentCount() { |
| segmentCount |
| } |
| |
| override getStartPixelOfSegmentPosition(int segmentPosition) { |
| if (segmentPosition < 0) return -1 |
| else if (segmentPosition == 0) return 0 |
| else if (segmentSizeMap.empty) return segmentPosition * defaultSegmentSize |
| else { |
| var numResizedSegments = 0 |
| var resizeAggregate = 0 |
| |
| for (resizedSegmentPosition : segmentSizeMap.subMap(0, segmentPosition).keySet) { |
| numResizedSegments = numResizedSegments + 1 |
| resizeAggregate = resizeAggregate + segmentSizeMap.get(resizedSegmentPosition) |
| } |
| |
| return ((segmentPosition - numResizedSegments) * defaultSegmentSize) + resizeAggregate |
| } |
| } |
| |
| override getSegmentPositionOfPixelLocation(int pixelLocation) { |
| pixelLocation / defaultSegmentSize |
| } |
| |
| override getIdOfSegmentPosition(int segmentPosition) { |
| segmentPosition |
| } |
| |
| override getSegmentPositionOfId(Serializable segmentId) { |
| if (segmentId != null) |
| return segmentId as Integer |
| else |
| return -1 |
| } |
| |
| // |
| |
| def void setPixelSizeOfSegmentPosition(int size, int segmentPosition) { |
| if (!containsSegmentPosition(segmentPosition)) throw new IllegalArgumentException('''segment position «segmentPosition» is not contained in this axis''') |
| if (size < 0) throw new IllegalArgumentException("size must be >= 0") |
| |
| segmentSizeMap.put(segmentPosition, size) |
| } |
| |
| } |