/* * org.openmicroscopy.shoola.util.ui.ScrollablePane * *------------------------------------------------------------------------------ * Copyright (C) 2006-2008 University of Dundee. All rights reserved. * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *------------------------------------------------------------------------------ */ package org.openmicroscopy.shoola.util.ui; //Java imports import java.awt.Dimension; import java.awt.Rectangle; import javax.swing.JPanel; import javax.swing.Scrollable; //Third-party libraries //Application-internal dependencies /** * This is a JPanel that implements the {@link Scrollable} interface in * such a way as to always resize horizontally within a scroll pane. * * @author William Moore      * <a href="mailto:will@lifesci.dundee.ac.uk">will@lifesci.dundee.ac.uk</a> * @version 3.0 * <small> * (<b>Internal version:</b> $Revision: $Date: $) * </small> * @since OME3.0 */ public class ScrollablePanel extends JPanel implements Scrollable { /** The default increment value. */ private static int INCREMENT = 50; /** The increment value. */ private int increment; /** The unit increment. */ private int unitIncrement; /** * Flag returned by the * {@link Scrollable#getScrollableTracksViewportHeight()}. */ private boolean scrollableViewportHeight; /** * Creates a default instance. * * @param scrollableViewportHeight The value to set. */ public ScrollablePanel(boolean scrollableViewportHeight) { this(INCREMENT, scrollableViewportHeight); } /** Creates a default instance. */ public ScrollablePanel() { this(INCREMENT, false); } /** * Creates a new instance. * * @param increment The increment value. * @param scrollableViewportHeight The value to set. */ public ScrollablePanel(int increment, boolean scrollableViewportHeight) { if (increment < 0) increment = INCREMENT; this.increment = increment; unitIncrement = 1; this.scrollableViewportHeight = scrollableViewportHeight; } /** * Sets the unit. * * @param unitIncrement The value to set. */ public void setUnitIncrement(int unitIncrement) { this.unitIncrement = unitIncrement; } /** * Implemented as required by the {@link Scrollable} interface. * Null implementation. * @see Scrollable#getPreferredScrollableViewportSize() */ public Dimension getPreferredScrollableViewportSize() { return null; } /** * Implemented as required by the {@link Scrollable} interface. * @see Scrollable#getScrollableBlockIncrement(Rectangle, int, int) */ public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) { return increment; } /** * Implemented as required by the {@link Scrollable} interface. * @see Scrollable#getScrollableTracksViewportHeight() */ public boolean getScrollableTracksViewportHeight() { return scrollableViewportHeight; } /** * Implemented as specified by the {@link Scrollable} interface. * Returns <code>true</code>, so that the panel stays the same size as * the view-port in which it is displayed. * @see Scrollable#getScrollableTracksViewportWidth() */ public boolean getScrollableTracksViewportWidth() { return true; } /** * Implemented as required by the {@link Scrollable} interface. * @see Scrollable#getScrollableUnitIncrement(Rectangle, int, int) */ public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) { return unitIncrement; } }