/*******************************************************************************
* Copyright (c) 2012, 2013 Original authors and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Original authors and others - initial API and implementation
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.viewport;
import static org.eclipse.nebula.widgets.nattable.selection.SelectionLayer.MoveDirectionEnum.DOWN;
import static org.eclipse.nebula.widgets.nattable.selection.SelectionLayer.MoveDirectionEnum.UP;
import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer.MoveDirectionEnum;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.ScrollBar;
/**
* Listener for the Vertical scroll bar events.
*/
public class VerticalScrollBarHandler extends ScrollBarHandlerTemplate
implements Listener {
public VerticalScrollBarHandler(ViewportLayer viewportLayer,
ScrollBar scrollBar) {
this(viewportLayer, new ScrollBarScroller(scrollBar));
}
public VerticalScrollBarHandler(ViewportLayer viewportLayer,
IScroller<?> scroller) {
super(viewportLayer, scroller);
}
/**
* Convert Viewport 0 pos -> Scrollable 0 pos
*
* @return
*/
@Override
int getViewportOrigin() {
return this.viewportLayer.getOrigin().getY();
}
@Override
int getViewportMinimumOrigin() {
return this.viewportLayer.getMinimumOrigin().getY();
}
@Override
void setViewportOrigin(int y) {
this.viewportLayer.setOriginY(y);
}
@Override
MoveDirectionEnum scrollDirectionForEventDetail(int eventDetail) {
return (eventDetail == SWT.PAGE_UP || eventDetail == SWT.ARROW_UP) ? UP
: DOWN;
}
@Override
boolean keepScrolling() {
return !this.viewportLayer.isLastRowCompletelyDisplayed();
}
@Override
int getViewportWindowSpan() {
return this.viewportLayer.getClientAreaHeight();
}
@Override
int getScrollableLayerSpan() {
if (this.viewportLayer.getMaxHeight() >= 0
&& this.viewportLayer.getMaxHeight() < this.scrollableLayer.getHeight()) {
return this.viewportLayer.getMaxHeight();
} else {
return this.scrollableLayer.getHeight();
}
}
@Override
int getScrollIncrement() {
return this.viewportLayer.getRowCount() > 0 ? this.viewportLayer
.getRowHeightByPosition(0) : 0;
}
}