blob: b2479a2a38dd2cf3b49f318291527ae55f078b19 [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
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)
}
}