| /******************************************************************************* |
| * Copyright (c) 2005, 2010 IBM Corporation 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: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.gef.editparts; |
| |
| import org.eclipse.swt.widgets.Event; |
| |
| import org.eclipse.draw2d.RangeModel; |
| import org.eclipse.draw2d.Viewport; |
| import org.eclipse.draw2d.geometry.Rectangle; |
| import org.eclipse.draw2d.rap.swt.SWT; |
| |
| import org.eclipse.gef.GraphicalEditPart; |
| import org.eclipse.gef.MouseWheelHelper; |
| |
| /** |
| * ViewportMouseWheelHelper is the default MouseWheelHelper that should be used |
| * to scroll edit parts. |
| * |
| * @author Pratik Shah |
| * @since 3.1 |
| */ |
| public class ViewportMouseWheelHelper extends ViewportHelper implements |
| MouseWheelHelper { |
| |
| private static final int LINE_HEIGHT = 12; |
| |
| private int lineHeight, pageHeight; |
| |
| /** |
| * Constructor |
| * |
| * @param part |
| * the EditPArt that has to be scrolled |
| */ |
| public ViewportMouseWheelHelper(GraphicalEditPart part) { |
| this(part, -1, -1); |
| } |
| |
| /** |
| * |
| * Constructor |
| * |
| * @param part |
| * the EditPart that has to be scrolled |
| * @param lineHeight |
| * the new line height |
| * @param pageHeight |
| * the new page height |
| * @see #setLineHeight(int) |
| * @see #setPageHeight(int) |
| */ |
| public ViewportMouseWheelHelper(GraphicalEditPart part, int lineHeight, |
| int pageHeight) { |
| super(part); |
| setLineHeight(lineHeight); |
| setPageHeight(pageHeight); |
| } |
| |
| /** |
| * Finds the viewport of the given EditPart and scrolls it as requested. If |
| * it can't be scrolled then leaves doit to be true so that the given |
| * EditPart's ancestors might have a chance to scroll. |
| * |
| * @see org.eclipse.gef.MouseWheelHelper#handleMouseWheelScrolled(org.eclipse.swt.widgets.Event) |
| */ |
| public void handleMouseWheelScrolled(Event event) { |
| Viewport viewport = findViewport(owner); |
| if (viewport == null || !viewport.isShowing()) |
| return; |
| RangeModel rModel = viewport.getVerticalRangeModel(); |
| if (rModel.getExtent() < (rModel.getMaximum() - rModel.getMinimum())) { |
| int currentPos = rModel.getValue(); |
| int scrollHeight = lineHeight; |
| if (event.detail == SWT.SCROLL_PAGE) |
| scrollHeight = pageHeight > lineHeight ? pageHeight |
| : Math.max( |
| lineHeight, |
| viewport.getClientArea(Rectangle.SINGLETON).height - 26); |
| scrollHeight *= event.count; |
| viewport.setVerticalLocation(currentPos - scrollHeight); |
| if (rModel.getValue() != currentPos) |
| event.doit = false; |
| } |
| } |
| |
| /** |
| * Sets the height (in pixels) that will be scrolled when |
| * {@link SWT#SCROLL_LINE line scrolling} is requested. If the line height |
| * is set to 0 or less, or not set at all, a default height will be used. |
| * |
| * @param height |
| * the new line height |
| */ |
| public void setLineHeight(int height) { |
| if (height > 0) |
| lineHeight = height; |
| else |
| lineHeight = LINE_HEIGHT; |
| } |
| |
| /** |
| * Sets the height (in pixels) that will be scrolled when |
| * {@link SWT#SCROLL_PAGE page scrolling} is requested. A page height that |
| * is less than the line height will not be respected. If the page height is |
| * set to -1, or one is not set at all, the default height will be used. The |
| * default height is calculated based on the given EditPart's figure's |
| * viewport's size. It will not be less than the line height. |
| * |
| * @param height |
| * the new page height |
| */ |
| public void setPageHeight(int height) { |
| pageHeight = height; |
| } |
| |
| } |