diff options
Diffstat (limited to 'libjava/classpath/javax/swing/JScrollPane.java')
-rw-r--r-- | libjava/classpath/javax/swing/JScrollPane.java | 712 |
1 files changed, 0 insertions, 712 deletions
diff --git a/libjava/classpath/javax/swing/JScrollPane.java b/libjava/classpath/javax/swing/JScrollPane.java deleted file mode 100644 index 6d17857..0000000 --- a/libjava/classpath/javax/swing/JScrollPane.java +++ /dev/null @@ -1,712 +0,0 @@ -/* JScrollPane.java -- - Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc. - -This file is part of GNU Classpath. - -GNU Classpath 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, or (at your option) -any later version. - -GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 USA. - -Linking this library statically or dynamically with other modules is -making a combined work based on this library. Thus, the terms and -conditions of the GNU General Public License cover the whole -combination. - -As a special exception, the copyright holders of this library give you -permission to link this library with independent modules to produce an -executable, regardless of the license terms of these independent -modules, and to copy and distribute the resulting executable under -terms of your choice, provided that you also meet, for each linked -independent module, the terms and conditions of the license of that -module. An independent module is a module which is not derived from -or based on this library. If you modify this library, you may extend -this exception to your version of the library, but you are not -obligated to do so. If you do not wish to do so, delete this -exception statement from your version. */ - - -package javax.swing; - -import java.awt.Component; -import java.awt.ComponentOrientation; -import java.awt.Insets; -import java.awt.LayoutManager; -import java.awt.Rectangle; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.accessibility.Accessible; -import javax.accessibility.AccessibleContext; -import javax.swing.border.Border; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import javax.swing.plaf.ScrollPaneUI; -import javax.swing.plaf.UIResource; - -/** - * A component that embeds another component and enables it to be scrolled - * both in horizontal and vertical direction. - * - * <table> - * <tr><th>Property </th><th>Stored in </th><th>Bound?</th></tr> - * <tr><td>columnHeader </td><td>scrollPane </td><td>yes </td></tr> - * <tr><td>columnHeaderView </td><td>columnHeader </td><td>no </td></tr> - * <tr><td>componentOrientation </td><td>scrollPane </td><td>yes </td></tr> - * <tr><td>horizontalScrollBar </td><td>scrollPane </td><td>yes </td></tr> - * <tr><td>horizontalScrollBarPolicy </td><td>scrollPane </td><td>yes </td></tr> - * <tr><td>layout </td><td>scrollPane </td><td>yes </td></tr> - * <tr><td>rowHeader </td><td>scrollPane </td><td>yes </td></tr> - * <tr><td>rowHeaderView </td><td>rowHeader </td><td>no </td></tr> - * <tr><td>validateRoot </td><td>scrollPane </td><td>no </td></tr> - * <tr><td>verticalScrollBar </td><td>scrollPane </td><td>yes </td></tr> - * <tr><td>verticalScrollBarPolicy </td><td>scrollPane </td><td>yes </td></tr> - * <tr><td>viewport </td><td>scrollPane </td><td>yes </td></tr> - * <tr><td>viewportBorder </td><td>scrollPane </td><td>yes </td></tr> - * <tr><td>viewportBorderBounds </td><td>scrollPane </td><td>no </td></tr> - * <tr><td>viewportView </td><td>viewport </td><td>no </td></tr> - * <tr><td>wheelScrollingEnabled </td><td>scrollPane </td><td>yes </td></tr> - * </table> - */ -public class JScrollPane extends JComponent - implements Accessible, ScrollPaneConstants -{ - /** - * Provides accessibility support for the <code>JScrollPane</code>. - * - * @author Roman Kennke (kennke@aicas.com) - */ - protected class AccessibleJScrollPane extends AccessibleJComponent - implements ChangeListener, PropertyChangeListener - { - - /** - * The viewport of the underlying scrollpane. - */ - protected JViewport viewPort; - - /** - * Creates a new <code>AccessibleJScrollPane</code> object. This - * initializes the <code>viewport</code> field with the current viewport - * from the scrollpane associated with this - * <code>AccessibleJScrollPane</code>. - */ - public AccessibleJScrollPane() - { - viewPort = getViewport(); - viewPort.addChangeListener(this); - viewPort.addPropertyChangeListener(this); - } - - /** - * Receives notification when the state of the viewport changes. - * - * @param event the change event - */ - public void stateChanged(ChangeEvent event) - { - // TODO: Figure out what should be done here, if anything. - } - - /** - * Receives notification if any of the viewport's bound properties changes. - * - * @param e the propery change event - */ - public void propertyChange(PropertyChangeEvent e) - { - // TODO: Figure out what should be done here, if anything. - } - - /** - * Resets the <code>viewPort</code> field when the scrollpane's viewport - * changes. This method is called by - * {@link JScrollPane#setViewport(JViewport)} in order to update the - * <code>viewPort</code> field and set up the listeners on this viewport - * correctly. - */ - public void resetViewPort() - { - viewPort.removeChangeListener(this); - viewPort.removePropertyChangeListener(this); - viewPort = getViewport(); - viewPort.addChangeListener(this); - viewPort.addPropertyChangeListener(this); - } - } - - private static final long serialVersionUID = 5203525440012340014L; - - protected JViewport columnHeader; - protected JViewport rowHeader; - - protected Component lowerLeft; - protected Component lowerRight; - protected Component upperLeft; - protected Component upperRight; - - protected JScrollBar horizontalScrollBar; - protected int horizontalScrollBarPolicy; - protected JScrollBar verticalScrollBar; - protected int verticalScrollBarPolicy; - - protected JViewport viewport; - - private Border viewportBorder; - - private boolean wheelScrollingEnabled; - - public JViewport getColumnHeader() - { - return columnHeader; - } - - public Component getCorner(String key) - { - if (getComponentOrientation() - == ComponentOrientation.LEFT_TO_RIGHT) - { - if (key == LOWER_LEADING_CORNER) - key = LOWER_LEFT_CORNER; - else if (key == LOWER_TRAILING_CORNER) - key = LOWER_RIGHT_CORNER; - else if (key == UPPER_LEADING_CORNER) - key = UPPER_LEFT_CORNER; - else if (key == UPPER_TRAILING_CORNER) - key = UPPER_RIGHT_CORNER; - } - else if (getComponentOrientation() - == ComponentOrientation.RIGHT_TO_LEFT) - { - if (key == LOWER_LEADING_CORNER) - key = LOWER_RIGHT_CORNER; - else if (key == LOWER_TRAILING_CORNER) - key = LOWER_LEFT_CORNER; - else if (key == UPPER_LEADING_CORNER) - key = UPPER_RIGHT_CORNER; - else if (key == UPPER_TRAILING_CORNER) - key = UPPER_LEFT_CORNER; - } - - if (key == LOWER_RIGHT_CORNER) - return lowerRight; - else if (key == UPPER_RIGHT_CORNER) - return upperRight; - else if (key == LOWER_LEFT_CORNER) - return lowerLeft; - else if (key == UPPER_LEFT_CORNER) - return upperLeft; - return null; - } - - public JScrollBar getHorizontalScrollBar() - { - return horizontalScrollBar; - } - - public int getHorizontalScrollBarPolicy() - { - return horizontalScrollBarPolicy; - } - - public JViewport getRowHeader() - { - return rowHeader; - } - - public JScrollBar getVerticalScrollBar() - { - return verticalScrollBar; - } - - public int getVerticalScrollBarPolicy() - { - return verticalScrollBarPolicy; - } - - public JViewport getViewport() - { - return viewport; - } - - public Border getViewportBorder() - { - return viewportBorder; - } - - public Rectangle getViewportBorderBounds() - { - if (viewportBorder == null) - { - if (getViewport() == null) - return new Rectangle(0, 0, 0, 0); - else - return getViewport().getBounds(); - } - else - { - Insets i = viewportBorder.getBorderInsets(getViewport()); - if (getViewport() == null) - return new Rectangle(0, 0, i.left + i.right, i.top + i.bottom); - else - { - Rectangle b = getViewport().getBounds(); - return new Rectangle(b.x - i.left, - b.y - i.top, - b.width + i.left + i.right, - b.height + i.top + i.bottom); - } - } - } - - public boolean isWheelScrollingEnabled() - { - return wheelScrollingEnabled; - } - - - - private void sync() - { - LayoutManager m = super.getLayout(); - if (m != null && m instanceof ScrollPaneLayout) - { - ScrollPaneLayout sl = (ScrollPaneLayout) m; - sl.syncWithScrollPane(this); - } - } - - private void removeNonNull(Component c) - { - if (c != null) - remove(c); - } - - private void addNonNull(Component c, Object constraints) - { - if (c != null) - add(c, constraints); - } - - public void setComponentOrientation(ComponentOrientation co) - { - ComponentOrientation old = super.getComponentOrientation(); - super.setComponentOrientation(co); - firePropertyChange("componentOrientation", old, co); - sync(); - } - - public void setColumnHeader(JViewport h) - { - if (columnHeader == h) - return; - - JViewport old = columnHeader; - removeNonNull(old); - columnHeader = h; - addNonNull(h, JScrollPane.COLUMN_HEADER); - firePropertyChange("columnHeader", old, h); - sync(); - } - - public void setColumnHeaderView(Component c) - { - if (columnHeader == null) - setColumnHeader(createViewport()); - columnHeader.setView(c); - sync(); - } - - public void setCorner(String key, Component c) - { - if (getComponentOrientation() - == ComponentOrientation.LEFT_TO_RIGHT) - { - if (key == LOWER_LEADING_CORNER) - key = LOWER_LEFT_CORNER; - else if (key == LOWER_TRAILING_CORNER) - key = LOWER_RIGHT_CORNER; - else if (key == UPPER_LEADING_CORNER) - key = UPPER_LEFT_CORNER; - else if (key == UPPER_TRAILING_CORNER) - key = UPPER_RIGHT_CORNER; - } - else if (getComponentOrientation() - == ComponentOrientation.RIGHT_TO_LEFT) - { - if (key == LOWER_LEADING_CORNER) - key = LOWER_RIGHT_CORNER; - else if (key == LOWER_TRAILING_CORNER) - key = LOWER_LEFT_CORNER; - else if (key == UPPER_LEADING_CORNER) - key = UPPER_RIGHT_CORNER; - else if (key == UPPER_TRAILING_CORNER) - key = UPPER_LEFT_CORNER; - } - - if (key == LOWER_RIGHT_CORNER) - { - removeNonNull(lowerRight); - lowerRight = c; - addNonNull(c, JScrollPane.LOWER_RIGHT_CORNER); - } - else if (key == UPPER_RIGHT_CORNER) - { - removeNonNull(upperRight); - upperRight = c; - addNonNull(c, JScrollPane.UPPER_RIGHT_CORNER); - } - else if (key == LOWER_LEFT_CORNER) - { - removeNonNull(lowerLeft); - lowerLeft = c; - addNonNull(c, JScrollPane.LOWER_LEFT_CORNER); - } - else if (key == UPPER_LEFT_CORNER) - { - removeNonNull(upperLeft); - upperLeft = c; - addNonNull(c, JScrollPane.UPPER_LEFT_CORNER); - } - else - throw new IllegalArgumentException("unknown corner " + key); - sync(); - } - - public void setHorizontalScrollBar(JScrollBar h) - { - if (horizontalScrollBar == h) - return; - - JScrollBar old = horizontalScrollBar; - removeNonNull(old); - horizontalScrollBar = h; - addNonNull(h, JScrollPane.HORIZONTAL_SCROLLBAR); - firePropertyChange("horizontalScrollBar", old, h); - sync(); - - } - - public void setHorizontalScrollBarPolicy(int h) - { - if (horizontalScrollBarPolicy == h) - return; - - if (h != HORIZONTAL_SCROLLBAR_AS_NEEDED - && h != HORIZONTAL_SCROLLBAR_NEVER - && h != HORIZONTAL_SCROLLBAR_ALWAYS) - throw new IllegalArgumentException("unknown horizontal scrollbar policy"); - - int old = horizontalScrollBarPolicy; - horizontalScrollBarPolicy = h; - firePropertyChange("horizontalScrollBarPolicy", old, h); - sync(); - revalidate(); - } - - public void setLayout(LayoutManager l) - { - LayoutManager old = super.getLayout(); - ScrollPaneLayout tmp = (ScrollPaneLayout) l; - super.setLayout(l); - tmp.syncWithScrollPane(this); - firePropertyChange("layout", old, l); - sync(); - } - - public void setRowHeader(JViewport v) - { - if (rowHeader == v) - return; - - JViewport old = rowHeader; - removeNonNull(old); - rowHeader = v; - addNonNull(v, JScrollPane.ROW_HEADER); - firePropertyChange("rowHeader", old, v); - sync(); - } - - public void setRowHeaderView(Component c) - { - if (rowHeader == null) - setRowHeader(createViewport()); - rowHeader.setView(c); - sync(); - } - - public void setVerticalScrollBar(JScrollBar v) - { - if (verticalScrollBar == v) - return; - - JScrollBar old = verticalScrollBar; - removeNonNull(old); - verticalScrollBar = v; - addNonNull(v, JScrollPane.VERTICAL_SCROLLBAR); - firePropertyChange("verticalScrollBar", old, v); - sync(); - } - - public void setVerticalScrollBarPolicy(int v) - { - if (verticalScrollBarPolicy == v) - return; - - if (v != VERTICAL_SCROLLBAR_AS_NEEDED - && v != VERTICAL_SCROLLBAR_NEVER - && v != VERTICAL_SCROLLBAR_ALWAYS) - throw new IllegalArgumentException("unknown vertical scrollbar policy"); - - int old = verticalScrollBarPolicy; - verticalScrollBarPolicy = v; - firePropertyChange("verticalScrollBarPolicy", old, v); - sync(); - revalidate(); - } - - public void setWheelScrollingEnabled(boolean b) - { - if (wheelScrollingEnabled == b) - return; - - boolean old = wheelScrollingEnabled; - wheelScrollingEnabled = b; - firePropertyChange("wheelScrollingEnabled", old, b); - sync(); - } - - public void setViewport(JViewport v) - { - if (viewport == v) - return; - - JViewport old = viewport; - removeNonNull(old); - viewport = v; - addNonNull(v, JScrollPane.VIEWPORT); - revalidate(); - repaint(); - firePropertyChange("viewport", old, v); - sync(); - if (accessibleContext != null) - { - AccessibleJScrollPane asp = (AccessibleJScrollPane) accessibleContext; - asp.resetViewPort(); - } - } - - public void setViewportBorder(Border b) - { - if (viewportBorder == b) - return; - - Border old = viewportBorder; - viewportBorder = b; - firePropertyChange("viewportBorder", old, b); - sync(); - } - - public void setViewportView(Component view) - { - if (getViewport() == null) - { - setViewport(createViewport()); - } - - if (view != null) - { - getViewport().setView(view); - } - sync(); - } - - public boolean isValidateRoot() - { - return true; - } - - /** - * Creates a new <code>JScrollPane</code> without a view. The scrollbar - * policy is set to {@link #VERTICAL_SCROLLBAR_AS_NEEDED} and - * {@link #HORIZONTAL_SCROLLBAR_AS_NEEDED}. - */ - public JScrollPane() - { - this(null); - } - - /** - * Creates a new <code>JScrollPane</code> that embeds the specified - * <code>view</code> component, displaying vertical and horizontal scrollbars - * as needed. - * - * @param view the component that is embedded inside the JScrollPane - */ - public JScrollPane(Component view) - { - this(view, - VERTICAL_SCROLLBAR_AS_NEEDED, - HORIZONTAL_SCROLLBAR_AS_NEEDED); - } - - /** - * Creates a new <code>JScrollPane</code> without a view; The scrollbar - * policies are set to <code>vsbPolicy</code> and <code>hsbPolicy</code>. - * - * @param vsbPolicy the vertical scrollbar policy to set - * @param hsbPolicy the vertical scrollbar policy to set - * - * @see ScrollPaneConstants#HORIZONTAL_SCROLLBAR_ALWAYS - * @see ScrollPaneConstants#HORIZONTAL_SCROLLBAR_AS_NEEDED - * @see ScrollPaneConstants#HORIZONTAL_SCROLLBAR_NEVER - * @see ScrollPaneConstants#VERTICAL_SCROLLBAR_ALWAYS - * @see ScrollPaneConstants#VERTICAL_SCROLLBAR_AS_NEEDED - * @see ScrollPaneConstants#VERTICAL_SCROLLBAR_NEVER - */ - public JScrollPane(int vsbPolicy, int hsbPolicy) - { - this(null, vsbPolicy, hsbPolicy); - } - - /** - * Creates a new <code>JScrollPane</code> that embeds the specified - * <code>view</code> component; The scrollbar - * policies are set to <code>vsbPolicy</code> and <code>hsbPolicy</code>. - * - * @param vsbPolicy the vertical scrollbar policy to set - * @param hsbPolicy the vertical scrollbar policy to set - * - * @see ScrollPaneConstants#HORIZONTAL_SCROLLBAR_ALWAYS - * @see ScrollPaneConstants#HORIZONTAL_SCROLLBAR_AS_NEEDED - * @see ScrollPaneConstants#HORIZONTAL_SCROLLBAR_NEVER - * @see ScrollPaneConstants#VERTICAL_SCROLLBAR_ALWAYS - * @see ScrollPaneConstants#VERTICAL_SCROLLBAR_AS_NEEDED - * @see ScrollPaneConstants#VERTICAL_SCROLLBAR_NEVER - */ - public JScrollPane(Component view, int vsbPolicy, int hsbPolicy) - { - wheelScrollingEnabled = true; - setVerticalScrollBarPolicy(vsbPolicy); - setVerticalScrollBar(createVerticalScrollBar()); - setHorizontalScrollBarPolicy(hsbPolicy); - setHorizontalScrollBar(createHorizontalScrollBar()); - viewport = createViewport(); - if (view != null) - getViewport().setView(view); - add(viewport,0); - setLayout(new ScrollPaneLayout()); - setOpaque(false); - updateUI(); - } - - - public JScrollBar createHorizontalScrollBar() - { - return new ScrollBar(SwingConstants.HORIZONTAL); - } - - public JScrollBar createVerticalScrollBar() - { - return new ScrollBar(SwingConstants.VERTICAL); - } - - protected JViewport createViewport() - { - return new JViewport(); - } - - public String getUIClassID() - { - return "ScrollPaneUI"; - } - - public void updateUI() - { - setUI((ScrollPaneUI) UIManager.getUI(this)); - } - - /** - * This method returns the scrollpane's UI delegate. - * - * @return The scrollpane's UI delegate. - */ - public ScrollPaneUI getUI() - { - return (ScrollPaneUI) ui; - } - - /** - * This method sets the scrollpane's UI delegate. - * - * @param ui The scrollpane's UI delegate. - */ - public void setUI(ScrollPaneUI ui) - { - super.setUI(ui); - } - - protected class ScrollBar - extends JScrollBar - implements UIResource - { - private static final long serialVersionUID = -42032395320987283L; - - public ScrollBar(int orientation) - { - super(orientation); - } - - public int getBlockIncrement(int direction) - { - Component view = JScrollPane.this.getViewport().getView(); - if (view == null || (! (view instanceof Scrollable))) - return super.getBlockIncrement(direction); - else - { - Scrollable s = (Scrollable) view; - return s.getScrollableBlockIncrement(JScrollPane.this.getViewport().getViewRect(), - this.getOrientation(), - direction); - } - } - - public int getUnitIncrement(int direction) - { - Component view = JScrollPane.this.getViewport().getView(); - if (view == null || (! (view instanceof Scrollable))) - return super.getUnitIncrement(direction); - else - { - Scrollable s = (Scrollable) view; - return s.getScrollableUnitIncrement(JScrollPane.this.getViewport().getViewRect(), - this.getOrientation(), - direction); - } - } - } - - /** - * Returns the accessible context associated with this - * <code>JScrollPane</code>. - * - * @return the accessible context associated with this - * <code>JScrollPane</code> - */ - public AccessibleContext getAccessibleContext() - { - if (accessibleContext == null) - accessibleContext = new AccessibleJScrollPane(); - return accessibleContext; - } -} |