| package org.eclipse.nebula.widgets.nattable.renderer.swt.layer.viewport |
| |
| import org.eclipse.nebula.widgets.nattable.core.layer.impl.viewport.ViewportAxis |
| import org.eclipse.swt.widgets.Event |
| import org.eclipse.swt.widgets.Listener |
| import org.eclipse.swt.widgets.ScrollBar |
| |
| import static extension org.eclipse.nebula.widgets.nattable.core.layer.axis.AxisInvariants.* |
| |
| class ScrollBarHandler implements Listener { |
| |
| val ScrollBar scrollBar |
| val ViewportAxis viewportAxis |
| |
| new(ScrollBar scrollBar, ViewportAxis viewportAxis) { |
| this.scrollBar = scrollBar |
| this.viewportAxis = viewportAxis |
| } |
| |
| override handleEvent(Event event) { |
| viewportAxis.pixelOrigin = /*viewportAxis.minimumOrigin +*/ scrollBar.selection |
| scrollBar.increment = scrollIncrement |
| adjustScrollBar |
| } |
| |
| def void adjustScrollBar() { |
| scrollBar.selection = viewportAxis.pixelOrigin /*- viewportAxis.minimumOrigin*/ |
| } |
| |
| def void recalculateScrollBarSize() { |
| val max = viewportAxis.underlyingAxis.pixelSize /*- viewportAxis.minimumOrigin*/ |
| |
| scrollBar.maximum = max |
| |
| val visiblePixelSize = viewportAxis.visiblePixelRange.pixelSize |
| |
| var thumbSize = 0 |
| if (visiblePixelSize < max && visiblePixelSize != 0) { |
| thumbSize = visiblePixelSize |
| scrollBar.enabled = true |
| scrollBar.visible = true |
| |
| scrollBar.increment = scrollIncrement |
| |
| scrollBar.pageIncrement = visiblePixelSize |
| } else { |
| thumbSize = max |
| scrollBar.enabled = false |
| scrollBar.visible = false |
| } |
| scrollBar.thumb = thumbSize |
| |
| adjustScrollBar |
| } |
| |
| def int getScrollIncrement() { |
| Math::min(viewportAxis.getPixelSizeOfSegmentPosition(0), viewportAxis.visiblePixelRange.pixelSize / 4) |
| } |
| |
| } |