| /******************************************************************************* |
| * Copyright (c) 2000, 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.draw2d; |
| |
| import org.eclipse.draw2d.geometry.Point; |
| |
| /** |
| * A class which implements automatic horizontal and/or vertical scrolling for a |
| * single IFigure child. |
| * <p> |
| * ScrollBar visibilites are represented by integer class constants: |
| * <ul> |
| * <li>NEVER: Never show the ScrollBar |
| * <li>AUTOMATIC: Show as needed, when the ScrollPane can no longer contain its |
| * view |
| * <li>ALWAYS: Always show the ScrollBar |
| * </ul> |
| * To use, instantiate a ScrollPane object and call its setView(IFigure) method |
| * passing the IFigure that is desired to have scrolling ability. |
| */ |
| public class ScrollPane extends Figure { |
| |
| /** Constant indicating to never show the ScrollBar */ |
| public static final int NEVER = 0; |
| /** |
| * Constant indicating to show as needed, when the ScrollPane can't contain |
| * its view |
| */ |
| public static final int AUTOMATIC = 1; |
| /** Constant indicating to always show the ScrollBar */ |
| public static final int ALWAYS = 2; |
| |
| /** The viewport being scrolled */ |
| protected Viewport viewport; |
| /** The horizontal scrollbar */ |
| protected ScrollBar hBar; |
| /** The vertical scrollbar */ |
| protected ScrollBar vBar; |
| private int hVisibility = AUTOMATIC, vVisibility = AUTOMATIC; |
| |
| /** |
| * Constructs a new ScrollPane with a ScrollPaneLayout. |
| * |
| * @since 2.0 |
| */ |
| public ScrollPane() { |
| setLayoutManager(new ScrollPaneLayout()); |
| } |
| |
| /** |
| * Creates a new horizontally oriented ScrollBar and adds it to this |
| * ScrollPane. |
| * |
| * @since 2.0 |
| */ |
| protected void createHorizontalScrollBar() { |
| ScrollBar bar = new ScrollBar(); |
| bar.setHorizontal(true); |
| setHorizontalScrollBar(bar); |
| } |
| |
| /** |
| * Creates a new Viewport and adds it to this ScrollPane. |
| * |
| * @since 2.0 |
| */ |
| protected void createViewport() { |
| setViewport(new Viewport()); |
| } |
| |
| /** |
| * Creates a new vertically oriented ScrollBar and adds it to this |
| * ScrollPane. |
| * |
| * @since 2.0 |
| */ |
| protected void createVerticalScrollBar() { |
| ScrollBar bar = new ScrollBar(); |
| setVerticalScrollBar(bar); |
| } |
| |
| /** |
| * Returns the ScrollPane's horizontal ScrollBar. |
| * |
| * @return the horizontal scrollbar |
| * @since 2.0 |
| */ |
| public ScrollBar getHorizontalScrollBar() { |
| if (hBar == null) |
| createHorizontalScrollBar(); |
| return hBar; |
| } |
| |
| /** |
| * Returns the visibility of the ScrollPane's horizontal ScrollBar. These |
| * are represented by the integer class constants {@link #NEVER}, |
| * {@link #AUTOMATIC}, and {@link #ALWAYS}. The default is |
| * {@link #AUTOMATIC}. |
| * |
| * @return the visiblity of the horizontal scrollbar |
| * @since 2.0 |
| */ |
| public int getHorizontalScrollBarVisibility() { |
| return hVisibility; |
| } |
| |
| /** |
| * Returns the ScrollPane's vertical ScrollBar. |
| * |
| * @return teh vertical scrollbar |
| * @since 2.0 |
| */ |
| public ScrollBar getVerticalScrollBar() { |
| if (vBar == null) |
| createVerticalScrollBar(); |
| return vBar; |
| } |
| |
| /** |
| * Returns the visibility of the ScrollPane's vertical ScrollBar. These are |
| * represented by the integer class constants {@link #NEVER}, |
| * {@link #AUTOMATIC}, and {@link #ALWAYS}. The default is |
| * {@link #AUTOMATIC}. |
| * |
| * @return the visibility of the vertical scrollbar |
| * @since 2.0 |
| */ |
| public int getVerticalScrollBarVisibility() { |
| return vVisibility; |
| } |
| |
| /** |
| * Returns the contents of the viewport. |
| * |
| * @return the contents of the viewport |
| */ |
| public IFigure getContents() { |
| return getView(); |
| } |
| |
| /** |
| * Returns the ScrollPane's view. The view is the IFigure that is the |
| * contents of the ScrollPane. |
| * |
| * @return the contents |
| * @deprecated use getContents() |
| * @since 2.0 |
| */ |
| public IFigure getView() { |
| return getViewport().getContents(); |
| } |
| |
| /** |
| * Returns the ScrollPane's {@link Viewport}. |
| * |
| * @return the viewport |
| * @since 2.0 |
| */ |
| public Viewport getViewport() { |
| if (viewport == null) |
| createViewport(); |
| return viewport; |
| } |
| |
| /** |
| * Returns true because ScrollPanes are always opaque. |
| * |
| * @see IFigure#isOpaque() |
| */ |
| public boolean isOpaque() { |
| return true; |
| } |
| |
| /** |
| * Scrolls the Scrollpane horizontally x pixels from its left-most position. |
| * |
| * @param x |
| * the amount to scroll horizontally |
| * @since 2.0 |
| */ |
| public void scrollHorizontalTo(int x) { |
| getViewport().setHorizontalLocation(x); |
| } |
| |
| /** |
| * Scrolls the Scrollpane horizontally from its left-most position by |
| * location.x pixels and vertically from its top-most position by location.y |
| * pixels. |
| * |
| * @param location |
| * the point to scroll to |
| * @since 2.0 |
| */ |
| public void scrollTo(Point location) { |
| scrollHorizontalTo(location.x); |
| scrollVerticalTo(location.y); |
| } |
| |
| /** |
| * Scrolls the Scrollpane vertically y pixels from its top-most position. |
| * |
| * @param y |
| * the amount to scroll vertically |
| * @since 2.0 |
| */ |
| public void scrollVerticalTo(int y) { |
| getViewport().setVerticalLocation(y); |
| } |
| |
| /** |
| * Sets the contents of the current viewport. |
| * |
| * @param figure |
| * the contents of the viewport |
| */ |
| public void setContents(IFigure figure) { |
| setView(figure); |
| } |
| |
| /** |
| * Sets the ScrollPane's horizontal ScrollBar to the passed ScrollBar. |
| * |
| * @param bar |
| * the new horizontal scrollbar |
| * @since 2.0 |
| */ |
| public void setHorizontalScrollBar(ScrollBar bar) { |
| if (hBar != null) { |
| remove(hBar); |
| hBar.getRangeModel().removePropertyChangeListener(hBar); |
| } |
| hBar = bar; |
| if (hBar != null) { |
| add(hBar); |
| hBar.setRangeModel(getViewport().getHorizontalRangeModel()); |
| } |
| } |
| |
| /** |
| * Sets the horizontal ScrollBar visibility of the ScrollPane to the passed |
| * value. These are represented by the integer class constants |
| * {@link #NEVER}, {@link #AUTOMATIC}, and {@link #ALWAYS}. The default is |
| * {@link #AUTOMATIC}. |
| * |
| * @param v |
| * the new horizontal visibility |
| * @since 2.0 |
| */ |
| public void setHorizontalScrollBarVisibility(int v) { |
| if (hVisibility == v) |
| return; |
| hVisibility = v; |
| revalidate(); |
| } |
| |
| /** |
| * Sets both the horizontal and vertical ScrollBar visibilities of the |
| * ScrollPane to the passed value. These are represented by the integer |
| * class constants {@link #NEVER}, {@link #AUTOMATIC}, and {@link #ALWAYS}. |
| * The default is {@link #AUTOMATIC}. |
| * |
| * @param v |
| * the new vertical and horizontal visibility |
| * @since 2.0 |
| */ |
| public void setScrollBarVisibility(int v) { |
| setHorizontalScrollBarVisibility(v); |
| setVerticalScrollBarVisibility(v); |
| } |
| |
| /** |
| * Sets the ScrollPane's vertical ScrollBar to the passed Scrollbar. |
| * |
| * @param bar |
| * the new vertical scrollbar |
| * @since 2.0 |
| */ |
| public void setVerticalScrollBar(ScrollBar bar) { |
| if (vBar != null) { |
| remove(vBar); |
| vBar.getRangeModel().removePropertyChangeListener(vBar); |
| } |
| vBar = bar; |
| if (vBar != null) { |
| add(vBar); |
| vBar.setRangeModel(getViewport().getVerticalRangeModel()); |
| } |
| } |
| |
| /** |
| * Sets the vertical ScrollBar visibility of the ScrollPane to the passed |
| * value. These are represented by the integer class constants |
| * {@link #NEVER}, {@link #AUTOMATIC}, and {@link #ALWAYS}. The default is |
| * {@link #AUTOMATIC}. |
| * |
| * @param v |
| * the new vertical scrollbar visibility |
| * @since 2.0 |
| */ |
| public void setVerticalScrollBarVisibility(int v) { |
| if (vVisibility == v) |
| return; |
| vVisibility = v; |
| revalidate(); |
| } |
| |
| /** |
| * Sets the ScrollPane's view to the passed IFigure. The view is the |
| * top-level IFigure which represents the contents of the ScrollPane. |
| * |
| * @param figure |
| * the new contents |
| * @deprecated call setContents(IFigure) instead |
| * @since 2.0 |
| */ |
| public void setView(IFigure figure) { |
| getViewport().setContents(figure); |
| } |
| |
| /** |
| * Sets the ScrollPane's Viewport to the passed value. |
| * |
| * @param vp |
| * the new viewport |
| * @since 2.0 |
| */ |
| public void setViewport(Viewport vp) { |
| if (viewport != null) |
| remove(viewport); |
| viewport = vp; |
| if (vp != null) |
| add(vp, 0); |
| } |
| |
| /** |
| * @see IFigure#validate() |
| */ |
| public void validate() { |
| super.validate(); |
| getHorizontalScrollBar().validate(); |
| getVerticalScrollBar().validate(); |
| } |
| |
| } |