blob: 49a5b14d4cec00ba182e78ac1ead5eadccf02d57 [file] [log] [blame]
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
/**
* A simple Axis implementation.
*/
class SimpleAxis implements Axis {
int segmentCount
int defaultSegmentSize
val sizeMap = 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 (sizeMap.empty) return segmentPosition * defaultSegmentSize
else {
var numResizedSegments = 0
var resizeAggregate = 0
for (resizedPosition : sizeMap.subMap(0, segmentPosition).keySet) {
numResizedSegments = numResizedSegments + 1
resizeAggregate = resizeAggregate + sizeMap.get(resizedPosition)
}
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 setSegmentPixelSize(int segmentPosition, int size) {
if (size < 0) throw new IllegalArgumentException("size must be >= 0")
sizeMap.put(segmentPosition, size)
}
}